anchor.diff:  %% @private
   -spec handle_info(term(), #state{}) -> {noreply, #state{}}.
   
  -handle_info(random_promotion, #state{myself=Myself0}=State0) ->
  -    lager:info("Random promotion for node ~p", [Myself0]),
  -    State = move_random_peer_from_passive_to_active(State0),
  +handle_info(random_promotion, #state{myself=Myself0,
  +                                     active=Active0,
  +                                     reserved=Reserved0,
  +                                     max_active_size=MaxActiveSize0}=State0) ->
  +    State = case is_full({active, Active0, Reserved0}, MaxActiveSize0) of
  +                true ->
  +                    %% Do nothing if the active view is full.
  +                    State0;
  +                false ->
  +                    lager:info("Random promotion for node ~p", [Myself0]),
  +                    move_random_peer_from_passive_to_active(State0)
  +            end,
   
       %% Schedule periodic random promotion.
       schedule_random_promotion(),
  
positive.code:     %% Establish connections.
      Connections = maybe_connect(Peer, Connections0),
  
      State = case neighbor_acceptable(Priority, PeerTag, State0) of
                  true ->
                      case is_addable(DisconnectId, Peer, SentMessageMap0) of
                          true ->
                              LastDisconnectId = get_current_id(Peer, RecvMessageMap0),
                              %% Reply to acknowledge the neighbor was accepted.
                              do_send_message(
                                  Peer,
                                  {neighbor_accepted, Myself0, Tag0, LastDisconnectId},
                                  Connections),
  
                              State1 = add_to_active_view(Peer, PeerTag, State0),
                              State1#state{connections=Connections};
                          false ->
                              %% Reply to acknowledge the neighbor was rejected.
                              do_send_message(Peer,
                                              {neighbor_rejected, Myself0},
                                              Connections),
  
                              State0#state{connections=Connections}
                      end;
                  false ->
                      %% Reply to acknowledge the neighbor was rejected.
                      do_send_message(Peer,
                                      {neighbor_rejected, Myself0},
                                      Connections),
  
                      State0#state{connections=Connections}
              end,
  
      %% Notify with event.
      notify(State),
  
negative.code:     Exchange = lists:usort(Exchange0),
  
      %% Select random member of the active list.
      State = case select_random(Active, [Myself]) of
                  undefined ->
                      State0;
                  Random ->
                      %% Trigger connection.
                      Connections = maybe_connect(Random, Connections0),
  
                      %% Forward shuffle request.
                      do_send_message(Random,
                                      {shuffle, Exchange, arwl(), Myself},
                                      Connections),
  
                      State0#state{connections=Connections}
              end,
  
      %% Schedule periodic maintenance of the passive view.
      schedule_passive_view_maintenance(),
  