Index: hbase-server/src/test/java/org/apache/hadoop/hbase/TestKeyValue.java =================================================================== --- hbase-server/src/test/java/org/apache/hadoop/hbase/TestKeyValue.java (revision 1354350) +++ hbase-server/src/test/java/org/apache/hadoop/hbase/TestKeyValue.java (working copy) @@ -504,6 +504,20 @@ assertTrue(Bytes.equals(kv1.getRow(), kv2.getRow())); } + /** + * Tests that getTimestamp() does always return the proper timestamp, even after updating it. + * See HBASE-6265. + * + */ + public void testGetTimestamp() { + KeyValue kv = new KeyValue(Bytes.toBytes("myRow"), Bytes.toBytes("myCF"), + Bytes.toBytes("myQualifier"), 12345L, Bytes.toBytes("myValue")); + long time1 = kv.getTimestamp(); + kv.updateLatestStamp(Bytes.toBytes(54321L)); + long time2 = kv.getTimestamp(); + assertEquals(54321L, time2); + } + @org.junit.Rule public org.apache.hadoop.hbase.ResourceCheckerJUnitRule cu = new org.apache.hadoop.hbase.ResourceCheckerJUnitRule(); Index: hbase-common/src/main/java/org/apache/hadoop/hbase/KeyValue.java =================================================================== --- hbase-common/src/main/java/org/apache/hadoop/hbase/KeyValue.java (revision 1354350) +++ hbase-common/src/main/java/org/apache/hadoop/hbase/KeyValue.java (working copy) @@ -1165,6 +1165,8 @@ if (this.isLatestTimestamp()) { int tsOffset = getTimestampOffset(); System.arraycopy(now, 0, this.bytes, tsOffset, Bytes.SIZEOF_LONG); + // clear cache or else getTimestamp() possibly returns an old value + timestampCache = -1; return true; } return false;