public static MoveBucketResponse send(InternalDistributedMember recipient,
      PartitionedRegion region, int bucketId, InternalDistributedMember source) {

    Assert.assertTrue(recipient != null, "MoveBucketMessage NULL recipient");

    MoveBucketResponse response = new MoveBucketResponse(region.getSystem(), recipient, region);
    MoveBucketMessage msg =
        new MoveBucketMessage(recipient, region.getPRId(), response, bucketId, source);
    msg.setTransactionDistributed(region.getCache().getTxManager().isDistributed());

    Set<InternalDistributedMember> failures = region.getDistributionManager().putOutgoing(msg);
    if (failures != null && failures.size() > 0) {
      // throw new ForceReattemptException("Failed sending <" + msg + ">");
      return null;
    }
    region.getPrStats().incPartitionMessagesSent();
    return response;
  }
Sends a message to move the bucket from <code>source</code> member to the
<code>recipient</code> member.

@param recipient the member to move the bucket to
@param region the PartitionedRegion of the bucket
@param bucketId the bucket to move
@param source the member to move the bucket from
@return the processor used to wait for the response
geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/MoveBucketMessage.java