@Override
            public void run() {
              final byte[] row = Bytes.toBytes("row-" + index);
              final byte[] value = Bytes.toBytes("v" + index);
              try {
                Put put = new Put(row);
                put.addColumn(FAMILY, QUALIFIER, value);
                ht.put(put);
                Get get = new Get(row);
                Result result = ht.get(get);
                byte[] returnedValue = result.getValue(FAMILY, QUALIFIER);
                if (Bytes.equals(value, returnedValue)) {
                  successCnt.getAndIncrement();
                } else {
                  LOG.error("Should be equal but not, original value: " + Bytes.toString(value)
                    + ", returned value: "
                    + (returnedValue == null ? "null" : Bytes.toString(returnedValue)));
                }
              } catch (Throwable e) {
                // do nothing
              }
            }
A test case for issue HBASE-17482 After combile seqid with mvcc readpoint, seqid/mvcc is
acquired and stamped onto cells in the append thread, a countdown latch is used to ensure that
happened before cells can be put into memstore. But the MVCCPreAssign patch(HBASE-16698) make
the seqid/mvcc acquirement in handler thread and stamping in append thread No countdown latch
to assure cells in memstore are stamped with seqid/mvcc. If cells without mvcc(A.K.A mvcc=0)
are put into memstore, then a scanner with a smaller readpoint can see these data, which
disobey the multi version concurrency control rules. This test case is to reproduce this
scenario.
hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSide3.java