You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by jd...@apache.org on 2009/08/27 02:57:39 UTC
svn commit: r808238 - in /hadoop/hbase/trunk: CHANGES.txt
src/java/org/apache/hadoop/hbase/KeyValue.java
src/java/org/apache/hadoop/hbase/regionserver/HRegion.java
src/test/org/apache/hadoop/hbase/regionserver/TestHRegion.java
Author: jdcryans
Date: Thu Aug 27 00:57:38 2009
New Revision: 808238
URL: http://svn.apache.org/viewvc?rev=808238&view=rev
Log:
HBASE-1798 [Regression] Unable to delete a row in the future
Modified:
hadoop/hbase/trunk/CHANGES.txt
hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/KeyValue.java
hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/HRegion.java
hadoop/hbase/trunk/src/test/org/apache/hadoop/hbase/regionserver/TestHRegion.java
Modified: hadoop/hbase/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/CHANGES.txt?rev=808238&r1=808237&r2=808238&view=diff
==============================================================================
--- hadoop/hbase/trunk/CHANGES.txt (original)
+++ hadoop/hbase/trunk/CHANGES.txt Thu Aug 27 00:57:38 2009
@@ -9,6 +9,7 @@
HBASE-1792 [Regression] Cannot save timestamp in the future
HBASE-1793 [Regression] HTable.get/getRow with a ts is broken
HBASE-1698 Review documentation for o.a.h.h.mapreduce
+ HBASE-1798 [Regression] Unable to delete a row in the future
IMPROVEMENTS
HBASE-1760 Cleanup TODOs in HTable
Modified: hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/KeyValue.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/KeyValue.java?rev=808238&r1=808237&r2=808238&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/KeyValue.java (original)
+++ hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/KeyValue.java Thu Aug 27 00:57:38 2009
@@ -819,9 +819,8 @@
}
public boolean updateLatestStamp(final byte [] now) {
- int tsOffset = getTimestampOffset();
- if(Bytes.compareTo(now, 0, Bytes.SIZEOF_LONG,
- this.bytes, tsOffset, Bytes.SIZEOF_LONG) < 0) {
+ if(this.isLatestTimestamp()) {
+ int tsOffset = getTimestampOffset();
System.arraycopy(now, 0, this.bytes, tsOffset, Bytes.SIZEOF_LONG);
return true;
}
Modified: hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/HRegion.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/HRegion.java?rev=808238&r1=808237&r2=808238&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/HRegion.java (original)
+++ hadoop/hbase/trunk/src/java/org/apache/hadoop/hbase/regionserver/HRegion.java Thu Aug 27 00:57:38 2009
@@ -1108,7 +1108,8 @@
//Check to see if this is a deleteRow insert
if(delete.getFamilyMap().isEmpty()){
for(byte [] family : regionInfo.getTableDesc().getFamiliesKeys()){
- delete.deleteFamily(family);
+ // Don't eat the timestamp
+ delete.deleteFamily(family, delete.getTimeStamp());
}
} else {
for(byte [] family : delete.getFamilyMap().keySet()) {
Modified: hadoop/hbase/trunk/src/test/org/apache/hadoop/hbase/regionserver/TestHRegion.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/test/org/apache/hadoop/hbase/regionserver/TestHRegion.java?rev=808238&r1=808237&r2=808238&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/test/org/apache/hadoop/hbase/regionserver/TestHRegion.java (original)
+++ hadoop/hbase/trunk/src/test/org/apache/hadoop/hbase/regionserver/TestHRegion.java Thu Aug 27 00:57:38 2009
@@ -292,6 +292,41 @@
result = region.get(get, null);
assertEquals(1, result.size());
}
+
+ public void testDeleteRowWithFutureTs() throws IOException {
+ byte [] tableName = Bytes.toBytes("testtable");
+ byte [] fam = Bytes.toBytes("info");
+ byte [][] families = {fam};
+ String method = this.getName();
+ initHRegion(tableName, method, families);
+
+ byte [] row = Bytes.toBytes("table_name");
+ // column names
+ byte [] serverinfo = Bytes.toBytes("serverinfo");
+
+ // add data in the far future
+ Put put = new Put(row);
+ put.add(fam, serverinfo, HConstants.LATEST_TIMESTAMP-5,Bytes.toBytes("value"));
+ region.put(put);
+
+ // now delete something in the present
+ Delete delete = new Delete(row);
+ region.delete(delete, null, true);
+
+ // make sure we still see our data
+ Get get = new Get(row).addColumn(fam, serverinfo);
+ Result result = region.get(get, null);
+ assertEquals(1, result.size());
+
+ // delete the future row
+ delete = new Delete(row,HConstants.LATEST_TIMESTAMP-3,null);
+ region.delete(delete, null, true);
+
+ // make sure it is gone
+ get = new Get(row).addColumn(fam, serverinfo);
+ result = region.get(get, null);
+ assertEquals(0, result.size());
+ }
public void testScanner_DeleteOneFamilyNotAnother() throws IOException {
byte [] tableName = Bytes.toBytes("test_table");