anchor.diff:  -module(ddfs_master).
   -behaviour(gen_server).
   
  --export([start_link/0, stop/0]).
  +-export([start_link/0]).
   -export([get_tags/1,
            get_nodeinfo/1,
            get_read_nodes/0,
  
positive.code: update_gc_stats(Stats) ->
      gen_server:cast(?MODULE, {update_gc_stats, Stats}).
  
  -spec update_nodes([{node(), boolean(), boolean()}]) -> 'ok'.
  update_nodes(DDFSNodes) ->
      gen_server:cast(?MODULE, {update_nodes, DDFSNodes}).
  
  
negative.code:     put(put_port, disco:get_setting("DDFS_PUT_PORT")),
      {ok, #state{cache_refresher = Refresher}}.
  
  -type choose_write_nodes_msg() :: {choose_write_nodes, non_neg_integer(), [node()]}.
  -type new_blob_msg() :: {new_blob, string() | object_name(), non_neg_integer(), [node()]}.
  -type tag_msg() :: {tag, ddfs_tag:call_msg(), tagname()}.
  -spec handle_call(dbg_state_msg(), from(), state()) ->
                           {reply, state(), state()};
                   ({get_nodeinfo, all}, from(), state()) ->
                           {reply, {ok, [node_info()]}, state()};
                   (get_read_nodes, from(), state()) ->
                           {reply, {ok, [node()], non_neg_integer}, state()};
                   (gc_blacklist, from(), state()) ->
                           {reply, {ok, [node()]}, state()};
                   (gc_stats, from(), state()) ->
                           {reply, {ok, gc_stats(), erlang:timestamp()}, state()};
                   (choose_write_nodes_msg(), from(), state()) ->
                           {reply, {ok, [node()]}, state()};
                   (new_blob_msg(), from(), state()) ->
                           {reply, new_blob_result(), state()};
                   (tag_msg(), from(), state()) ->
                           {reply, {error, nonodes}, state()} | {noreply, state()};
                   ({get_tags, gc | safe}, from(), state()) ->
                           {noreply, state()};
                   ({get_hosted_tags, host()}, from(), state()) ->
                           {noreply, state()};
                   (safe_gc_blacklist, from(), state()) ->
                           {reply, {ok, [node()]}, state()}.
  handle_call(dbg_get_state, _, S) ->
      {reply, S, S};
  
  