diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterCoprocessorHost.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterCoprocessorHost.java index 6c6b272..16b8852 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterCoprocessorHost.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterCoprocessorHost.java @@ -22,6 +22,7 @@ package org.apache.hadoop.hbase.master; import java.io.IOException; import java.util.List; +import org.apache.commons.lang.ClassUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.hadoop.conf.Configuration; @@ -91,7 +92,8 @@ public class MasterCoprocessorHost public MasterEnvironment createEnvironment(final Class implClass, final Coprocessor instance, final int priority, final int seq, final Configuration conf) { - for (Class c : implClass.getInterfaces()) { + for (Object itf : ClassUtils.getAllInterfaces(implClass)) { + Class c = (Class) itf; if (CoprocessorService.class.isAssignableFrom(c)) { masterServices.registerService(((CoprocessorService)instance).getService()); } 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 13b8317..a7d0627 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 @@ -38,6 +38,7 @@ import com.google.protobuf.Service; import org.apache.commons.collections.map.AbstractReferenceMap; import org.apache.commons.collections.map.ReferenceMap; +import org.apache.commons.lang.ClassUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.commons.math.stat.descriptive.DescriptiveStatistics; @@ -370,7 +371,8 @@ public class RegionCoprocessorHost // uses a different way to be registered and executed. // It uses a visitor pattern to invoke registered Endpoint // method. - for (Class c : implClass.getInterfaces()) { + for (Object itf : ClassUtils.getAllInterfaces(implClass)) { + Class c = (Class) itf; if (CoprocessorService.class.isAssignableFrom(c)) { region.registerService( ((CoprocessorService)instance).getService() ); } diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionServerCoprocessorHost.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionServerCoprocessorHost.java index ab8e948..d96b2ab 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionServerCoprocessorHost.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionServerCoprocessorHost.java @@ -22,6 +22,7 @@ import java.io.IOException; import java.util.Comparator; import java.util.List; +import org.apache.commons.lang.ClassUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.hadoop.hbase.classification.InterfaceAudience; @@ -281,9 +282,11 @@ public class RegionServerCoprocessorHost extends final Configuration conf, final RegionServerServices services) { super(impl, priority, seq, conf); this.regionServerServices = services; - for (Class c : implClass.getInterfaces()) { + for (Object itf : ClassUtils.getAllInterfaces(implClass)) { + Class c = (Class) itf; if (SingletonCoprocessorService.class.isAssignableFrom(c)) { - this.regionServerServices.registerService(((SingletonCoprocessorService) impl).getService()); + this.regionServerServices.registerService( + ((SingletonCoprocessorService) impl).getService()); break; } } diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestWithDisabledAuthorization.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestWithDisabledAuthorization.java index 8fd3f67..7178571 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestWithDisabledAuthorization.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestWithDisabledAuthorization.java @@ -129,6 +129,11 @@ public class TestWithDisabledAuthorization extends SecureTestUtil { private static User USER_NONE; // user with only partial read-write perms (on family:q1 only) private static User USER_QUAL; + + public static class MyAccessController extends AccessController { + public MyAccessController() { + } + } @BeforeClass public static void setupBeforeClass() throws Exception { @@ -149,13 +154,13 @@ public class TestWithDisabledAuthorization extends SecureTestUtil { TEST_UTIL.startMiniCluster(); MasterCoprocessorHost cpHost = TEST_UTIL.getMiniHBaseCluster().getMaster().getMasterCoprocessorHost(); - cpHost.load(AccessController.class, Coprocessor.PRIORITY_HIGHEST, conf); - ACCESS_CONTROLLER = (AccessController) cpHost.findCoprocessor(AccessController.class.getName()); - CP_ENV = cpHost.createEnvironment(AccessController.class, ACCESS_CONTROLLER, + cpHost.load(MyAccessController.class, Coprocessor.PRIORITY_HIGHEST, conf); + ACCESS_CONTROLLER = (AccessController) cpHost.findCoprocessor(MyAccessController.class.getName()); + CP_ENV = cpHost.createEnvironment(MyAccessController.class, ACCESS_CONTROLLER, Coprocessor.PRIORITY_HIGHEST, 1, conf); RegionServerCoprocessorHost rsHost = TEST_UTIL.getMiniHBaseCluster().getRegionServer(0) .getRegionServerCoprocessorHost(); - RSCP_ENV = rsHost.createEnvironment(AccessController.class, ACCESS_CONTROLLER, + RSCP_ENV = rsHost.createEnvironment(MyAccessController.class, ACCESS_CONTROLLER, Coprocessor.PRIORITY_HIGHEST, 1, conf); // Wait for the ACL table to become available @@ -191,7 +196,7 @@ public class TestWithDisabledAuthorization extends SecureTestUtil { Region region = TEST_UTIL.getHBaseCluster().getRegions(TEST_TABLE.getTableName()).get(0); RegionCoprocessorHost rcpHost = region.getCoprocessorHost(); - RCP_ENV = rcpHost.createEnvironment(AccessController.class, ACCESS_CONTROLLER, + RCP_ENV = rcpHost.createEnvironment(MyAccessController.class, ACCESS_CONTROLLER, Coprocessor.PRIORITY_HIGHEST, 1, TEST_UTIL.getConfiguration()); // Set up initial grants