anchor.diff:      UpdatedNodes =
           case gb_trees:lookup(Node, Nodes) of
               {value, N} when Status =:= up ->
  -                N1 = N#dnode{connection_status = up},
  +                N1 = N#dnode{connection_status = {up, now()}},
                   gb_trees:update(Node, N1, Nodes);
               {value, N} when Status =:= down ->
  -                N1 = N#dnode{connection_status = now()},
  +                N1 = N#dnode{connection_status = {down, now()}},
                   gb_trees:update(Node, N1, Nodes);
               _ -> Nodes
           end,
  
positive.code: -include("disco.hrl").
  -include("gs_util.hrl").
  
  -type connection_status() :: undefined | up | erlang:timestamp().
  
  -record(dnode, {host :: host_name(),
                  node_mon :: pid(),
  
negative.code:     #node_ports{get_port = GetPort, put_port = PutPort}.
  
  -spec allow_write(#dnode{}) -> boolean().
  allow_write(#dnode{connection_status = {up, _},
                     manual_blacklist = false}) ->
      true;
  allow_write(#dnode{}) ->
      false.
  
  -spec allow_read(#dnode{}) -> boolean().
  allow_read(#dnode{connection_status = {up, _}}) ->
      true;
  allow_read(#dnode{}) ->
      false.
  