@Test
  public void testVerifyReplicationThreadedRecompares() throws Exception {
    // Populate the tables with same data
    runBatchCopyTest();

    // ONLY_IN_PEER_TABLE_ROWS
    Put put = new Put(Bytes.toBytes(Integer.toString(NB_ROWS_IN_BATCH)));
    put.addColumn(noRepfamName, row, row);
    htable3.put(put);

    // CONTENT_DIFFERENT_ROWS
    put = new Put(Bytes.toBytes(Integer.toString(NB_ROWS_IN_BATCH - 1)));
    put.addColumn(noRepfamName, row, Bytes.toBytes("diff value"));
    htable3.put(put);

    // ONLY_IN_SOURCE_TABLE_ROWS
    put = new Put(Bytes.toBytes(Integer.toString(NB_ROWS_IN_BATCH + 1)));
    put.addColumn(noRepfamName, row, row);
    htable1.put(put);

    String[] args = new String[] { "--recompareThreads=10", "--recompareTries=3",
      "--recompareSleep=1", "--peerTableName=" + peerTableName.getNameAsString(),
      getClusterKey(UTIL2), tableName.getNameAsString() };
    Counters counters = runVerifyReplication(args, NB_ROWS_IN_BATCH - 1, 3);
    assertEquals(
      counters.findCounter(VerifyReplication.Verifier.Counters.FAILED_RECOMPARE).getValue(), 9);
    assertEquals(counters.findCounter(VerifyReplication.Verifier.Counters.RECOMPARES).getValue(),
      9);
    assertEquals(
      counters.findCounter(VerifyReplication.Verifier.Counters.ONLY_IN_PEER_TABLE_ROWS).getValue(),
      1);
    assertEquals(
      counters.findCounter(VerifyReplication.Verifier.Counters.CONTENT_DIFFERENT_ROWS).getValue(),
      1);
    assertEquals(counters.findCounter(VerifyReplication.Verifier.Counters.ONLY_IN_SOURCE_TABLE_ROWS)
      .getValue(), 1);
  }
Load a row into a table, make sure the data is really the same, delete the row, make sure the
delete marker is replicated, run verify replication with and without raw to check the results.
hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/replication/VerifyReplicationTestBase.java