This is an automated email from the ASF dual-hosted git repository.
abstractdog pushed a commit to branch branch-0.9
in repository https://gitbox.apache.org/repos/asf/tez.git
The following commit(s) were added to refs/heads/branch-0.9 by this push:
new cd468d4 TEZ-4228: TezClassLoader should be used in TezChild and for
Configuration objects
cd468d4 is described below
commit cd468d46e66e2494b26d3424b6e2682662272508
Author: Laszlo Bodor <[email protected]>
AuthorDate: Tue Sep 1 12:42:10 2020 +0200
TEZ-4228: TezClassLoader should be used in TezChild and for Configuration
objects
---
.../java/org/apache/tez/common/TezClassLoader.java | 18 ++++++++++++++++++
.../src/main/java/org/apache/tez/common/TezUtils.java | 1 +
.../java/org/apache/tez/runtime/task/TezChild.java | 4 +++-
3 files changed, 22 insertions(+), 1 deletion(-)
diff --git a/tez-api/src/main/java/org/apache/tez/common/TezClassLoader.java
b/tez-api/src/main/java/org/apache/tez/common/TezClassLoader.java
index 923d217..53c9e51 100644
--- a/tez-api/src/main/java/org/apache/tez/common/TezClassLoader.java
+++ b/tez-api/src/main/java/org/apache/tez/common/TezClassLoader.java
@@ -18,6 +18,10 @@ import java.net.URLClassLoader;
import java.security.AccessController;
import java.security.PrivilegedAction;
+import org.apache.hadoop.conf.Configuration;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
/**
* ClassLoader to allow addition of new paths to classpath in the runtime.
*
@@ -30,6 +34,7 @@ import java.security.PrivilegedAction;
*/
public class TezClassLoader extends URLClassLoader {
private static final TezClassLoader INSTANCE;
+ private static final Logger LOG =
LoggerFactory.getLogger(TezClassLoader.class);
static {
INSTANCE = AccessController.doPrivileged(new
PrivilegedAction<TezClassLoader>() {
@@ -41,6 +46,11 @@ public class TezClassLoader extends URLClassLoader {
private TezClassLoader() {
super(new URL[] {}, TezClassLoader.class.getClassLoader());
+
+ LOG.info(
+ "Created TezClassLoader with parent classloader: {}, thread: {},
system classloader: {}",
+ TezClassLoader.class.getClassLoader(), Thread.currentThread().getId(),
+ ClassLoader.getSystemClassLoader());
}
public void addURL(URL url) {
@@ -52,6 +62,14 @@ public class TezClassLoader extends URLClassLoader {
}
public static void setupTezClassLoader() {
+ LOG.debug(
+ "Setting up TezClassLoader: thread: {}, current thread classloader: {}
system classloader: {}",
+ Thread.currentThread().getId(),
Thread.currentThread().getContextClassLoader(),
+ ClassLoader.getSystemClassLoader());
Thread.currentThread().setContextClassLoader(INSTANCE);
}
+
+ public static void setupForConfiguration(Configuration configuration) {
+ configuration.setClassLoader(INSTANCE);
+ }
}
diff --git a/tez-api/src/main/java/org/apache/tez/common/TezUtils.java
b/tez-api/src/main/java/org/apache/tez/common/TezUtils.java
index cf7cdf3..d205b8f 100644
--- a/tez-api/src/main/java/org/apache/tez/common/TezUtils.java
+++ b/tez-api/src/main/java/org/apache/tez/common/TezUtils.java
@@ -120,6 +120,7 @@ public class TezUtils {
DAGProtos.ConfigurationProto confProto =
DAGProtos.ConfigurationProto.parseFrom(in);
Configuration conf = new Configuration(false);
readConfFromPB(confProto, conf);
+ TezClassLoader.setupForConfiguration(conf);
return conf;
}
}
diff --git
a/tez-runtime-internals/src/main/java/org/apache/tez/runtime/task/TezChild.java
b/tez-runtime-internals/src/main/java/org/apache/tez/runtime/task/TezChild.java
index 0693317..4bba139 100644
---
a/tez-runtime-internals/src/main/java/org/apache/tez/runtime/task/TezChild.java
+++
b/tez-runtime-internals/src/main/java/org/apache/tez/runtime/task/TezChild.java
@@ -77,6 +77,8 @@ import org.slf4j.LoggerFactory;
import com.google.common.base.Function;
import org.apache.tez.common.Preconditions;
+import org.apache.tez.common.TezClassLoader;
+
import com.google.common.collect.HashMultimap;
import com.google.common.collect.Maps;
import com.google.common.collect.Multimap;
@@ -477,7 +479,7 @@ public class TezChild {
}
public static void main(String[] args) throws IOException,
InterruptedException, TezException {
-
+ TezClassLoader.setupTezClassLoader();
final Configuration defaultConf = new Configuration();
Thread.setDefaultUncaughtExceptionHandler(new
YarnUncaughtExceptionHandler());