public static int getHashKey(PartitionedRegion pr, Operation operation, Object key, Object value,
      Object callbackArgument) {
    // avoid creating EntryOperation if there is no resolver
    try {
      return getHashKey(null, pr, operation, key, value, callbackArgument);
    } catch (IllegalStateException e) { // bug #43651 - check for shutdown before throwing this
      pr.getCache().getCancelCriterion().checkCancelInProgress(e);
      pr.checkClosedOrDestroyed(); // GEODE-2282 - check for region destroyed before throwing it
      throw e;
    }
  }
Runs hashCode() on given key/routing object producing a long value and then finds absolute
value of the modulus with bucketSize. For better key distribution, possibly use MD5 or SHA or
any unique ID generator for the hash function.

@param pr the partitioned region on which to operate
@param operation operation
@param key the key on which to determine the hash key
@param callbackArgument the callbackArgument is passed to <code>PartitionResolver</code> to get
       Routing object
@return the bucket id the key/routing object hashes to
geode-core/src/main/java/org/apache/geode/internal/cache/PartitionedRegionHelper.java