[ 
https://issues.apache.org/jira/browse/STORM-169?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13970105#comment-13970105
 ] 

Robert Joseph Evans commented on STORM-169:
-------------------------------------------

It is not about if they are embedded or not, it is about the order of the 
classpath.  Storm's dependencies are not embedded in an uber jar.  The user's 
jar is an uber jar.  Storm's classpath always has prescience over the user 
classpath.  So in any case where there could be a conflict storm's version 
wins.  This helps ensure that the storm framework works as expected, but does 
make it difficult for end users, especially for jars that are not needed by the 
worker.  The plan to handle this long term is two fold.  First to split the 
worker/client and its dependencies off from the rest of storm-core.  This would 
then let things like ring and hiccup that are only needed by ui and logviewer 
from interfering with end user code.  After that we would start to look at 
shading more of the libraries that are dependencies of storm, so that end user 
code can pick their own versions.

> Storm depends on outdated versions of hiccup and ring
> -----------------------------------------------------
>
>                 Key: STORM-169
>                 URL: https://issues.apache.org/jira/browse/STORM-169
>             Project: Apache Storm (Incubating)
>          Issue Type: Wish
>            Reporter: James Xu
>            Priority: Minor
>
> https://github.com/nathanmarz/storm/issues/707
> Storm core depends on a very old versions of
> hiccup 0.3.6 => 1.0.4
> ring-* 0.3.11 => 1.2.0
> Especially the hiccup version conflicts with modern libraries like liberator 
> (see also weavejester/hiccup#86
> IllegalStateException escape-html already refers to: 
> #'hiccup.core/escape-html in namespace: hiccup.page
> ----------
> revans2: I agree that storm depends on old versions of libraries that I would 
> love to see updated, but simply updating the versions can cause a lot of pain 
> too. Having worked through this on Hadoop the only real solution is to get to 
> true dependency isolation. There are just too many libraries that are not 
> backwards and forwards compatible in very subtle ways, even for minor 
> releases. If you upgrade one dependency to fix a specific incompatibility it 
> will break someone else with a new incompatibility.
> I am not saying that we should not do this. People should be willing to pay 
> off tech debt and upgrade, but until we can isolate a user's dependencies 
> from storm's dependencies we need to consider major dependency upgrades as 
> incompatible changes.
> ----------
> jocrau: Yes, updating versions can cause a lot of pain. But deferring every 
> update to the time when the user's dependency is isolated might also cause a 
> lot of pain and slow down the adoption of Storm in some domains (like RESTful 
> services). I would love to see a more differentiated approach. Hiccup for 
> example is only used in the Storm UI; a place where I expect little impact.
> ----------
> revans2: I totally agree. I just wanted to be sure that the storm version 
> number was bumped when we did this, so that we are indicating to downstream 
> users that something incompatible may have happened and they need to retest.
> Now that storm is a multi-module project splitting out the UI and logviewer 
> to be their own jars with separate dependencies really seems like a good 
> start for isolation. More then that gets a little bit harry but is still 
> doable.
> If you think about it the worker only needs to pull in a few clojure APIs, 
> disruptor, curator, and jzmq or netty depending on how it is configured.



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to