[ https://issues.apache.org/jira/browse/TWILL-217?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15881207#comment-15881207 ]
Martin Serrano edited comment on TWILL-217 at 2/23/17 8:31 PM: --------------------------------------------------------------- Seems then that we will need some way to get the list of all org.apache.twill.api.* classes off of the classpath in order to do this dependency walk: * We could do this ourselves with some custom code. * Guava 14 introduced such a utility: [ClassPath|https://github.com/google/guava/wiki/ReflectionExplained#classpath]. What is the history around using guava 13 versus later libraries? * Could sort of cheat, and do something like what {{YarnTwillRunnerService}} does but restrict for the api package: {code:language=java} // Find all the classpaths for Twill classes. It is used for class filtering when building application jar // in the YarnTwillPreparer Dependencies.findClassDependencies(getClass().getClassLoader(), new ClassAcceptor() { @Override public boolean accept(String className, URL classUrl, URL classPathUrl) { if (!className.startsWith("org.apache.twill.")) { return false; } twillClassPaths.add(classPathUrl); return true; } }, getClass().getName()); {code} Thoughts? was (Author: mserrano): Seems then that we will need some way to get the list of all org.apache.twill.api.* classes off of the classpath in order to do this dependency walk: * We could do this ourselves with some custom code. * Guava 14 introduced such a utility: [ClassPath|https://github.com/google/guava/wiki/ReflectionExplained#classpath]. What is the history around using guava 13 versus later libraries? * Could sort of cheat, and do something like what {{YarnTwillRunnerService}} does but just for the api package: {code:language=java} // Find all the classpaths for Twill classes. It is used for class filtering when building application jar // in the YarnTwillPreparer Dependencies.findClassDependencies(getClass().getClassLoader(), new ClassAcceptor() { @Override public boolean accept(String className, URL classUrl, URL classPathUrl) { if (!className.startsWith("org.apache.twill.")) { return false; } twillClassPaths.add(classPathUrl); return true; } }, getClass().getName()); {code} Thoughts? > AppMaster launcher should include eventHandler dependencies and nothing else > from application > --------------------------------------------------------------------------------------------- > > Key: TWILL-217 > URL: https://issues.apache.org/jira/browse/TWILL-217 > Project: Apache Twill > Issue Type: Improvement > Components: yarn > Affects Versions: 0.9.0 > Reporter: Martin Serrano > Assignee: Martin Serrano > > Currently the launcher for the appmaster includes the application.jar > libraries. This is to support user code that adds an EventHandler. The > application may have many dependencies and including them in the appmaster > classpath can lead to otherwise inaddressable incompatibilities. > In my case, something in my application's large dependency graph was > interfering with the Kafka server operation. I was not able to determine > what it was but tweaking the appmaster loader to not include my application > jars fixed the issue. > Instead the bundler that creates the twill.jar should include the > EventHandler extension (if any) as an explicit dependency. In this way, only > the jars needed to support the event handler will be on the twill classpath. -- This message was sent by Atlassian JIRA (v6.3.15#6346)