anchor.diff:      ?assertEqual([{"b1", conf1, {map, opts}}], build_delta_recovery_buckets_loop(MappedConfigs, ["b1"], [])),
       ?assertEqual([{"b1", conf1, {map, opts}}], build_delta_recovery_buckets_loop([hd(MappedConfigs)], all, [])).
   
  -apply_delta_recovery_buckets([], _DeltaNodes) ->
  +apply_delta_recovery_buckets([], _DeltaNodes, _CurrentBuckets) ->
       ok;
  -apply_delta_recovery_buckets(DeltaRecoveryBuckets, DeltaNodes) ->
  -    lists:foreach(
  -      fun ({Bucket, BucketConfig, _}) ->
  -              ns_bucket:set_bucket_config(Bucket, BucketConfig)
  -      end, DeltaRecoveryBuckets),
  +apply_delta_recovery_buckets(DeltaRecoveryBuckets, DeltaNodes, CurrentBuckets) ->
  +    NewBuckets = misc:update_proplist(
  +                   CurrentBuckets,
  +                   [{Bucket, BucketConfig} ||
  +                       {Bucket, BucketConfig, _} <- DeltaRecoveryBuckets]),
  +    NodeChanges = [[{{node, N, recovery_type}, none},
  +                      {{node, N, failover_vbuckets}, undefined},
  +                      {{node, N, membership}, active}] || N <- DeltaNodes],
  +    BucketChanges = {buckets, [{configs, NewBuckets}]},
  +
  +    Changes = lists:flatten([BucketChanges, NodeChanges]),
  +    ok = ns_config:set(Changes),
   
       ns_config:sync_announcements(),
       case ns_config_rep:synchronize_remote(DeltaNodes) of
  
positive.code:                        master_activity_events:note_rebalance_start(
                           self(), KeepNodes, EjectNodes, FailedNodes, DeltaNodes),
  
                         ok = apply_delta_recovery_buckets(DeltaRecoveryBucketTuples, DeltaNodes),
                         ns_cluster_membership:activate(KeepNodes),
  
                         rebalance(KeepNodes, EjectNodes, FailedNodes,
  
negative.code:               ok = wait_for_bucket(Bucket, DeltaNodes)
        end, DeltaRecoveryBuckets),
  
      ok.
  
  
  wait_for_bucket(Bucket, Nodes) ->
  