public Object lockRedundancyLock(InternalDistributedMember moveSource, int bucketId,
      boolean replaceOffineData) {
    // TODO prperist - Make this thing easier to find!
    final PartitionedRegion.BucketLock bl = partitionedRegion.getRegionAdvisor()
        .getBucketAdvisor(bucketId).getProxyBucketRegion().getBucketLock();
    bl.lock();
    boolean succeeded = false;
    try {
      ProxyBucketRegion buk = partitionedRegion.getRegionAdvisor().getProxyBucketArray()[bucketId];
      if (!buk.checkBucketRedundancyBeforeGrab(moveSource, replaceOffineData)) {
        if (logger.isDebugEnabled()) {
          logger.debug("Redundancy already satisfied. current owners:{}",
              partitionedRegion.getRegionAdvisor().getBucketOwners(bucketId));
        }
        throw new RedundancyAlreadyMetException();
      }
      succeeded = true;
    } finally {
      if (!succeeded) {
        bl.unlock();
      }
    }

    return bl;
  }
Attempts to map a bucket id to this node. Creates real storage for the bucket by adding a new
Region to bucket2Map. Bucket creation is done under the d-lock on b2n region.

@param possiblyFreeBucketId the identity of the bucket + @param mustBeNew boolean enforcing
       that the bucket must not already exist
@param sender the member requesting the bucket
@param moveSource Where we are moving the bucket from, if this is a move.
@param forceCreation avoid any checks (with in reason) which might prevent bucket creation
@param isRebalance true if bucket creation is directed by rebalancing
@return true if successful
geode-core/src/main/java/org/apache/geode/internal/cache/PartitionedRegionDataStore.java