anchor.diff:                         ns_cluster_membership:activate(KeepNodes),
   
                          rebalance(KeepNodes, EjectNodes, FailedNodes,
  -                                 BucketConfigs, DeltaRecoveryBucketTuples)
  +                                 BucketConfigs,
  +                                 DeltaRecoveryBucketTuples)
                  end
          end, []]).
   
  
positive.code: 
      unlink(RebalanceObserver),
      exit(RebalanceObserver, shutdown),
      misc:wait_for_process(RebalanceObserver, infinity),
  
      ns_config:sync_announcements(),
      ns_config_rep:push(),
      ok = ns_config_rep:synchronize_remote(KeepNodes),
  
      maybe_delay_eject_nodes(StartTS, EjectNodesAll),
      eject_nodes(EjectNodes).
  
  
  
  %% @doc Rebalance the cluster. Operates on a single bucket. Will
  %% either return ok or exit with reason 'stopped' or whatever reason
  %% was given by whatever failed.
  rebalance(Bucket, Config, KeepNodes, BucketCompletion, NumBuckets, DeltaRecoveryBuckets) ->
      Map = proplists:get_value(map, Config),
      {FastForwardMap, MapOptions} =
          case lists:keyfind(Bucket, 1, DeltaRecoveryBuckets) of
  
negative.code:             exit(Error)
      end,
  
      {ok, RebalanceObserver} = ns_rebalance_observer:start_link(length(BucketConfigs)),
  
      lists:foreach(fun ({I, {BucketName, BucketConfig}}) ->
                            ale:info(?USER_LOGGER, "Started rebalancing bucket ~s", [BucketName]),
                            ?rebalance_info("Rebalancing bucket ~p with config ~p",
  