diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java index 26a7a4f..5003f90 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java @@ -3254,9 +3254,12 @@ public class HRegionServer implements ClientProtos.ClientService.BlockingInterfa ttl = this.scannerLeaseTimeoutPeriod; } if (request.hasRenew() && request.getRenew()) { + rsh = scanners.get(scannerName); lease = leases.removeLease(scannerName); - if (lease != null && scanners.containsKey(scannerName)) { + if (lease != null && rsh != null) { leases.addLease(lease); + // Increment the nextCallSeq value which is the next expected from client. + rsh.incNextCallSeq(); } return builder.build(); } diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestLeaseRenewal.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestLeaseRenewal.java index c4885c9..309ae5d 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestLeaseRenewal.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestLeaseRenewal.java @@ -26,9 +26,12 @@ import java.util.Arrays; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.apache.hadoop.hbase.CompatibilityFactory; import org.apache.hadoop.hbase.HBaseTestingUtility; import org.apache.hadoop.hbase.HConstants; import org.apache.hadoop.hbase.HTableDescriptor; +import org.apache.hadoop.hbase.ipc.MetricsHBaseServerSource; +import org.apache.hadoop.hbase.test.MetricsAssertHelper; import org.apache.hadoop.hbase.testclassification.LargeTests; import org.apache.hadoop.hbase.util.Bytes; import org.junit.After; @@ -40,6 +43,8 @@ import org.junit.experimental.categories.Category; @Category(LargeTests.class) public class TestLeaseRenewal { + public MetricsAssertHelper HELPER = CompatibilityFactory.getInstance(MetricsAssertHelper.class); + final Log LOG = LogFactory.getLog(getClass()); private final static HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility(); private static byte[] FAMILY = Bytes.toBytes("testFamily"); @@ -118,5 +123,8 @@ public class TestLeaseRenewal { assertFalse(((AbstractClientScanner)rs).renewLease()); rs.close(); table.close(); + MetricsHBaseServerSource serverSource = TEST_UTIL.getMiniHBaseCluster().getRegionServer(0) + .getRpcServer().getMetrics().getMetricsSource(); + HELPER.assertCounter("exceptions.OutOfOrderScannerNextException", 0, serverSource); } }