anchor.diff:  handle_cast({purge_job, JobName}, S) ->
       {noreply, do_purge_job(JobName, S)}.
   
  +-spec handle_call(dbg_state_msg(), from(), state()) -> gs_reply(state());
  +                 ({new_job, jobname(), pid()}, from(), state()) -> gs_reply(ok);
  +                 ({new_task, task()}, from(), state()) -> gs_reply(ok | failed);
  +                 ({get_active, jobname()}, from(), state()) ->
  +                         gs_reply({ok, active_tasks()});
  +                 ({get_nodeinfo, all}, from(), state()) ->
  +                         gs_reply({ok, [nodeinfo()]});
  +                 (get_purged, from(), state()) -> gs_reply({ok, [binary()]});
  +                 (get_num_cores, from(), state()) -> gs_reply({ok, cores()});
  +                 ({jobpack, jobname()}, from(), state()) -> gs_noreply();
  +                 ({kill_job, jobname()} | {clean_job, jobname()}
  +                  | connection_status | manual_blacklist | gc_blacklist,
  +                  from(), state()) -> gs_reply(ok).
   handle_call(dbg_get_state, _, S) ->
       {reply, S, S};
   
  
positive.code:     update_nodes(UpdatedNodes),
      S#state{nodes = UpdatedNodes}.
  
  -spec do_manual_blacklist(host_name(), boolean(), #state{}) -> #state{}.
  do_manual_blacklist(Node, True, #state{nodes = Nodes} = S) ->
      UpdatedNodes =
          case gb_trees:lookup(Node, Nodes) of
  
negative.code:     gen_server:cast(scheduler, {update_nodes, WhiteNodes}),
      schedule_next().
  
  -spec update_stats(host_name(), none | {value, dnode()}, _,
                     state()) -> state().
  update_stats(_Node, none, _ReplyType, S) -> S;
  update_stats(Node, {value, N}, ReplyType, S) ->
      M = N#dnode{num_running = N#dnode.num_running - 1},
  