HBASE-15759 RegionObserver.preStoreScannerOpen() doesn't have acces to current 
readpoint


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

Branch: refs/heads/hbase-12439
Commit: 532b914f08af31d34a9b4ede7e8f5a567a9b211e
Parents: c716a75
Author: tedyu <yuzhih...@gmail.com>
Authored: Thu May 5 15:20:37 2016 -0700
Committer: tedyu <yuzhih...@gmail.com>
Committed: Thu May 5 15:20:37 2016 -0700

----------------------------------------------------------------------
 .../hbase/coprocessor/BaseRegionObserver.java   |  7 +++++
 .../hbase/coprocessor/RegionObserver.java       | 32 ++++++++++++++++++++
 .../hadoop/hbase/regionserver/HStore.java       |  2 +-
 .../regionserver/RegionCoprocessorHost.java     |  4 +--
 .../TestRegionObserverScannerOpenHook.java      |  5 ++-
 .../hbase/util/TestCoprocessorScanPolicy.java   |  5 ++-
 6 files changed, 46 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/532b914f/hbase-server/src/main/java/org/apache/hadoop/hbase/coprocessor/BaseRegionObserver.java
----------------------------------------------------------------------
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/coprocessor/BaseRegionObserver.java
 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/coprocessor/BaseRegionObserver.java
index 67093f8..eaf9f43 100644
--- 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/coprocessor/BaseRegionObserver.java
+++ 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/coprocessor/BaseRegionObserver.java
@@ -401,6 +401,13 @@ public class BaseRegionObserver implements RegionObserver {
   }
 
   @Override
+  public KeyValueScanner preStoreScannerOpen(final 
ObserverContext<RegionCoprocessorEnvironment> c,
+      final Store store, final Scan scan, final NavigableSet<byte[]> 
targetCols,
+      final KeyValueScanner s, final long readPt) throws IOException {
+    return preStoreScannerOpen(c, store, scan, targetCols, s);
+  }
+
+  @Override
   public RegionScanner postScannerOpen(final 
ObserverContext<RegionCoprocessorEnvironment> e,
       final Scan scan, final RegionScanner s) throws IOException {
     return s;

http://git-wip-us.apache.org/repos/asf/hbase/blob/532b914f/hbase-server/src/main/java/org/apache/hadoop/hbase/coprocessor/RegionObserver.java
----------------------------------------------------------------------
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/coprocessor/RegionObserver.java
 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/coprocessor/RegionObserver.java
index cbad200..1d985df 100644
--- 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/coprocessor/RegionObserver.java
+++ 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/coprocessor/RegionObserver.java
@@ -1036,12 +1036,44 @@ public interface RegionObserver extends Coprocessor {
    * @param s the base scanner, if not {@code null}, from previous 
RegionObserver in the chain
    * @return a KeyValueScanner instance to use or {@code null} to use the 
default implementation
    * @throws IOException if an error occurred on the coprocessor
+   * @deprecated use {@link #preStoreScannerOpen(ObserverContext, Store, Scan, 
NavigableSet,
+   *   KeyValueScanner, long)} instead
    */
+  @Deprecated
   KeyValueScanner preStoreScannerOpen(final 
ObserverContext<RegionCoprocessorEnvironment> c,
       final Store store, final Scan scan, final NavigableSet<byte[]> 
targetCols,
       final KeyValueScanner s) throws IOException;
 
   /**
+   * Called before a store opens a new scanner.
+   * This hook is called when a "user" scanner is opened.
+   * <p>
+   * See {@link #preFlushScannerOpen(ObserverContext, Store, KeyValueScanner, 
InternalScanner)}
+   * and {@link #preCompactScannerOpen(ObserverContext,
+   *  Store, List, ScanType, long, InternalScanner)}
+   * to override scanners created for flushes or compactions, resp.
+   * <p>
+   * Call CoprocessorEnvironment#complete to skip any subsequent chained
+   * coprocessors.
+   * Calling {@link 
org.apache.hadoop.hbase.coprocessor.ObserverContext#bypass()} has no
+   * effect in this hook.
+   * <p>
+   * Note: Do not retain references to any Cells returned by scanner, beyond 
the life of this
+   * invocation. If need a Cell reference for later use, copy the cell and use 
that.
+   * @param c the environment provided by the region server
+   * @param store the store being scanned
+   * @param scan the Scan specification
+   * @param targetCols columns to be used in the scanner
+   * @param s the base scanner, if not {@code null}, from previous 
RegionObserver in the chain
+   * @param readPt the read point
+   * @return a KeyValueScanner instance to use or {@code null} to use the 
default implementation
+   * @throws IOException if an error occurred on the coprocessor
+   */
+  KeyValueScanner preStoreScannerOpen(final 
ObserverContext<RegionCoprocessorEnvironment> c,
+      final Store store, final Scan scan, final NavigableSet<byte[]> 
targetCols,
+      final KeyValueScanner s, final long readPt) throws IOException;
+
+  /**
    * Called after the client opens a new scanner.
    * <p>
    * Call CoprocessorEnvironment#complete to skip any subsequent chained

http://git-wip-us.apache.org/repos/asf/hbase/blob/532b914f/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HStore.java
----------------------------------------------------------------------
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HStore.java 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HStore.java
index c02627f..8dfa0e0 100644
--- 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HStore.java
+++ 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HStore.java
@@ -1868,7 +1868,7 @@ public class HStore implements Store {
     try {
       KeyValueScanner scanner = null;
       if (this.getCoprocessorHost() != null) {
-        scanner = this.getCoprocessorHost().preStoreScannerOpen(this, scan, 
targetCols);
+        scanner = this.getCoprocessorHost().preStoreScannerOpen(this, scan, 
targetCols, readPt);
       }
       scanner = createScanner(scan, targetCols, readPt, scanner);
       return scanner;

http://git-wip-us.apache.org/repos/asf/hbase/blob/532b914f/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.java
----------------------------------------------------------------------
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.java
 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.java
index 6614b3e..25e0200 100644
--- 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.java
+++ 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.java
@@ -1282,13 +1282,13 @@ public class RegionCoprocessorHost
    *    Store, Scan, NavigableSet, KeyValueScanner)}
    */
   public KeyValueScanner preStoreScannerOpen(final Store store, final Scan 
scan,
-      final NavigableSet<byte[]> targetCols) throws IOException {
+      final NavigableSet<byte[]> targetCols, final long readPt) throws 
IOException {
     return execOperationWithResult(null,
         coprocessors.isEmpty() ? null : new 
RegionOperationWithResult<KeyValueScanner>() {
       @Override
       public void call(RegionObserver oserver, 
ObserverContext<RegionCoprocessorEnvironment> ctx)
           throws IOException {
-        setResult(oserver.preStoreScannerOpen(ctx, store, scan, targetCols, 
getResult()));
+        setResult(oserver.preStoreScannerOpen(ctx, store, scan, targetCols, 
getResult(), readPt));
       }
     });
   }

http://git-wip-us.apache.org/repos/asf/hbase/blob/532b914f/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/TestRegionObserverScannerOpenHook.java
----------------------------------------------------------------------
diff --git 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/TestRegionObserverScannerOpenHook.java
 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/TestRegionObserverScannerOpenHook.java
index a8983ef..02bb0d3 100644
--- 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/TestRegionObserverScannerOpenHook.java
+++ 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/coprocessor/TestRegionObserverScannerOpenHook.java
@@ -105,11 +105,10 @@ public class TestRegionObserverScannerOpenHook {
   public static class NoDataFromScan extends BaseRegionObserver {
     @Override
     public KeyValueScanner 
preStoreScannerOpen(ObserverContext<RegionCoprocessorEnvironment> c,
-        Store store, Scan scan, NavigableSet<byte[]> targetCols, 
KeyValueScanner s)
+        Store store, Scan scan, NavigableSet<byte[]> targetCols, 
KeyValueScanner s, long readPt)
         throws IOException {
       scan.setFilter(new NoDataFilter());
-      return new StoreScanner(store, store.getScanInfo(), scan, targetCols,
-        
((HStore)store).getHRegion().getReadPoint(IsolationLevel.READ_COMMITTED));
+      return new StoreScanner(store, store.getScanInfo(), scan, targetCols, 
readPt);
     }
   }
 

http://git-wip-us.apache.org/repos/asf/hbase/blob/532b914f/hbase-server/src/test/java/org/apache/hadoop/hbase/util/TestCoprocessorScanPolicy.java
----------------------------------------------------------------------
diff --git 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/util/TestCoprocessorScanPolicy.java
 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/util/TestCoprocessorScanPolicy.java
index b4eb798..58aa56a 100644
--- 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/util/TestCoprocessorScanPolicy.java
+++ 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/util/TestCoprocessorScanPolicy.java
@@ -285,7 +285,7 @@ public class TestCoprocessorScanPolicy {
     @Override
     public KeyValueScanner preStoreScannerOpen(
         final ObserverContext<RegionCoprocessorEnvironment> c, Store store, 
final Scan scan,
-        final NavigableSet<byte[]> targetCols, KeyValueScanner s) throws 
IOException {
+        final NavigableSet<byte[]> targetCols, KeyValueScanner s, long readPt) 
throws IOException {
       TableName tn = store.getTableName();
       if (!tn.isSystemTable()) {
         Long newTtl = ttls.get(store.getTableName());
@@ -297,8 +297,7 @@ public class TestCoprocessorScanPolicy {
             newVersions == null ? family.getMaxVersions() : newVersions,
             newTtl == null ? oldSI.getTtl() : newTtl, 
family.getKeepDeletedCells(),
             oldSI.getTimeToPurgeDeletes(), oldSI.getComparator());
-        return new StoreScanner(store, scanInfo, scan, targetCols,
-            ((HStore) 
store).getHRegion().getReadPoint(IsolationLevel.READ_COMMITTED));
+        return new StoreScanner(store, scanInfo, scan, targetCols, readPt);
       } else {
         return s;
       }

Reply via email to