private void verifyResultsAndUpdateMetricsOnAPerGetBasis(boolean verify, Get get, Result result,
      Table table, boolean isNullExpected) throws IOException {
      if (!result.isEmpty()) {
        if (verify) {
          numKeysVerified.incrementAndGet();
        }
      } else {
        HRegionLocation hloc;
        try (RegionLocator locator = connection.getRegionLocator(tableName)) {
          hloc = locator.getRegionLocation(get.getRow());
        }
        String rowKey = Bytes.toString(get.getRow());
        LOG.info("Key = " + rowKey + ", Region location: " + hloc);
        if (isNullExpected) {
          nullResult.incrementAndGet();
          LOG.debug("Null result obtained for the key =" + rowKey);
          return;
        }
      }
      boolean isOk = verifyResultAgainstDataGenerator(result, verify, false);
      long numErrorsAfterThis = 0;
      if (isOk) {
        long cols = 0;
        // Count the columns for reporting purposes.
        for (byte[] cf : result.getMap().keySet()) {
          cols += result.getFamilyMap(cf).size();
        }
        numCols.addAndGet(cols);
      } else {
        if (writer != null) {
          LOG.error("At the time of failure, writer wrote " + writer.numKeys.get() + " keys");
        }
        numErrorsAfterThis = numReadErrors.incrementAndGet();
      }

      if (numErrorsAfterThis > maxErrors) {
        LOG.error("Aborting readers -- found more than " + maxErrors + " errors");
        aborted = true;
      }
    }
Should only be used for the concurrent writer/reader workload. The maximum key we are allowed
to read, subject to the "key window" constraint.
hbase-diagnostics/src/main/java/org/apache/hadoop/hbase/util/MultiThreadedReader.java