anchor.diff:                      ok
               end,
   
  -            %% Stall messages; Plumtree has a race on startup, again.
  -            timer:send_after(?NODES_INTERVAL, ?NODES_MESSAGE),
  -
               %% Only construct the graph and attempt to repair the graph
               %% from the designated server node.
               case partisan_config:get(tag, client) of
                   server ->
  -                    timer:send_after(?BUILD_GRAPH_INTERVAL, ?BUILD_GRAPH_MESSAGE);
  +                    schedule_build_graph();
                   client ->
                       ok
               end,
   
               %% All nodes should upload artifacts.
  -            timer:send_after(?ARTIFACT_INTERVAL, ?ARTIFACT_MESSAGE),
  +            schedule_artifact_upload(),
   
               %% All nodes should attempt to refresh the membership.
  -            timer:send_after(?REFRESH_INTERVAL, ?REFRESH_MESSAGE)
  +            schedule_membership_refresh(),
       end,
       {ok, #state{is_connected=false,
                   was_connected=false,
  
positive.code:             lager:info("Could not upload artifact: ~p", [Error])
      end,
  
      timer:send_after(?ARTIFACT_INTERVAL, ?ARTIFACT_MESSAGE),
      {noreply, State};
  handle_info(?BUILD_GRAPH_MESSAGE, #state{was_connected=WasConnected0}=State) ->
      _ = lager:info("Beginning graph analysis."),
  
negative.code:     %% Attempt to connect nodes that are not connected.
      AttemptedNodes = maybe_connect(ToConnectNodes, SeenNodes),
  
      shedule_membership_refresh(),
  
      {noreply, State#state{attempted_nodes=AttemptedNodes}};
  handle_info(?ARTIFACT_MESSAGE, State) ->
      %% Get bucket name.
      BucketName = bucket_name(),
  