puniverse / pulsar

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

Clojure 1.8 Upgrade #52

Closed jjcomer closed 8 years ago

jjcomer commented 8 years ago

I recently tried upgrading my pulsar application to clojure 1.8 with no success.

This is the new stack trace I'm seeing when running 1.8 (this error does not happen when running 1.7)

                                        jsr166e.ForkJoinWorkerThread.run    ForkJoinWorkerThread.java:  107
                                           jsr166e.ForkJoinPool.runWorker            ForkJoinPool.java: 1628
                                   jsr166e.ForkJoinPool$WorkQueue.runTask            ForkJoinPool.java:  988
                                              jsr166e.ForkJoinTask.doExec            ForkJoinTask.java:  261
        co.paralleluniverse.concurrent.forkjoin.ParkableForkJoinTask.exec    ParkableForkJoinTask.java:   73
      co.paralleluniverse.concurrent.forkjoin.ParkableForkJoinTask.doExec    ParkableForkJoinTask.java:  116
co.paralleluniverse.fibers.FiberForkJoinScheduler$FiberForkJoinTask.exec1  FiberForkJoinScheduler.java:  265
                                    co.paralleluniverse.fibers.Fiber.exec                   Fiber.java:  730
                                    co.paralleluniverse.fibers.Fiber.run1                   Fiber.java: 1019
                                     co.paralleluniverse.fibers.Fiber.run                   Fiber.java: 1024
                           co.paralleluniverse.pulsar.ClojureHelper$4.run           ClojureHelper.java:  200
               co.paralleluniverse.pulsar.ClojureHelper.suspendableInvoke           ClojureHelper.java:  213
                        co.paralleluniverse.pulsar.InstrumentedIFn.invoke         InstrumentedIFn.java:   32
                              co.paralleluniverse.pulsar.async/f->chan/fn                    async.clj:  306
                           co.paralleluniverse.pulsar.async/f->chan/fn/fn                    async.clj:  306
                        co.paralleluniverse.pulsar.InstrumentedIFn.invoke         InstrumentedIFn.java:   32
                           myapp.handlers.matcher/kick-off-interaction/fn                  matcher.clj:   79
                            myapp.handlers.matcher/match-dispatch-mapping                  matcher.clj:   42
                        myapp.matcher/match-dispatch-mapping/invokeStatic                  matcher.clj:   49
                        co.paralleluniverse.pulsar.InstrumentedIFn.invoke         InstrumentedIFn.java:   40
                                  co.paralleluniverse.pulsar.actors/call!                   actors.clj:  665
                     co.paralleluniverse.pulsar.actors/call!/invokeStatic                   actors.clj:  669
                         co.paralleluniverse.actors.behaviors.Server.call                  Server.java:   80
                         co.paralleluniverse.actors.behaviors.Server.call                  Server.java:  102
             co.paralleluniverse.actors.behaviors.RequestReplyHelper.call      RequestReplyHelper.java:  174
                co.paralleluniverse.actors.SelectiveReceiveHelper.receive  SelectiveReceiveHelper.java:  141
                                 co.paralleluniverse.actors.Mailbox.await                 Mailbox.java:   90
                  co.paralleluniverse.strands.ConditionSynchronizer.await   ConditionSynchronizer.java:   54
                                  co.paralleluniverse.strands.Strand.park                  Strand.java:  493
java.lang.NullPointerException:

This is a pretty printed exception (so it goes backwards which the top of the stack at the bottom). The stack leaves my code in on matcher.clj: 49 which is a call! to a gen-server.

We have auto instrumentation turned on. This error happens with both pulsar 0.7.3 and 0.7.4

Any insights would be great.

circlespainter commented 8 years ago

Clojure 1.8 has come out few days after the last Pulsar release (0.7.4, which supports Clojure 1.7) and it changes quite a few important things under the cover so it's expected to require changes in Pulsar to support it, especially with auto-instrumentation. We'll upgrade ASAP Pulsar to Clojure 1.8 and publish a 0.7.5-SNAPSHOT.

In the meanwhile do you have a chance to try it without auto-instrumentation (i.e. with explicit defsfn, sfn etc.)? If not I suggest you to stay with Clojure 1.7 until there's a new Pulsar SNAPSHOT. Or is there some Clojure 1.8 feature you need badly (or would greatly benefit from)?

jjcomer commented 8 years ago

The biggest benefit we have notice is compilation time, 1.8 is significantly faster. I keep a lookout for when the snapshot drops and give the upgrade a try then.

0xc1c4da commented 8 years ago

We recently hit this issue and see there is no 1.7.5-SNAPSHOT available in clojars?

TonyLo1 commented 8 years ago

Any ideas, on a 0.7.5 snapshot timeframe (with support for Clojure 1.8.0)? It would be very helpful to use to be able to manage our roadmap.

circlespainter commented 8 years ago

Cross-ref: https://groups.google.com/forum/#!topic/quasar-pulsar-user/GLi3DJAvwdo

jjcomer commented 8 years ago

Awesome! Can't wait to start testing this out.