[
https://issues.apache.org/jira/browse/HBASE-9941?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13861848#comment-13861848
]
Gary Helmling commented on HBASE-9941:
--------------------------------------
Looks good to me.
A couple of questions on the patch:
In RegionCoprocessorHost.java:
{noformat}
@@ -284,11 +284,14 @@ public class RegionCoprocessorHost
for (RegionEnvironment env: coprocessors) {
if (env.getInstance() instanceof RegionObserver) {
ctx = ObserverContext.createAndPrepare(env, ctx);
- try {
+ Thread currentThread = Thread.currentThread();
+ ClassLoader cl = currentThread.getContextClassLoader();
+ try {
+ currentThread.setContextClassLoader(env.getClassLoader());
((RegionObserver) env.getInstance()).preOpen(ctx);
- } catch (Throwable e) {
- handleCoprocessorThrowable(env, e);
- }
+ } finally {
+ currentThread.setContextClassLoader(cl);
+ }
{noformat}
Shouldn't we keep the {{catch (Throwable e)}} here, unless that is redundant
for some reason?
Technically outside the scope of this issue, but in WALCoprocessorHost.java, I
see that preWALWrite() and postWALWrite() implementations are not doing the
handleCoprocessorThrowable() handling on unexpected Throwables. Can you think
of a reason WALCoprocessorHost should not do the same as others here?
> The context ClassLoader isn't set while calling into a coprocessor
> ------------------------------------------------------------------
>
> Key: HBASE-9941
> URL: https://issues.apache.org/jira/browse/HBASE-9941
> Project: HBase
> Issue Type: Sub-task
> Components: Coprocessors
> Affects Versions: 0.96.0
> Reporter: Benoit Sigoure
> Assignee: Andrew Purtell
> Fix For: 0.98.0
>
> Attachments: 9941.patch, 9941.patch, 9941.patch
>
>
> Whenever one of the methods of a coprocessor is invoked, the context
> {{ClassLoader}} isn't set to be the {{CoprocessorClassLoader}}. It's only
> set properly when calling the coprocessor's {{start}} method. This means
> that if the coprocessor code attempts to load classes using the context
> {{ClassLoader}}, it will fail to find the classes it's looking for.
--
This message was sent by Atlassian JIRA
(v6.1.5#6160)