Author: tedyu
Date: Mon Aug 15 23:57:45 2011
New Revision: 1158067

URL: http://svn.apache.org/viewvc?rev=1158067&view=rev
Log:
HBASE-4197 TestCoprocessorInterface demonstrates CustomScanner usage

Modified:
    
hbase/trunk/src/test/java/org/apache/hadoop/hbase/coprocessor/TestCoprocessorInterface.java

Modified: 
hbase/trunk/src/test/java/org/apache/hadoop/hbase/coprocessor/TestCoprocessorInterface.java
URL: 
http://svn.apache.org/viewvc/hbase/trunk/src/test/java/org/apache/hadoop/hbase/coprocessor/TestCoprocessorInterface.java?rev=1158067&r1=1158066&r2=1158067&view=diff
==============================================================================
--- 
hbase/trunk/src/test/java/org/apache/hadoop/hbase/coprocessor/TestCoprocessorInterface.java
 (original)
+++ 
hbase/trunk/src/test/java/org/apache/hadoop/hbase/coprocessor/TestCoprocessorInterface.java
 Mon Aug 15 23:57:45 2011
@@ -21,6 +21,8 @@
 package org.apache.hadoop.hbase.coprocessor;
 
 import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -30,8 +32,11 @@ import org.apache.hadoop.hbase.HBaseTest
 import org.apache.hadoop.hbase.HColumnDescriptor;
 import org.apache.hadoop.hbase.HRegionInfo;
 import org.apache.hadoop.hbase.HTableDescriptor;
+import org.apache.hadoop.hbase.KeyValue;
+import org.apache.hadoop.hbase.client.Scan;
 import org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost;
 import org.apache.hadoop.hbase.regionserver.HRegion;
+import org.apache.hadoop.hbase.regionserver.RegionScanner;
 import org.apache.hadoop.hbase.regionserver.SplitTransaction;
 import org.apache.hadoop.hbase.util.Bytes;
 import org.apache.hadoop.hbase.util.PairOfSameType;
@@ -46,6 +51,41 @@ public class TestCoprocessorInterface ex
   private static final HBaseTestingUtility TEST_UTIL =
     new HBaseTestingUtility();
 
+  private static class CustomScanner implements RegionScanner {
+
+    private RegionScanner delegate;
+    
+    public CustomScanner(RegionScanner delegate) {
+      this.delegate = delegate;
+    }
+    
+    @Override
+    public boolean next(List<KeyValue> results) throws IOException {
+      return delegate.next(results);
+    }
+
+    @Override
+    public boolean next(List<KeyValue> result, int limit) throws IOException {
+      return delegate.next(result, limit);
+    }
+
+    @Override
+    public void close() throws IOException {
+      delegate.close();
+    }
+
+    @Override
+    public HRegionInfo getRegionInfo() {
+      return delegate.getRegionInfo();
+    }
+
+    @Override
+    public boolean isFilterDone() {
+      return delegate.isFilterDone();
+    }
+    
+  }
+  
   public static class CoprocessorImpl extends BaseRegionObserver {
 
     private boolean startCalled;
@@ -112,6 +152,12 @@ public class TestCoprocessorInterface ex
       postSplitCalled = true;
     }
 
+    @Override
+    public RegionScanner postScannerOpen(final 
ObserverContext<RegionCoprocessorEnvironment> e,
+        final Scan scan, final RegionScanner s) throws IOException {
+      return new CustomScanner(s);
+    }
+
     boolean wasStarted() {
       return startCalled;
     }
@@ -160,6 +206,14 @@ public class TestCoprocessorInterface ex
     region.getLog().closeAndDelete();
     Coprocessor c = region.getCoprocessorHost().
       findCoprocessor(CoprocessorImpl.class.getName());
+
+    // HBASE-4197
+    Scan s = new Scan();
+    RegionScanner scanner = regions[0].getCoprocessorHost().postScannerOpen(s, 
regions[0].getScanner(s));
+    assertTrue(scanner instanceof CustomScanner);
+    // this would throw an exception before HBASE-4197
+    scanner.next(new ArrayList<KeyValue>());
+    
     assertTrue("Coprocessor not started", ((CoprocessorImpl)c).wasStarted());
     assertTrue("Coprocessor not stopped", ((CoprocessorImpl)c).wasStopped());
     assertTrue(((CoprocessorImpl)c).wasOpened());


Reply via email to