private void printLocations(Result r) {
    if (r == null) {
      LOG.info("FAILED FOR null Result");
      return;
    }
    LOG.info("FAILED FOR " + resultToString(r) + " Stale " + r.isStale());
    if (r.getRow() == null) {
      return;
    }
    try (RegionLocator locator = connection.getRegionLocator(tableName)) {
      List<HRegionLocation> locs = locator.getRegionLocations(r.getRow());
      for (HRegionLocation h : locs) {
        LOG.info("LOCATION " + h);
      }
    } catch (IOException e) {
      LOG.warn("Couldn't get locations for row " + Bytes.toString(r.getRow()));
    }
  }
Verifies the result from get or scan using the dataGenerator (that was presumably also used to
generate said result).
@param verifyValues               verify that values in the result make sense for row/cf/column
                                  combination
@param verifyCfAndColumnIntegrity verify that cf/column set in the result is complete. Note
                                  that to use this multiPut should be used, or verification has
                                  to happen after writes, otherwise there can be races.
@return true if the values of row result makes sense for row/cf/column combination and true if
        the cf/column set in the result is complete, false otherwise.
hbase-diagnostics/src/main/java/org/apache/hadoop/hbase/util/MultiThreadedAction.java