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 2015/05/03 02:47:49 UTC

hbase git commit: HBASE-13333 Renew Scanner Lease without advancing the RegionScanner.

Repository: hbase
Updated Branches:
  refs/heads/master 807eba3e1 -> a4799acd6


HBASE-13333 Renew Scanner Lease without advancing the RegionScanner.


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

Branch: refs/heads/master
Commit: a4799acd6bc6385d91709aa16fe3a1cbba9b6320
Parents: 807eba3
Author: Lars Hofhansl <la...@apache.org>
Authored: Sat May 2 17:48:32 2015 -0700
Committer: Lars Hofhansl <la...@apache.org>
Committed: Sat May 2 17:48:32 2015 -0700

----------------------------------------------------------------------
 .../hadoop/hbase/client/ClientScanner.java      | 17 +++++++++++++
 .../hadoop/hbase/client/ResultScanner.java      |  6 +++++
 .../hadoop/hbase/rest/client/RemoteHTable.java  |  5 ++++
 .../hbase/client/ClientSideRegionScanner.java   |  5 ++++
 .../hbase/client/TableSnapshotScanner.java      |  5 ++++
 .../hbase/client/TestFromClientSide3.java       | 26 ++++++++++++++++++++
 6 files changed, 64 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/a4799acd/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ClientScanner.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ClientScanner.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ClientScanner.java
index 01ce47f..48bb2f0 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ClientScanner.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ClientScanner.java
@@ -754,4 +754,21 @@ public class ClientScanner extends AbstractClientScanner {
       return closestFrontRow;
     }
   }
+
+  @Override
+  public boolean renewLease() {
+    if (callable != null) {
+      // do not return any rows, do not advance the scanner
+      callable.setCaching(0);
+      try {
+        this.caller.callWithoutRetries(callable, this.scannerTimeout);
+      } catch (Exception e) {
+        return false;
+      } finally {
+        callable.setCaching(this.caching);
+      }
+      return true;
+    }
+    return false;
+  }
 }

http://git-wip-us.apache.org/repos/asf/hbase/blob/a4799acd/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ResultScanner.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ResultScanner.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ResultScanner.java
index 381505c..6b7f1dd 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ResultScanner.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ResultScanner.java
@@ -52,4 +52,10 @@ public interface ResultScanner extends Closeable, Iterable<Result> {
    */
   @Override
   void close();
+
+  /**
+   * Allow the client to renew the scanner's lease on the server.
+   * @return true if the lease was successfully renewed, false otherwise.
+   */
+  boolean renewLease();
 }

http://git-wip-us.apache.org/repos/asf/hbase/blob/a4799acd/hbase-rest/src/main/java/org/apache/hadoop/hbase/rest/client/RemoteHTable.java
----------------------------------------------------------------------
diff --git a/hbase-rest/src/main/java/org/apache/hadoop/hbase/rest/client/RemoteHTable.java b/hbase-rest/src/main/java/org/apache/hadoop/hbase/rest/client/RemoteHTable.java
index 0300ea2..2d122df 100644
--- a/hbase-rest/src/main/java/org/apache/hadoop/hbase/rest/client/RemoteHTable.java
+++ b/hbase-rest/src/main/java/org/apache/hadoop/hbase/rest/client/RemoteHTable.java
@@ -643,6 +643,11 @@ public class RemoteHTable implements Table {
         LOG.warn(StringUtils.stringifyException(e));
       }
     }
+
+    @Override
+    public boolean renewLease() {
+      throw new RuntimeException("renewLease() not supported");
+    }
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/hbase/blob/a4799acd/hbase-server/src/main/java/org/apache/hadoop/hbase/client/ClientSideRegionScanner.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/client/ClientSideRegionScanner.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/client/ClientSideRegionScanner.java
index 9d7bcc0..1ec085f 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/client/ClientSideRegionScanner.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/client/ClientSideRegionScanner.java
@@ -109,4 +109,9 @@ public class ClientSideRegionScanner extends AbstractClientScanner {
       }
     }
   }
+
+  @Override
+  public boolean renewLease() {
+    throw new UnsupportedOperationException();
+  }
 }

http://git-wip-us.apache.org/repos/asf/hbase/blob/a4799acd/hbase-server/src/main/java/org/apache/hadoop/hbase/client/TableSnapshotScanner.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/client/TableSnapshotScanner.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/client/TableSnapshotScanner.java
index a371e3e..f817e70 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/client/TableSnapshotScanner.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/client/TableSnapshotScanner.java
@@ -201,4 +201,9 @@ public class TableSnapshotScanner extends AbstractClientScanner {
     }
   }
 
+  @Override
+  public boolean renewLease() {
+    throw new UnsupportedOperationException();
+  }
+
 }

http://git-wip-us.apache.org/repos/asf/hbase/blob/a4799acd/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSide3.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSide3.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSide3.java
index c69017b..52f4c89 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSide3.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestFromClientSide3.java
@@ -22,6 +22,7 @@ package org.apache.hadoop.hbase.client;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.fail;
 
 import java.util.ArrayList;
@@ -429,4 +430,29 @@ public class TestFromClientSide3 {
     assertTrue(Arrays.equals(res.getValue(FAMILY, COL_QUAL), VAL_BYTES));
     table.close();
   }
+
+  @Test
+  public void testLeaseRenewal() throws Exception {
+    HTable table = TEST_UTIL.createTable(
+      Bytes.toBytes("testLeaseRenewal"), FAMILY);
+    Put p = new Put(ROW_BYTES);
+    p.addColumn(FAMILY, COL_QUAL, VAL_BYTES);
+    table.put(p);
+    p = new Put(ANOTHERROW);
+    p.addColumn(FAMILY, COL_QUAL, VAL_BYTES);
+    table.put(p);
+    Scan s = new Scan();
+    s.setCaching(1);
+    ResultScanner rs = table.getScanner(s);
+    // make sure that calling renewLease does not impact the scan results
+    assertTrue(rs.renewLease());
+    assertTrue(Arrays.equals(rs.next().getRow(), ANOTHERROW));
+    assertTrue(rs.renewLease());
+    assertTrue(Arrays.equals(rs.next().getRow(), ROW_BYTES));
+    assertTrue(rs.renewLease());
+    assertNull(rs.next());
+    assertFalse(rs.renewLease());
+    rs.close();
+    table.close();
+  }
 }