You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by se...@apache.org on 2014/04/03 22:44:42 UTC

svn commit: r1584388 - in /hbase/branches/0.98: hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.java hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSide.java src/main/docbkx/book.xml

Author: sershe
Date: Thu Apr  3 20:44:42 2014
New Revision: 1584388

URL: http://svn.apache.org/r1584388
Log:
HBASE-10118 Major compact keeps deletes with future timestamps (Liu Shaohui)

Modified:
    hbase/branches/0.98/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.java
    hbase/branches/0.98/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSide.java
    hbase/branches/0.98/src/main/docbkx/book.xml

Modified: hbase/branches/0.98/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.98/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.java?rev=1584388&r1=1584387&r2=1584388&view=diff
==============================================================================
--- hbase/branches/0.98/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.java (original)
+++ hbase/branches/0.98/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.java Thu Apr  3 20:44:42 2014
@@ -336,9 +336,12 @@ public class ScanQueryMatcher {
         }
         // Can't early out now, because DelFam come before any other keys
       }
-      if (retainDeletesInOutput
-          || (!isUserScan && (EnvironmentEdgeManager.currentTimeMillis() - timestamp) <= timeToPurgeDeletes)
-          || kv.getMvccVersion() > maxReadPointToTrackVersions) {
+     
+      if ((!isUserScan)
+          && timeToPurgeDeletes > 0
+          && (EnvironmentEdgeManager.currentTimeMillis() - timestamp) <= timeToPurgeDeletes) {
+        return MatchCode.INCLUDE;
+      } else if (retainDeletesInOutput || kv.getMvccVersion() > maxReadPointToTrackVersions) {
         // always include or it is not time yet to check whether it is OK
         // to purge deltes or not
         if (!isUserScan) {

Modified: hbase/branches/0.98/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSide.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.98/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSide.java?rev=1584388&r1=1584387&r2=1584388&view=diff
==============================================================================
--- hbase/branches/0.98/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSide.java (original)
+++ hbase/branches/0.98/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSide.java Thu Apr  3 20:44:42 2014
@@ -62,6 +62,7 @@ import org.apache.hadoop.hbase.LargeTest
 import org.apache.hadoop.hbase.MiniHBaseCluster;
 import org.apache.hadoop.hbase.ServerName;
 import org.apache.hadoop.hbase.TableName;
+import org.apache.hadoop.hbase.Waiter;
 import org.apache.hadoop.hbase.client.metrics.ScanMetrics;
 import org.apache.hadoop.hbase.coprocessor.CoprocessorHost;
 import org.apache.hadoop.hbase.coprocessor.MultiRowMutationEndpoint;
@@ -83,6 +84,7 @@ import org.apache.hadoop.hbase.ipc.Copro
 import org.apache.hadoop.hbase.ipc.RpcClient;
 import org.apache.hadoop.hbase.ipc.RpcServer;
 import org.apache.hadoop.hbase.protobuf.ProtobufUtil;
+import org.apache.hadoop.hbase.protobuf.generated.AdminProtos;
 import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto;
 import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutationProto.MutationType;
 import org.apache.hadoop.hbase.protobuf.generated.MultiRowMutationProtos.MutateRowsRequest;
@@ -226,6 +228,65 @@ public class TestFromClientSide {
      h.close();
    }
 
+    /**
+    * Basic client side validation of HBASE-10118
+    */
+   @Test
+   public void testPurgeFutureDeletes() throws Exception {
+     final byte[] TABLENAME = Bytes.toBytes("testPurgeFutureDeletes");
+     final byte[] ROW = Bytes.toBytes("row");
+     final byte[] FAMILY = Bytes.toBytes("family");
+     final byte[] COLUMN = Bytes.toBytes("column");
+     final byte[] VALUE = Bytes.toBytes("value");
+
+     HTable table = TEST_UTIL.createTable(TABLENAME, FAMILY);
+
+     // future timestamp
+     long ts = System.currentTimeMillis() * 2;
+     Put put = new Put(ROW, ts);
+     put.add(FAMILY, COLUMN, VALUE);
+     table.put(put);
+
+     Get get = new Get(ROW);
+     Result result = table.get(get);
+     assertArrayEquals(VALUE, result.getValue(FAMILY, COLUMN));
+
+     Delete del = new Delete(ROW);
+     del.deleteColumn(FAMILY, COLUMN, ts);
+     table.delete(del);
+
+     get = new Get(ROW);
+     result = table.get(get);
+     assertNull(result.getValue(FAMILY, COLUMN));
+
+     // major compaction, purged future deletes 
+     TEST_UTIL.getHBaseAdmin().flush(TABLENAME);
+     TEST_UTIL.getHBaseAdmin().majorCompact(TABLENAME);
+
+     // waiting for the major compaction to complete
+     TEST_UTIL.waitFor(6000, new Waiter.Predicate<IOException>() {
+       @Override
+       public boolean evaluate() throws IOException {
+         try {
+           return TEST_UTIL.getHBaseAdmin().getCompactionState(TABLENAME) ==
+               AdminProtos.GetRegionInfoResponse.CompactionState.NONE;
+         } catch (InterruptedException e) {
+           throw new IOException(e);
+         }
+       }
+     });
+
+     put = new Put(ROW, ts);
+     put.add(FAMILY, COLUMN, VALUE);
+     table.put(put);
+
+     get = new Get(ROW);
+     result = table.get(get);
+     assertArrayEquals(VALUE, result.getValue(FAMILY, COLUMN));
+     
+     table.close();
+   }
+
    @Test
    public void testSharedZooKeeper() throws Exception {
      Configuration newConfig = new Configuration(TEST_UTIL.getConfiguration());

Modified: hbase/branches/0.98/src/main/docbkx/book.xml
URL: http://svn.apache.org/viewvc/hbase/branches/0.98/src/main/docbkx/book.xml?rev=1584388&r1=1584387&r2=1584388&view=diff
==============================================================================
Binary files - no diff available.