anchor.diff:              {ok, State1} = init([]),
               {reply, true, State1}
       end;
  -
  -handle_call(peers, _From, State) ->
  -    {reply, State#state.peers, State};
  -
  -handle_call(prepare_join, _From, State) ->
  -    %% Remove the cluster table so there's no collision, and so that
  -    %% if this node is not promoted it will know it's a worker.
  -    case mnesia:delete_table(cluster) of
  -        {atomic, ok} ->
  -            ok;
  -        {aborted, {no_exists, _}} ->
  -            ok
  -    end,
  -    {reply, ok, State};
  -
  -handle_call({promote_self, Node}, _From, State) ->
  -    case mnesia:system_info(db_nodes) of
  -        [N] when N == node() ->
  -            %% Even though we use local_content tables, it's impossible to
  -            %% merge them, so instead we backup and restore.
  -            ?log_info("Promoting this node to a peer.", []),
  -            Tables = [Table || Table <- mnesia:system_info(tables),
  -                               mnesia:table_info(Table, local_content)],
  -            backup(),
  -            stopped = mnesia:stop(),
  -            ok = mnesia:delete_schema([node()]),
  -            start_mnesia(),
  -            %% Connect to an existing peer
  -            {ok, [Node]} = mnesia:change_config(extra_db_nodes, [Node]),
  -            %% Write the schema to disk & restore from backup
  -            restore(Tables, 10);
  -        _ ->
  -            %% Only promote if we're not already a peer
  -            ?log_error("Attempt to promote even though we're already a peer.",
  -                       []),
  -            ok
  -    end,
  -    {reply, ok, State};
   
   handle_call(wipe, _From, State) ->
       stopped = mnesia:stop(),
  
positive.code:     gen_server:call(?MODULE, {maybe_rename, NewAddr}, 30000).
  
  
  %% @doc Returns a list of peers if this node is a peer, empty otherwise.
  -spec peers() ->
                     [node()].
  peers() ->
      gen_server:call(?MODULE, peers).
  
  
  %% @doc Prepare to join a cluster, deleting any temporary
  %% non-local-content tables to avoid conflicts.
  prepare_join() ->
      gen_server:call(?MODULE, prepare_join).
  
  
  %% @doc Promote a node that's already in the cluster to a peer.
  promote(Node) ->
      gen_server:call({?MODULE, Node}, {promote_self, node()}, 30000).
  
  
  %% @doc Promote *this* node by joining another node.
  promote_self(OtherNode) ->
      gen_server:call(?MODULE, {promote_self, OtherNode}, 30000).
  
  
  %% @doc Start the gen_server
  start_link() ->
      gen_server:start_link({local, ?MODULE}, ?MODULE, [], []).
  
negative.code:     ok.
  
  
  %% @private
  %% @doc Exit if Fun hasn't returned within the specified timeout.
  -spec do_with_timeout(fun(), {pid(), any()}, non_neg_integer()) ->
  