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());