[ 
https://issues.apache.org/jira/browse/HBASE-15686?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16445941#comment-16445941
 ] 

Rich Fecher commented on HBASE-15686:
-------------------------------------

RegionCoprocessorHost.testTableCoprocessorAttrs() doesn't appear to use the 
inclusion list.  Am I mistaken in assuming that it should be consistently 
applied here similar to how it is applied within CoprocessorHost?  By disabling 
table sanity checks, it seems possible to circumvent this check from HMaster, 
but HRegion will still test and fail if a coprocessor class is dependent on the 
inclusion list. Am I missing something?

It seems like a patch such as this would be applicable: 
https://github.com/rfecher/hbase/commit/671990fca0e01f0c916084977dc6ceb31583a821

 

 

> Add override mechanism for the exempt classes when dynamically loading table 
> coprocessor
> ----------------------------------------------------------------------------------------
>
>                 Key: HBASE-15686
>                 URL: https://issues.apache.org/jira/browse/HBASE-15686
>             Project: HBase
>          Issue Type: Improvement
>          Components: Coprocessors
>    Affects Versions: 1.0.1
>            Reporter: Sangjin Lee
>            Assignee: Ted Yu
>            Priority: Major
>             Fix For: 1.4.0, 0.98.20, 2.0.0
>
>         Attachments: 15686.v2.txt, 15686.v3.txt, 15686.v4.txt, 15686.v5.txt, 
> 15686.v6.txt, 15686.wip
>
>
> As part of Hadoop's Timeline Service v.2 (YARN-2928), we're adding a table 
> coprocessor (YARN-4062). However, we're finding that the coprocessor cannot 
> be loaded dynamically. A relevant snippet for the exception:
> {noformat}
> java.io.IOException: Class 
> org.apache.hadoop.yarn.server.timelineservice.storage.flow.FlowRunCoprocessor 
> cannot be loaded
>     at 
> org.apache.hadoop.hbase.master.HMaster.sanityCheckTableDescriptor(HMaster.java:1329)
>     at org.apache.hadoop.hbase.master.HMaster.createTable(HMaster.java:1269)
>     at 
> org.apache.hadoop.hbase.master.MasterRpcServices.createTable(MasterRpcServices.java:398)
>     at 
> org.apache.hadoop.hbase.protobuf.generated.MasterProtos$MasterService$2.callBlockingMethod(MasterProtos.java:42436)
>     at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:2031)
>     at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:107)
>     at 
> org.apache.hadoop.hbase.ipc.RpcExecutor.consumerLoop(RpcExecutor.java:130)
>     at org.apache.hadoop.hbase.ipc.RpcExecutor$1.run(RpcExecutor.java:107)
>     at java.lang.Thread.run(Thread.java:745)
> Caused by: java.io.IOException: Class 
> org.apache.hadoop.yarn.server.timelineservice.storage.flow.FlowRunCoprocessor 
> cannot be loaded
>     at 
> org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost.testTableCoprocessorAttrs(RegionCoprocessorHost.java:324)
>     at 
> org.apache.hadoop.hbase.master.HMaster.checkClassLoading(HMaster.java:1483)
>     at 
> org.apache.hadoop.hbase.master.HMaster.sanityCheckTableDescriptor(HMaster.java:1327)
>     ... 8 more
> Caused by: java.lang.ClassNotFoundException: 
> org.apache.hadoop.yarn.server.timelineservice.storage.flow.FlowRunCoprocessor
>     at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
>     at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
>     at java.security.AccessController.doPrivileged(Native Method)
>     at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
>     at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
>     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
>     at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
>     at 
> org.apache.hadoop.hbase.util.CoprocessorClassLoader.loadClass(CoprocessorClassLoader.java:275)
>     at 
> org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost.testTableCoprocessorAttrs(RegionCoprocessorHost.java:322)
>     ... 10 more
> {noformat}
> We tracked it down to the fact that {{CoprocessorClassLoader}} regarding all 
> hadoop classes as exempt from loading from the coprocessor jar. Since our 
> coprocessor sits in the coprocessor jar, and yet the loading of this class is 
> delegated to the parent which does not have this jar, the classloading fails.
> What would be nice is the ability to exclude certain classes from the exempt 
> classes so that they can be loaded via table coprocessor classloader. See 
> hadoop's {{ApplicationClassLoader}} for a similar feature.
> Is there any other way to load this coprocessor at the table scope?



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to