You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@twill.apache.org by ch...@apache.org on 2020/01/15 22:54:55 UTC
[twill] 02/02: (TWILL-271) Add custom ClassLoader dependencies
This is an automated email from the ASF dual-hosted git repository.
chtyim pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/twill.git
commit 1acf1b4eddc2687ddf416ac26df852f6e65b931d
Author: Terence Yim <te...@google.com>
AuthorDate: Wed Jan 15 11:31:21 2020 -0800
(TWILL-271) Add custom ClassLoader dependencies
Signed-off-by: Terence Yim <te...@google.com>
---
.../org/apache/twill/yarn/YarnTwillPreparer.java | 24 ++++++++++++++--------
.../apache/twill/yarn/LogLevelChangeTestRun.java | 2 +-
2 files changed, 16 insertions(+), 10 deletions(-)
diff --git a/twill-yarn/src/main/java/org/apache/twill/yarn/YarnTwillPreparer.java b/twill-yarn/src/main/java/org/apache/twill/yarn/YarnTwillPreparer.java
index 1ea2ab3..c69b009 100644
--- a/twill-yarn/src/main/java/org/apache/twill/yarn/YarnTwillPreparer.java
+++ b/twill-yarn/src/main/java/org/apache/twill/yarn/YarnTwillPreparer.java
@@ -113,6 +113,7 @@ import java.util.concurrent.Callable;
import java.util.concurrent.TimeUnit;
import java.util.jar.JarEntry;
import java.util.jar.JarOutputStream;
+import java.util.stream.Collectors;
import javax.annotation.Nullable;
/**
@@ -121,12 +122,6 @@ import javax.annotation.Nullable;
final class YarnTwillPreparer implements TwillPreparer {
private static final Logger LOG = LoggerFactory.getLogger(YarnTwillPreparer.class);
- private static final Function<Class<?>, String> CLASS_TO_NAME = new Function<Class<?>, String>() {
- @Override
- public String apply(Class<?> cls) {
- return cls.getName();
- }
- };
private final Configuration config;
private final TwillSpecification twillSpec;
@@ -575,13 +570,24 @@ final class YarnTwillPreparer implements TwillPreparer {
// Add the TwillRunnableEventHandler class
if (twillSpec.getEventHandler() != null) {
- classes.add(getClassLoader().loadClass(twillSpec.getEventHandler().getClassName()));
+ classes.add(classLoader.loadClass(twillSpec.getEventHandler().getClassName()));
+ }
+
+ // Optionally add the custom classloader class
+ if (classLoaderClassName != null) {
+ try {
+ classes.add(classLoader.loadClass(classLoaderClassName));
+ } catch (ClassNotFoundException e) {
+ // Don't throw if the classloader class is not found, as it can be available
+ // in the target cluster with appropriate classpath setting
+ LOG.debug("Cannot load custom classloader class '{}' when preparing for application launch",
+ classLoaderClassName);
+ }
}
// The location name is computed from the MD5 of all the classes names
// The localized name is always APPLICATION_JAR
- List<String> classList = Lists.newArrayList(Iterables.transform(classes, CLASS_TO_NAME));
- Collections.sort(classList);
+ List<String> classList = classes.stream().map(Class::getName).sorted().collect(Collectors.toList());
Hasher hasher = Hashing.md5().newHasher();
for (String name : classList) {
hasher.putString(name);
diff --git a/twill-yarn/src/test/java/org/apache/twill/yarn/LogLevelChangeTestRun.java b/twill-yarn/src/test/java/org/apache/twill/yarn/LogLevelChangeTestRun.java
index a1d8ae6..43787f0 100644
--- a/twill-yarn/src/test/java/org/apache/twill/yarn/LogLevelChangeTestRun.java
+++ b/twill-yarn/src/test/java/org/apache/twill/yarn/LogLevelChangeTestRun.java
@@ -277,7 +277,7 @@ public class LogLevelChangeTestRun extends BaseYarnTest {
if (matchCount == expectedInstances) {
return;
}
- TimeUnit.MILLISECONDS.sleep(100);
+ TimeUnit.SECONDS.sleep(1);
}
Assert.fail("Timeout waiting for expected log levels");