hbase-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Gary Helmling (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (HBASE-9941) The context ClassLoader isn't set while calling into a coprocessor
Date Fri, 03 Jan 2014 19:51:52 GMT

    [ 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)

Mime
View raw message