anchor.diff:              throw({error, FullAns})
       end.
   
  --spec get_reconfiguration_nodes() -> [node()].
  -get_reconfiguration_nodes() ->
  -    get_all_nodes(?RECONFIGURATION_RING_ENV).
  +-spec get_all_ring_nodes() -> [[node()]].
  +get_all_ring_nodes() ->
  +    lists:usort([get_all_nodes_no_error(?RING_ENV), get_all_nodes_no_error(?RECONFIGURATION_RING_ENV),
  +        get_all_nodes_no_error(?TMP_RING)]) -- [[]].
   
   %%--------------------------------------------------------------------
   %% @doc
  
positive.code: -export([report_node_failure/1, report_node_recovery/1,
      set_nodes_assigned_per_label/1, get_nodes_assigned_per_label/0]).
  %% Cluster reconfiguration API
  -export([init_cluster_reconfiguration/1, finish_cluster_reconfiguration/1,
      get_reconfiguration_nodes/0, get_reconfigured_routing_info/1]).
  %% Export for internal rpc usage
  -export([set_ring/2, finish_cluster_reconfiguration/0]).
  %% Export for tests
  -export([replicate_ring_to_nodes/1, replicate_ring_to_nodes/3]).
  
  -define(RING_ENV, consistent_hashing_ring).
  -define(RECONFIGURATION_RING_ENV, reconfiguration_consistent_hashing_ring).
  
  %%%===================================================================
  %%% Basic API
  
negative.code: init_cluster_reconfiguration(Nodes) ->
      CurrentRing = get_ring(),
      Ring = init_ring(Nodes, CurrentRing#ring.nodes_assigned_per_label),
      ok = replicate_ring_to_nodes(lists:usort(Nodes ++ get_all_nodes()), ?RECONFIGURATION_RING_ENV, Ring).
  
  -spec finish_cluster_reconfiguration() -> ok | no_return().
  finish_cluster_reconfiguration() ->
      Nodes = lists:usort(get_all_nodes() ++ get_all_nodes(?RECONFIGURATION_RING_ENV)),
      {Ans, BadNodes} = FullAns = rpc:multicall(Nodes, ?MODULE, finish_cluster_reconfiguration_internal, []),
      Errors = lists:filter(fun(NodeAns) -> NodeAns =/= ok end, Ans),
      case {Errors, BadNodes} of
          {[], []} ->
  