HCADatalab / powderkeg

Live-coding the cluster!
Eclipse Public License 1.0
159 stars 23 forks source link

The presence of a symbol defined as a proxy causes ourorobos to blow up #13

Closed paul-amperity closed 7 years ago

paul-amperity commented 7 years ago

Example:

(require '[powderkeg.core :as keg])
(keg/connect! "local")
;; if not for this line, everything works fine:
(def oops (proxy [Object] [] (toString [] "oops!")))
;; this is where the exception is raised:
(keg/rdd (range 0 10) (map (fn [x] (* x 2))))

This exception is raised:

ClassCastException java.lang.Class cannot be cast to java.util.concurrent.Future  clojure.core/deref-future (core.clj:2206)
at clojure.core$deref_future.invokeStatic (core.clj:2206)
clojure.core$deref.invokeStatic (core.clj:2228)
clojure.core$deref.invoke (core.clj:2214)
powderkeg.ouroboros$snapshot_vars$fn__11010.invoke (ouroboros.clj:20)
clojure.core.protocols$iter_reduce.invokeStatic (protocols.clj:49)
clojure.core.protocols$fn__6742.invokeStatic (protocols.clj:75)
clojure.core.protocols/fn (protocols.clj:75)
clojure.core.protocols$fn__6684$G__6679__6697.invoke (protocols.clj:13)
clojure.core$reduce.invokeStatic (core.clj:6545)
clojure.core$reduce.invoke (core.clj:6527)
powderkeg.ouroboros$snapshot_vars.invokeStatic (ouroboros.clj:14)
powderkeg.ouroboros$snapshot_vars.invoke (ouroboros.clj:11)
powderkeg.ouroboros$latest_changes_BANG_.invokeStatic (ouroboros.clj:33)
powderkeg.ouroboros$latest_changes_BANG_.invoke (ouroboros.clj:24)
powderkeg.core$barrier_BANG_.invokeStatic (core.clj:123)
powderkeg.core$barrier_BANG_.invoke (core.clj:118)
powderkeg.core$barrier_fn.invokeStatic (core.clj:183)
powderkeg.core$barrier_fn.invoke (core.clj:177)
powderkeg.core$rdd_STAR_.invokeStatic (core.clj:247)
powderkeg.core$rdd_STAR_.invoke (core.clj:242)
powderkeg.core$rdd.invokeStatic (core.clj:275)
powderkeg.core$rdd.doInvoke (core.clj:267)
clojure.lang.RestFn.invoke (RestFn.java:423)
cgrand commented 7 years ago

Wow, I didn't know this one: proxy creates both a class and a var named user.proxy$java.lang.Object$ff19274a (for example). And ns-resolve gives priority to fully qualified classes over vars...