[
https://issues.apache.org/jira/browse/DRILL-6063?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16309999#comment-16309999
]
ASF GitHub Bot commented on DRILL-6063:
---------------------------------------
Github user parthchandra commented on a diff in the pull request:
https://github.com/apache/drill/pull/1079#discussion_r159487621
--- Diff:
exec/java-exec/src/main/java/org/apache/drill/exec/rpc/user/UserClient.java ---
@@ -344,7 +344,18 @@ private boolean
clientNeedsAuthExceptPlain(DrillProperties props) {
mechanismName = factory.getSimpleName();
logger.trace("Will try to authenticate to server using {} mechanism
with encryption context {}",
mechanismName, connection.getEncryptionCtxtString());
+
+ // Update the thread context class loader to current class loader
+ // See DRILL-6063 for detailed description
+ final ClassLoader oldThreadCtxtCL =
Thread.currentThread().getContextClassLoader();
+ final ClassLoader newThreadCtxtCL = this.getClass().getClassLoader();
+ Thread.currentThread().setContextClassLoader(newThreadCtxtCL);
+
--- End diff --
Is this the only place we need to update? For eaxmple, with SASL the
authentication mechanism plugin would have to be in the class path when the
authentication method is dtermined. But you have already restored the thread
context. (Or does the oldThreadContextCL have the SASL jars in the classpath?)
> Set correct ThreadContext ClassLoader before using Hadoop Configuration class
> in DrillClient
> --------------------------------------------------------------------------------------------
>
> Key: DRILL-6063
> URL: https://issues.apache.org/jira/browse/DRILL-6063
> Project: Apache Drill
> Issue Type: Improvement
> Components: Client - Java
> Affects Versions: 1.11.0
> Reporter: Sorabh Hamirwasia
> Assignee: Sorabh Hamirwasia
> Fix For: 1.13.0
>
>
> Drill Client uses Hadoop Configuration class in security mechanism factories.
> Configuration class internally uses ThreadContext class loader to get the
> default resources for configurations. When Drill JDBC driver is used with 3rd
> party tool like Squirrel then it creates a class loader with all Drill Driver
> related dependencies. This class loader is used to instantiate an object of
> Driver class in a separate thread. But the thread context class loader has
> dependencies related to Squirrel only. As a result of this when Hadoop
> Configuration class tries to load the resources with default values it
> doesn't find them in class path.
> If we specify hadoop dependencies in Squirrel's classpath instead of Driver
> dependencies class path then it will work since Thread Context class loader
> will have Hadoop libraries loaded too and will find the resources. But this
> is not good as it is tying up one Squirrel instance with one version of
> Hadoop which might not be true in all the cases like here when same Squirrel
> instance can be used to load multiple versions of Drill Driver having
> different hadoop version dependencies.
> To deal with this issue a simple fix is to set the Thread Context class
> loader to be same as Drill Driver dependencies class loader before accessing
> Hadoop Configuration class in Drill Client and later restore it back.
> Some pointers in code:
> * Place where JDBC driver is loaded as part of separate thread in Squirrel:
> [OpenConnectionCommand.java|https://sourceforge.net/p/squirrel-sql/git/ci/master/tree/sql12/core/src/net/sourceforge/squirrel_sql/client/mainframe/action/OpenConnectionCommand.java#l167]
> * Place where JDBC driver class is instantiated in Squirrel using Driver
> dependencies class loader:
> [SQLDriverManager.java|https://sourceforge.net/p/squirrel-sql/git/ci/master/tree/sql12/core/src/net/sourceforge/squirrel_sql/fw/sql/SQLDriverManager.java#l74]
> * Place where Hadoop Configuration class looks into Thread Context Class
> Loader:
> [Configuration.java|https://github.com/apache/hadoop-common/blob/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/conf/Configuration.java#L615]
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)