You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hbase.apache.org by "Ted Yu (JIRA)" <ji...@apache.org> on 2015/07/27 19:01:04 UTC

[jira] [Created] (HBASE-14157) Interfaces implemented by subclasses should be checked when registering CoprocessorService

Ted Yu created HBASE-14157:
------------------------------

             Summary: Interfaces implemented by subclasses should be checked when registering CoprocessorService
                 Key: HBASE-14157
                 URL: https://issues.apache.org/jira/browse/HBASE-14157
             Project: HBase
          Issue Type: Bug
            Reporter: Alok Lal
            Assignee: Ted Yu


Alok reported seeing the following exception when subclass of class which implements CoprocessorService is used for hbase.coprocessor.region.classes :
{code}
hbase(main):015:0> grant 'mktg1', 'RWC', 'iemployee'

ERROR: org.apache.hadoop.hbase.exceptions.UnknownProtocolException: No registered coprocessor service found for name AccessControlService in region hbase:acl,,1437137157604.2daf735ea38da95e9ba249db6b63b79c.
        at org.apache.hadoop.hbase.regionserver.HRegion.execService(HRegion.java:7367)
        at org.apache.hadoop.hbase.regionserver.RSRpcServices.execServiceOnRegion(RSRpcServices.java:1873)
        at org.apache.hadoop.hbase.regionserver.RSRpcServices.execService(RSRpcServices.java:1855)
        at org.apache.hadoop.hbase.protobuf.generated.ClientProtos$ClientService$2.callBlockingMethod(ClientProtos.java:32209)
        at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:2112)
        at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:101)
        at org.apache.hadoop.hbase.ipc.RpcExecutor.consumerLoop(RpcExecutor.java:130)
        at org.apache.hadoop.hbase.ipc.RpcExecutor$1.run(RpcExecutor.java:107)
{code}
The root cause is in the following code of RegionCoprocessorHost:
{code}
    for (Class<?> c : implClass.getInterfaces()) {
      if (CoprocessorService.class.isAssignableFrom(c)) {
        region.registerService( ((CoprocessorService)instance).getService() );
      }
    }
{code}
We currently only check the interfaces directly implemented by the underlying class.
What should be done is to check all the interfaces implemented by class itself and its superclasses.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)