public void remoteOverRedundancyBucket(BucketRollup bucket, Member targetMember) {
    Move bestMove = new Move(null, targetMember, bucket);
    Map<String, Long> colocatedRegionSizes = getColocatedRegionSizes(bucket);

    if (!operator.removeBucket(targetMember.getMemberId(), bucket.getId(),
        colocatedRegionSizes)) {
      attemptedBucketRemoves.add(bestMove);
    } else {
      overRedundancyBuckets.remove(bucket);
      bucket.removeMember(targetMember);
      // put the bucket back into the list if we still need to satisfy redundancy for
      // this bucket
      if (bucket.getOnlineRedundancy() > requiredRedundancy) {
        overRedundancyBuckets.add(bucket);
      }
      resetAverages();
    }
  }
Trigger the creation of a redundant bucket, potentially asynchronously.

This method will find the best node to create a redundant bucket and invoke the bucket operator
to create a bucket on that node. Because the bucket operator is asynchronous, the bucket may
not be created immediately, but the model will be updated regardless. Invoke
{@link #waitForOperations()} to wait for those operations to actually complete

@param bucket the bucket for which a redundant copy should be made
@param targetMember the member on which a redundant copy of a bucket should be made
geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/rebalance/model/PartitionedRegionLoadModel.java