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:55:11 UTC

[1/2] hbase git commit: HBASE-13333 Renew Scanner Lease without advancing the RegionScanner.

Repository: hbase
Updated Branches:
  refs/heads/branch-1 e13ca3c61 -> 0e76cf5be
  refs/heads/branch-1.1 49ab39d40 -> 955a05485


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/0e76cf5b
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/0e76cf5b
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/0e76cf5b

Branch: refs/heads/branch-1
Commit: 0e76cf5be41485849c7330a0dec281cadad7d135
Parents: e13ca3c
Author: Lars Hofhansl <la...@apache.org>
Authored: Sat May 2 17:52:27 2015 -0700
Committer: Lars Hofhansl <la...@apache.org>
Committed: Sat May 2 17:52:27 2015 -0700

----------------------------------------------------------------------
 .../hbase/client/AbstractClientScanner.java     |  7 ++++++
 .../hadoop/hbase/client/ClientScanner.java      | 17 +++++++++++++
 .../hbase/client/ClientSideRegionScanner.java   |  5 ++++
 .../hbase/client/TableSnapshotScanner.java      |  5 ++++
 .../hbase/client/TestFromClientSide3.java       | 26 ++++++++++++++++++++
 5 files changed, 60 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/0e76cf5b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AbstractClientScanner.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AbstractClientScanner.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AbstractClientScanner.java
index dc325a3..440400a 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AbstractClientScanner.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AbstractClientScanner.java
@@ -124,4 +124,11 @@ public abstract class AbstractClientScanner implements ResultScanner {
       }
     };
   }
+  /**
+   * Allow the client to renew the scanner's lease on the server.
+   * @return true if the lease was successfully renewed, false otherwise.
+   */
+  // Note that this method should be on ResultScanner, but that is marked stable.
+  // Callers have to cast their instance of ResultScanner to AbstractClientScanner to use this.
+  public abstract boolean renewLease();
 }

http://git-wip-us.apache.org/repos/asf/hbase/blob/0e76cf5b/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 f7c80b1..3550e6c 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
@@ -752,4 +752,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/0e76cf5b/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/0e76cf5b/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 f44e845..c8e34e5 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/0e76cf5b/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 ec769b1..975103f 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;
@@ -428,4 +429,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.add(FAMILY, COL_QUAL, VAL_BYTES);
+    table.put(p);
+    p = new Put(ANOTHERROW);
+    p.add(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(((AbstractClientScanner)rs).renewLease());
+    assertTrue(Arrays.equals(rs.next().getRow(), ANOTHERROW));
+    assertTrue(((AbstractClientScanner)rs).renewLease());
+    assertTrue(Arrays.equals(rs.next().getRow(), ROW_BYTES));
+    assertTrue(((AbstractClientScanner)rs).renewLease());
+    assertNull(rs.next());
+    assertFalse(((AbstractClientScanner)rs).renewLease());
+    rs.close();
+    table.close();
+  }
 }


[2/2] hbase git commit: HBASE-13333 Renew Scanner Lease without advancing the RegionScanner.

Posted by la...@apache.org.
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/955a0548
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/955a0548
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/955a0548

Branch: refs/heads/branch-1.1
Commit: 955a054850f566745f62d6d72109a58207c38bb3
Parents: 49ab39d
Author: Lars Hofhansl <la...@apache.org>
Authored: Sat May 2 17:52:27 2015 -0700
Committer: Lars Hofhansl <la...@apache.org>
Committed: Sat May 2 17:52:58 2015 -0700

----------------------------------------------------------------------
 .../hbase/client/AbstractClientScanner.java     |  7 ++++++
 .../hadoop/hbase/client/ClientScanner.java      | 17 +++++++++++++
 .../hbase/client/ClientSideRegionScanner.java   |  5 ++++
 .../hbase/client/TableSnapshotScanner.java      |  5 ++++
 .../hbase/client/TestFromClientSide3.java       | 26 ++++++++++++++++++++
 5 files changed, 60 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/955a0548/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AbstractClientScanner.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AbstractClientScanner.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AbstractClientScanner.java
index dc325a3..440400a 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AbstractClientScanner.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/AbstractClientScanner.java
@@ -124,4 +124,11 @@ public abstract class AbstractClientScanner implements ResultScanner {
       }
     };
   }
+  /**
+   * Allow the client to renew the scanner's lease on the server.
+   * @return true if the lease was successfully renewed, false otherwise.
+   */
+  // Note that this method should be on ResultScanner, but that is marked stable.
+  // Callers have to cast their instance of ResultScanner to AbstractClientScanner to use this.
+  public abstract boolean renewLease();
 }

http://git-wip-us.apache.org/repos/asf/hbase/blob/955a0548/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 33afce4..947eb69 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
@@ -752,4 +752,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/955a0548/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/955a0548/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 f44e845..c8e34e5 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/955a0548/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 39379e4..e2bd999 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;
@@ -428,4 +429,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.add(FAMILY, COL_QUAL, VAL_BYTES);
+    table.put(p);
+    p = new Put(ANOTHERROW);
+    p.add(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(((AbstractClientScanner)rs).renewLease());
+    assertTrue(Arrays.equals(rs.next().getRow(), ANOTHERROW));
+    assertTrue(((AbstractClientScanner)rs).renewLease());
+    assertTrue(Arrays.equals(rs.next().getRow(), ROW_BYTES));
+    assertTrue(((AbstractClientScanner)rs).renewLease());
+    assertNull(rs.next());
+    assertFalse(((AbstractClientScanner)rs).renewLease());
+    rs.close();
+    table.close();
+  }
 }