You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by la...@apache.org on 2012/07/02 10:24:52 UTC
svn commit: r1356105 - in /hbase/branches/0.94/src:
main/java/org/apache/hadoop/hbase/KeyValue.java
test/java/org/apache/hadoop/hbase/TestKeyValue.java
Author: larsgeorge
Date: Mon Jul 2 08:24:51 2012
New Revision: 1356105
URL: http://svn.apache.org/viewvc?rev=1356105&view=rev
Log:
HBASE-6265 Calling getTimestamp() on a KV in cp.prePut() causes KV not to be flushed
Modified:
hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/KeyValue.java
hbase/branches/0.94/src/test/java/org/apache/hadoop/hbase/TestKeyValue.java
Modified: hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/KeyValue.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/KeyValue.java?rev=1356105&r1=1356104&r2=1356105&view=diff
==============================================================================
--- hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/KeyValue.java (original)
+++ hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/KeyValue.java Mon Jul 2 08:24:51 2012
@@ -963,6 +963,8 @@ public class KeyValue implements Writabl
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 = -1L;
return true;
}
return false;
Modified: hbase/branches/0.94/src/test/java/org/apache/hadoop/hbase/TestKeyValue.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.94/src/test/java/org/apache/hadoop/hbase/TestKeyValue.java?rev=1356105&r1=1356104&r2=1356105&view=diff
==============================================================================
--- hbase/branches/0.94/src/test/java/org/apache/hadoop/hbase/TestKeyValue.java (original)
+++ hbase/branches/0.94/src/test/java/org/apache/hadoop/hbase/TestKeyValue.java Mon Jul 2 08:24:51 2012
@@ -488,6 +488,21 @@ public class TestKeyValue extends TestCa
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"), HConstants.LATEST_TIMESTAMP,
+ Bytes.toBytes("myValue"));
+ long time1 = kv.getTimestamp();
+ kv.updateLatestStamp(Bytes.toBytes(12345L));
+ long time2 = kv.getTimestamp();
+ assertEquals(HConstants.LATEST_TIMESTAMP, time1);
+ assertEquals(12345L, time2);
+ }
+
@org.junit.Rule
public org.apache.hadoop.hbase.ResourceCheckerJUnitRule cu =
new org.apache.hadoop.hbase.ResourceCheckerJUnitRule();