You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by bu...@apache.org on 2016/09/29 06:57:19 UTC

[34/50] [abbrv] hbase git commit: HBASE-16696 After HBASE-16604 - does not release blocks in case of scanner exception (Ram)

HBASE-16696 After HBASE-16604 - does not release blocks in case of scanner
exception (Ram)


Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/47e12fb3
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/47e12fb3
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/47e12fb3

Branch: refs/heads/hbase-14439
Commit: 47e12fb3a08d5d81ebcfae1abeb1bea909f76e49
Parents: de7316b
Author: Ramkrishna <ra...@intel.com>
Authored: Wed Sep 28 15:39:08 2016 +0530
Committer: Ramkrishna <ra...@intel.com>
Committed: Wed Sep 28 15:39:08 2016 +0530

----------------------------------------------------------------------
 .../hbase/regionserver/RSRpcServices.java       | 25 +++++++++++++-------
 .../client/TestBlockEvictionFromClient.java     | 21 ++++------------
 2 files changed, 20 insertions(+), 26 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/47e12fb3/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RSRpcServices.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RSRpcServices.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RSRpcServices.java
index 541680c..c01ea39 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RSRpcServices.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RSRpcServices.java
@@ -2694,6 +2694,7 @@ public class RSRpcServices implements HBaseRPCErrorHandler,
             rsh.incNextCallSeq();
           }
         }
+        boolean scannerClosed = false;
         try {
           // Remove lease while its being processed in server; protects against case
           // where processing of request takes > lease expiration time.
@@ -2907,6 +2908,8 @@ public class RSRpcServices implements HBaseRPCErrorHandler,
           // fail this RPC and close the scanner while opening up another one from the start of
           // row that the client has last seen.
           closeScanner(region, scanner, scannerName, context);
+          // scanner is closed here
+          scannerClosed = true;
 
           // We closed the scanner already. Instead of throwing the IOException, and client
           // retrying with the same scannerId only to get USE on the next RPC, we directly throw
@@ -2920,15 +2923,19 @@ public class RSRpcServices implements HBaseRPCErrorHandler,
                 + " scanner state for clients older than 1.3.", e);
           }
         } finally {
-          if (context != null) {
-            context.setCallBack(rsh.shippedCallback);
-          }
-          // Adding resets expiration time on lease.
-          if (scanners.containsKey(scannerName)) {
-            ttl = this.scannerLeaseTimeoutPeriod;
-            // When context != null, adding back the lease will be done in callback set above.
-            if (context == null) {
-              if (lease != null) regionServer.leases.addLease(lease);
+          // If the scanner is not closed, set the shipped callback
+          if (!scannerClosed) {
+            if (context != null) {
+              context.setCallBack(rsh.shippedCallback);
+            }
+
+            // Adding resets expiration time on lease.
+            if (scanners.containsKey(scannerName)) {
+              ttl = this.scannerLeaseTimeoutPeriod;
+              // When context != null, adding back the lease will be done in callback set above.
+              if (context == null) {
+                if (lease != null) regionServer.leases.addLease(lease);
+              }
             }
           }
         }

http://git-wip-us.apache.org/repos/asf/hbase/blob/47e12fb3/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.java
index ba75d6e..3b19bcc 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.java
@@ -18,6 +18,7 @@
 package org.apache.hadoop.hbase.client;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
 import java.io.IOException;
@@ -1185,23 +1186,9 @@ public class TestBlockEvictionFromClient {
           usedBlocksFound = true;
         }
       }
-      assertTrue(usedBlocksFound);
-      // Sleep till the scan lease would expire? Can we reduce this value?
-      Thread.sleep(5100);
-      iterator = cache.iterator();
-      refCount = 0;
-      while (iterator.hasNext()) {
-        CachedBlock next = iterator.next();
-        BlockCacheKey cacheKey = new BlockCacheKey(next.getFilename(), next.getOffset());
-        if (cache instanceof BucketCache) {
-          refCount = ((BucketCache) cache).getRefCount(cacheKey);
-        } else if (cache instanceof CombinedBlockCache) {
-          refCount = ((CombinedBlockCache) cache).getRefCount(cacheKey);
-        } else {
-          continue;
-        }
-        assertEquals(0, refCount);
-      }
+      assertFalse(usedBlocksFound);
+      // you should always see 0 ref count. since after HBASE-16604 we always recreate the scanner
+      assertEquals(0, refCount);
     } finally {
       if (table != null) {
         table.close();