anchor.diff:  -export([init/1, handle_call/3, handle_cast/2, handle_info/2,
            terminate/2, code_change/3]).
   
  --record(state, {nodes, timer}).
  +-record(state, {nodes}).
   
   -include_lib("eunit/include/eunit.hrl").
   
  
positive.code: handle_info({nodeup, Node}, State) ->
      ns_log:log(?MODULE, ?NODE_UP, "Node ~p saw that node ~p came up.",
                 [node(), Node]),
      % We might be tempted to proactively push/pull/sync
      % our configs with the "new" Node.  Instead, it's
      % cleaner to asynchronous do a gen_event:notify()
      % Delay the notification for five seconds to give the
      % config a chance to settle before notifying clients.
      {ok, _Tref} = timer:send_after(?NODE_CHANGE_DELAY, notify_clients),
      {noreply, State};
  
  handle_info({nodedown, Node}, State) ->
      ns_log:log(?MODULE, ?NODE_DOWN, "Node ~p saw that node ~p went down.",
                 [node(), Node]),
      {ok, _Tref} = timer:send_after(?NODE_CHANGE_DELAY, notify_clients),
      {noreply, State};
  
  handle_info(notify_clients, State) ->
  
negative.code: -module(ns_node_disco).
  
  -behaviour(gen_server).
  
  -include("ns_common.hrl").
  
  