@SuppressWarnings("FutureReturnValueIgnored")
    private void logFailRowAndIncreaseCounter(Context context, Counters counter, Result row,
      Result replicatedRow) {
      byte[] rowKey = getRow(row, replicatedRow);
      if (reCompareTries == 0) {
        context.getCounter(counter).increment(1);
        context.getCounter(Counters.BADROWS).increment(1);
        LOG.error("{}, rowkey={}{}{}", counter, delimiter, Bytes.toStringBinary(rowKey), delimiter);
        return;
      }

      VerifyReplicationRecompareRunnable runnable = new VerifyReplicationRecompareRunnable(context,
        row, replicatedRow, counter, delimiter, tableScan, sourceTable, replicatedTable,
        reCompareTries, sleepMsBeforeReCompare, reCompareBackoffExponent, verbose);

      if (reCompareExecutor == null) {
        runnable.run();
        return;
      }

      reCompareExecutor.submit(runnable);
    }
Map method that compares every scanned row with the equivalent from a distant cluster.
@param row     The current table row key.
@param value   The columns.
@param context The current context.
@throws IOException When something is broken with the data.
hbase-mapreduce/src/main/java/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.java