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

P. Taylor Goetz commented on STORM-156:
---------------------------------------

This issue is highly environment-specific. I have two systems: A (which does 
not have the issue) and B (which does).

*-----A-----*
{{$ cat /proc/version
Linux version 2.6.32-358.el6.x86_64 ([email protected]) (gcc 
version 4.4.7 20120313 (Red Hat 4.4.7-3) (GCC) ) #1 SMP Fri Feb 22 00:31:26 UTC 
2013

$ java -version
java version "1.6.0_31"
Java(TM) SE Runtime Environment (build 1.6.0_31-b04)
Java HotSpot(TM) 64-Bit Server VM (build 20.6-b01, mixed mode)

$ lein -version
Leiningen 2.3.4 on Java 1.6.0_31 Java HotSpot(TM) 64-Bit Server VM}}


*-----B-----*
{{$ cat /proc/version
Linux version 2.6.32-358.el6.x86_64 ([email protected]) (gcc 
version 4.4.7 20120313 (Red Hat 4.4.7-3) (GCC) ) #1 SMP Fri Feb 22 00:31:26 UTC 
2013

$ java -version
java version "1.6.0_31"
Java(TM) SE Runtime Environment (build 1.6.0_31-b04)
Java HotSpot(TM) 64-Bit Server VM (build 20.6-b01, mixed mode)

$ lein -version
Leiningen 2.3.4 on Java 1.6.0_31 Java HotSpot(TM) 64-Bit Server VM}}

For all intents and purposes (at least from an OS/Java/Leiningen perspective), 
the systems should behave the same way, but when compiling storm's clojure code 
they don't:

*-----A-----*
{{$lein sub install}}
_snip_
{{
Note: Some input files use unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
Compiling backtype.storm.bootstrap
Compiling backtype.storm.timer
Compiling backtype.storm.thrift
Compiling backtype.storm.disruptor
Compiling backtype.storm.stats
Compiling backtype.storm.event
Compiling backtype.storm.scheduler.IsolationScheduler
Compiling backtype.storm.scheduler.EvenScheduler
Compiling backtype.storm.scheduler.DefaultScheduler
Compiling backtype.storm.command.deactivate
Compiling backtype.storm.command.shell-submission
Compiling backtype.storm.command.rebalance
Compiling backtype.storm.command.list
Compiling backtype.storm.command.activate
Compiling backtype.storm.command.dev-zookeeper
Compiling backtype.storm.command.config-value
Compiling backtype.storm.command.kill-topology
Compiling backtype.storm.process-simulator
Compiling backtype.storm.LocalCluster
Compiling backtype.storm.config
Compiling backtype.storm.messaging.local
Compiling backtype.storm.messaging.loader
Compiling backtype.storm.zookeeper
Compiling backtype.storm.testing
Compiling backtype.storm.clojure
Compiling backtype.storm.metric.testing
Compiling backtype.storm.log
Compiling backtype.storm.testing4j
Compiling backtype.storm.LocalDRPC
Compiling backtype.storm.util
Compiling backtype.storm.ui.helpers
Compiling backtype.storm.ui.core
Compiling backtype.storm.tuple
Compiling backtype.storm.daemon.common
Compiling backtype.storm.daemon.nimbus
Compiling backtype.storm.daemon.drpc
Compiling backtype.storm.daemon.supervisor
Compiling backtype.storm.daemon.logviewer
Compiling backtype.storm.daemon.acker
Compiling backtype.storm.daemon.task
Compiling backtype.storm.daemon.builtin-metrics
Compiling backtype.storm.daemon.executor
Compiling backtype.storm.daemon.worker
Compiling backtype.storm.cluster
Compiling storm.trident.testing
}}
_successfull compilation_

*-----B-----*
{{$lien sub install}}
_snip_
{{
Note: Some input files use unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
Compiling storm.trident.testing
Exception in thread "main" java.lang.ClassNotFoundException: 
backtype.storm.LocalDRPC, compiling:(testing.clj:16)
        at clojure.lang.Compiler$InvokeExpr.eval(Compiler.java:3387)
        at clojure.lang.Compiler.compile1(Compiler.java:7035)
        at clojure.lang.Compiler.compile1(Compiler.java:7025)
        at clojure.lang.Compiler.compile(Compiler.java:7097)
        at clojure.lang.RT.compile(RT.java:387)
        at clojure.lang.RT.load(RT.java:427)
        at clojure.lang.RT.load(RT.java:400)
        at clojure.core$load$fn__4890.invoke(core.clj:5415)
        at clojure.core$load.doInvoke(core.clj:5414)
        at clojure.lang.RestFn.invoke(RestFn.java:408)
        at clojure.core$load_one.invoke(core.clj:5227)
        at clojure.core$compile$fn__4895.invoke(core.clj:5426)
        at clojure.core$compile.invoke(core.clj:5425)
        at user$eval9.invoke(form-init4988551896295848674.clj:1)
        at clojure.lang.Compiler.eval(Compiler.java:6511)
        at clojure.lang.Compiler.eval(Compiler.java:6501)
        at clojure.lang.Compiler.load(Compiler.java:6952)
        at clojure.lang.Compiler.loadFile(Compiler.java:6912)
        at clojure.main$load_script.invoke(main.clj:283)
        at clojure.main$init_opt.invoke(main.clj:288)
        at clojure.main$initialize.invoke(main.clj:316)
        at clojure.main$null_opt.invoke(main.clj:349)
        at clojure.main$main.doInvoke(main.clj:427)
        at clojure.lang.RestFn.invoke(RestFn.java:421)
        at clojure.lang.Var.invoke(Var.java:419)
        at clojure.lang.AFn.applyToHelper(AFn.java:163)
        at clojure.lang.Var.applyTo(Var.java:532)
        at clojure.main.main(main.java:37)
Caused by: java.lang.ClassNotFoundException: backtype.storm.LocalDRPC
        at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at clojure.lang.DynamicClassLoader.findClass(DynamicClassLoader.java:61)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:169)
        at storm.trident.testing$loading__4784__auto__.invoke(testing.clj:16)
        at clojure.lang.AFn.applyToHelper(AFn.java:159)
        at clojure.lang.AFn.applyTo(AFn.java:151)
        at clojure.lang.Compiler$InvokeExpr.eval(Compiler.java:3382)
        ... 27 more
Compilation failed: Subprocess failed
}}

The difference is that *A* attempts to compile the clojure packages in a 
different order than *B*. *A* starts with {{backtype.storm.bootstrap}}, while 
*B* starts with {{ storm.trident.testing}}.

The solution is to add explicit {{require}}s (see patch).

Since the patch does not affect any functionality, I think it is safe to apply 
to avoid the issue on systems that behave like *B*.



> Compiling Storm 0.9.0 results in java.lang.ClassNotFoundException: 
> backtype.storm.LocalDRPC
> -------------------------------------------------------------------------------------------
>
>                 Key: STORM-156
>                 URL: https://issues.apache.org/jira/browse/STORM-156
>             Project: Apache Storm (Incubating)
>          Issue Type: Bug
>            Reporter: James Xu
>            Priority: Minor
>
> https://github.com/nathanmarz/storm/issues/495
> In reference to pull request #460 I was able to reproduce the error
> and gather log files. I am using the bin/build_release.sh to compile
> Storm. Storm compiles on Mac OS X 10.8.2 using Lein 2.0.0 and Java JDK
> 1.7. On Ubuntu 12.04 using Lein 2.0.0 and Java JDK 1.7 it fails with
> the following error:
> Compiling storm.trident.testing Exception in thread "main"
> java.lang.ClassNotFoundException: backtype.storm.LocalDRPC,
> compiling:(testing.clj:1) at
> clojure.lang.Compiler$InvokeExpr.eval(Compiler.java:3387) at
> clojure.lang.Compiler.compile1(Compiler.java:7035) at
> clojure.lang.Compiler.compile1(Compiler.java:7025) at
> clojure.lang.Compiler.compile(Compiler.java:7097) at
> clojure.lang.RT.compile(RT.java:387) at
> clojure.lang.RT.load(RT.java:427) at clojure.lang.RT.load(RT.java:400)
> at clojure.core$load$fn__4890.invoke(core.clj:5415) at
> clojure.core$load.doInvoke(core.clj:5414) at
> clojure.lang.RestFn.invoke(RestFn.java:408) at
> clojure.core$load_one.invoke(core.clj:5227) at
> clojure.core$compile$fn__4895.invoke(core.clj:5426) at
> clojure.core$compile.invoke(core.clj:5425) at
> user$eval7.invoke(NO_SOURCE_FILE:1) at
> clojure.lang.Compiler.eval(Compiler.java:6511) at
> clojure.lang.Compiler.eval(Compiler.java:6501) at
> clojure.lang.Compiler.eval(Compiler.java:6477) at
> clojure.core$eval.invoke(core.clj:2797) at
> clojure.main$eval_opt.invoke(main.clj:297) at
> clojure.main$initialize.invoke(main.clj:316) at
> clojure.main$null_opt.invoke(main.clj:349) at
> clojure.main$main.doInvoke(main.clj:427) at
> clojure.lang.RestFn.invoke(RestFn.java:421) at
> clojure.lang.Var.invoke(Var.java:419) at
> clojure.lang.AFn.applyToHelper(AFn.java:163) at
> clojure.lang.Var.applyTo(Var.java:532) at
> clojure.main.main(main.java:37)
> I have contacted leiningen on IRC and they suggested that it might be
> Storm. I am attaching the logs that I generated with: export
> DEBUG=true lein with-profile release jar > system_jar.txt 2>&1
> Mac OS X Log: http://pastebin.com/YvBRisSH Ubuntu 12.04 Log:
> http://pastebin.com/6KMKF63e
> ---------- d2r: I had to add :require LocalDRPC before the :import.
> The cause might have to do with build order...
> --------- alexcpsec: I had the same issue and fixed it the same
> way. Is there a pull request for this yet
> ---------- alchemist0: I am running into this error too. I am not very
> strong with the clojure syntax. Could someone either give me the code
> which needs to be inserted verbatim, or share their working
> testing4j.clj file with me?
> ---------- d2r: I have the following:
>   1 (ns backtype.storm.testing4j 
>   2 (:import [java.util Map List Collection ArrayList]) 
>   3 (:require [backtype.storm LocalCluster]) 
>   4 (:import [backtype.storm Config ILocalCluster LocalCluster])
> ---------- ypf412: In my environment, I have the following: 1 (ns
> backtype.storm.testing4j 2 (:import [java.util Map List Collection
> ArrayList]) 3 (:require [backtype.storm.LocalCluster :as
> LocalCluster]) and 1 (ns storm.trident.testing 2 (:require
> [backtype.storm.LocalDRPC :as LocalDRPC])



--
This message was sent by Atlassian JIRA
(v6.1.5#6160)

Reply via email to