private boolean removeBucketForColocatedChildren(int bucketId, boolean forceRemovePrimary) {
    boolean removedChildBucket = true;

    // getColocatedChildRegions returns only the child PRs directly colocated
    // with thisPR...
    List<PartitionedRegion> colocatedChildPRs =
        ColocationHelper.getColocatedChildRegions(partitionedRegion);
    if (colocatedChildPRs != null) {
      for (PartitionedRegion pr : colocatedChildPRs) {
        removedChildBucket =
            pr.getDataStore().removeBucket(bucketId, forceRemovePrimary) && removedChildBucket;
      }
    }

    return removedChildBucket;
  }
This calls removeBucket on every colocated child that is directly colocated to this bucket's
PR. Those each in turn do the same to their child buckets and so on before returning.

@param bucketId the bucket to remove
@param forceRemovePrimary true if we should remove the bucket, even if it is primary.

@return true if bucket was removed from all children
geode-core/src/main/java/org/apache/geode/internal/cache/PartitionedRegionDataStore.java