anchor.diff:  
   -spec kill_all_children(module(), bucket_name(), node() | [node()]) -> ok.
   kill_all_children(Policy, Bucket, Node) when is_atom(Node) ->
  -    try children(Policy, Bucket, Node) of
  -        Children ->
  -            lists:foreach(
  -              fun (Child) ->
  -                      kill_child(Policy, Bucket, Node, Child)
  -              end, Children)
  -    catch exit:{noproc, _} ->
  -            %% If the supervisor isn't running, obviously there's no
  -            %% replication.
  -            ok
  -    end;
  +    assert_is_master_node(),
  +    do_kill_all_children(Policy, Bucket, Node);
   kill_all_children(Policy, Bucket, Nodes) ->
  +    assert_is_master_node(),
  +
       try
           misc:parallel_map(
             fun (Node) ->
  -                  kill_all_children(Policy, Bucket, Node)
  +                  do_kill_all_children(Policy, Bucket, Node)
             end, Nodes, ?RPC_TIMEOUT)
       catch
           exit:timeout ->
  
positive.code:    when Change :: {Type, SrcNode :: node(), DstNode :: node(), vbucket_id()},
          Type :: add_replica | kill_replica.
  apply_changes(Policy, Bucket, ChangeTuples) ->
      ?log_info("Applying changes:~n~p~n", [ChangeTuples]),
  
      %% In 1.8.1 we clearly know what nodes are affected by change
  
negative.code: %% node.
  -spec add_replica(module(), bucket_name(), node(), node(), vbucket_id()) -> ok.
  add_replica(Policy, Bucket, SrcNode, DstNode, VBucket) ->
      assert_is_master_node(),
  
      VBuckets =
          case get_replicator(Policy, Bucket, SrcNode, DstNode) of
              undefined ->
  