private void determineOverRedundancyInZones(
      BucketRollup bucketRollup) {
    Set<String> redundancyZonesFound = new HashSet<>();

    // for each member that is hosting the bucket
    for (Member member : bucketRollup.getMembersHosting()) {

      // get the redundancy zone of the member
      String redundancyZone = getRedundancyZone(member.getDistributedMember());
      if (redundancyZone != null) {
        // if the redundancy zone is already in the list
        if (redundancyZonesFound.contains(redundancyZone)) {
          // add the bucket to the over redundancy list because we have more than one member
          // with this bucket in the same zone. something we don't prefer with multiple zones
          overRedundancyBuckets.add(bucketRollup);
          if (bucketRollup.getOnlineRedundancy() - 1 < bucketRollup.getRedundancy()) {
            lowRedundancyBuckets.add(bucketRollup);
          }
        } else {
          // otherwise add the redundancy zone to the list of redundancy zones
          redundancyZonesFound.add(redundancyZone);
        }
      }
    }
  }
Determine if the passed in bucket is on more than one member in a zone and mark it as
overredundant. If by marking a bucket over redundant, that would make the redundancy
insufficient, add the bucket to lowRedundancy as well so a member in a different zone
can host it.

@param bucketRollup the BucketRollup that we are checking
geode-core/src/main/java/org/apache/geode/internal/cache/partitioned/rebalance/model/PartitionedRegionLoadModel.java