anchor.diff:                              "[ Node ~w ] node contacted for join is not responsible "
                               "for the selected ID (anymore), trying next candidate",
                               [self()]),
  -                    {join, try_next_candidate(JoinState), QueuedMessages}
  +                    NewJoinState = try_next_candidate(JoinState),
  +                    ?TRACE_STATE(NewJoinState),
  +                    {join, NewJoinState, QueuedMessages}
               end
       end;
   
  
positive.code:                                           "trying next candidate", [self()]),
                              % note: can not keep Id, even if skip_psv_lb is set
                              JoinState1 = remove_candidate_front(JoinState),
                              {join, contact_best_candidate(JoinState1), QueuedMessages};
                          _ ->
                              ?TRACE("[ ~.0p ]~n  joined MyId:~.0p, MyIdVersion:~.0p~n  "
                                         "Succ: ~.0p~n  Pred: ~.0p~n",
  
negative.code: %%      available or not.
  -spec start_over(JoinState::phase_2_4()) -> phase2() | phase2b().
  start_over(JoinState) ->
      JoinState1 = set_new_join_uuid(JoinState),
      msg_delay:send_local(get_join_timeout() div 1000, self(),
                           {join, timeout, get_join_uuid(JoinState1)}),
      case get_connections(JoinState1) of
          [] ->
              get_known_nodes(get_join_uuid(JoinState1)),
              set_phase(phase2, JoinState1);
          [_|_] = Connections ->
              JoinState2 = set_phase(phase2, JoinState1),
              phase2_next_step(JoinState2, Connections)
      end.
  %% userdevguide-end dht_node_join:start_over
  
  