puniverse / pulsar

Fibers, Channels and Actors for Clojure
http://docs.paralleluniverse.co/pulsar/
Other
911 stars 53 forks source link

SupervisorActor has not been instrumented #24

Closed mnussbaum closed 10 years ago

mnussbaum commented 10 years ago

I'm getting the following error when trying to use pulsar in a project that also includes elasticsearch as a dependency:

Exception in Fiber "fiber-10000001" java.lang.RuntimeException: co.paralleluniverse.fibers.SuspendExecution: Oops. Forgot to instrument a method...

When I run with instrumentation verification I get:

IllegalArgumentException Target class class co.paralleluniverse.actors.behaviors.SupervisorActor has not been instrumented. co.paralleluniverse.fibers.Fiber.verifyInstrumentedTarget (Fiber.java:244)

To trigger the exception I run a file that only has:

(ns pulsar-testing.core                                                                 
  (:require [co.paralleluniverse.pulsar.actors :as actors]))                                    

(actors/spawn (actors/supervisor :one-for-one (fn [] [])))

In a project that includes [org.elasticsearch/elasticsearch "1.3.0"], or any higher version of elasticsearch 1.3.x, in the project.clj. The exception does not occur with elasticsearch 1.2.x, or without elasticsearch at all, so I think there is some strange interaction between pulsar and newish versions of elasticsearch.

I've tested with pulsar version 0.6.1 and 0.7.0-SNAPSHOT, and both have the same behavior.

I'm happy to help track this down, just let me know what I can do.

pron commented 10 years ago

Let me take a wild guess before I start investigating: That this interaction is a result of a version conflict by a transitive dependency shared by both Pulsar and ES. Can you try to add :pedantic :warn to project.clj and/or run lein deps :tree to check for conflicts?

mnussbaum commented 10 years ago

Thanks for the quick response! I ran lein deps :tree with pedantic on and it looks like there is an overlap on the org.ow2.asm library. I tried including all the suggested exclusions and ended up with

[co.paralleluniverse/pulsar "0.6.1"  :exclusions [org.ow2.asm/asm org.ow2.asm/asm-commons org.clojure/tools.analyzer.jvm]

Running lein deps --tree now gives me no output, but, I'm still getting the same exception. I'm not too familiar with clojure's dependency system, could pedantic just be missing some conflicts, or does this mean the problem lies elsewhere?

pron commented 10 years ago

What asm version is ES requesting? I would exclude asm from ES -- not from Pulsar (Pulsar has the newest version, and relies on asm heavily). An asm version conflict is exactly the sort of thing that could cause this kind of problem.

mnussbaum commented 10 years ago

Got it! I didn't understand that adding something to the exclusions list actually changed the dependency that was being imported, I thought perhaps it just stopped the excluded dependency from overriding other libraries. I added the following exclusions to my elasticsearch require and all my tests are passing again.

[org.elasticsearch/elasticsearch "1.3.4" :exclusions [org.ow2.asm/asm org.ow2.asm/asm-commons org.ow2.asm/asm-tree]]

Thanks again for all the help!