boolean needsRebalancing() {
      // test cluster level status
      long transferSize = cache.getTotalTransferSize();
      if (transferSize <= sizeMinimum) {
        return false;
      }

      Map<PartitionedRegion, InternalPRInfo> details = cache.getRegionMemberDetails();
      long totalSize = cache.getTotalDataSize(details);

      if (totalSize > 0) {
        int transferPercent = (int) ((100.0 * transferSize) / totalSize);
        return transferPercent >= sizeThreshold;
      }

      // TODO test member level skew

      return false;
    }
By default auto-balancer will avoid rebalancing, because a user can always trigger rebalance
manually. So in case of error or inconsistent data, return false. Return true if
<OL>
<LI>total transfer size is above threshold percent of total data size at cluster level
<LI>If some smaller capacity nodes are heavily loaded while bigger capacity nodes are
balanced. In such a scenario transfer size based trigger may not cause rebalance.
geode-rebalancer/src/main/java/org/apache/geode/cache/util/AutoBalancer.java