TD:
A correct shading of ASM should only affect Spark code unless someone is
relying on ASM 4.0 in unrelated project code, in which case they can add
org.ow2.asm:asm:4.x as a dependency.
Our short term solution has been to repackage other libraries with a 3.2
dependency or to exclude ASM when our use of a dependent library really
doesn't need it. As you probably know, the real problem arises in
ClassVisitor, which is an Interface in 3.x and before, but in 4.x it is
an abstract class that takes a version constant as its constructor. The
ASM folks of course had our best interests in mind when they did this,
attempting to deal with the Java-version dependent changes from one ASM
release to the next. Unfortunately, they didn't change the names or
locations of their classes and interfaces, which would have helped.
In our particular case, the only library from which we couldn't exclude
ASM was
org.glassfish.jersey.containers:jersey-container-servlet:jar:2.5.1. I
added a new module to our project, including some dummy source code,
because we needed the library to be self contained, made the servlet --
minus some unrelated transitive dependencies -- the only module
dependency, then used the Maven shade plugin to relocate
"org.objectweb.asm" to an arbitrary target. We added the new shaded
module as a new project dependency, plus the unrelated transitive
dependencies excluded above. This solved the problem. At least until
we added WADL to the project. Then we needed to deal with it on its own
terms.
As you can see, we left Spark alone in all its ASM 4.0 glory. Why?
Spark is more volatile than the other libraries. Also, the way in which
we needed to deploy Spark and other resources on our (Yarn) clusters
suggested that it would be easier to shade the other libraries. I
wanted to avoid having to install a locally patched Spark library into
our build, updating the cluster and individual developers whenever
there's a new patch. Individual developers such as me who are testing
the impact of patches can handle it, but the main build goes to Maven
Central via our corporate Artifactory mirror.
If suddenly we had a Spark 0.9.1 with a shaded ASM, it would have no
negative impact on us. Only a positive impact.
I just wish that all users of ASM would read FAQ entry 15!!!
Thanks
Kevin
On 03/24/2014 06:30 PM, Tathagata Das wrote:
Hello Kevin,
A fix for SPARK-782 would definitely simplify building against Spark.
However, its possible that a fix for this issue in 0.9.1 will break
the builds (that reference spark) of existing 0.9 users, either due to
a change in the ASM version, or for being incompatible with their
current workarounds for this issue. That is not a good idea for a
maintenance release, especially when 1.0 is not too far away.
Can you (and others) elaborate more on the current workarounds that
you have for this issue? Its best to understand all the implications
of this fix.
Note that in branch 0.9, it is not fixed, neither in SBT nor in Maven.
TD
On Mon, Mar 24, 2014 at 4:38 PM, Kevin Markey <kevin.mar...@oracle.com> wrote:
Is there any way that [SPARK-782] (Shade ASM) can be included? I see that
it is not currently backported to 0.9. But there is no single issue that
has caused us more grief as we integrate spark-core with other project
dependencies. There are way too many libraries out there in addition to
Spark 0.9 and before that are not well-behaved (ASM FAQ recommends shading),
including some Hive and Hadoop libraries and a number of servlet libraries.
We can't control those, but if Spark were well behaved in this regard, it
would help. Even for a maintenance release, and even if 1.0 is only 6 weeks
away!
(For those not following 782, according to Jira comments, the SBT build
shades it, but it is the Maven build that ends up in Maven Central.)
Thanks
Kevin Markey
On 03/19/2014 06:07 PM, Tathagata Das wrote:
Hello everyone,
Since the release of Spark 0.9, we have received a number of important bug
fixes and we would like to make a bug-fix release of Spark 0.9.1. We are
going to cut a release candidate soon and we would love it if people test
it out. We have backported several bug fixes into the 0.9 and updated JIRA
accordingly<https://spark-project.atlassian.net/browse/SPARK-1275?jql=project%20in%20(SPARK%2C%20BLINKDB%2C%20MLI%2C%20MLLIB%2C%20SHARK%2C%20STREAMING%2C%20GRAPH%2C%20TACHYON)%20AND%20fixVersion%20%3D%200.9.1%20AND%20status%20in%20(Resolved%2C%20Closed)>.
Please let me know if there are fixes that were not backported but you
would like to see them in 0.9.1.
Thanks!
TD