- Notifications
You must be signed in to change notification settings - Fork 240
Open
Description
Reported by @dgr via Slack and cause narrowed down by @hiredman.
Trace
[Finalizer] WARN manifold.deferred - unconsumed deferred in error state, make sure you're using `catch`. java.lang.NullPointerException: Cannot invoke "manifold.stream.core.IEventSource.take(Object, Object)" because "this.s" is null at manifold.stream$reduce$fn__31304$this__29295__auto____31308$fn__31309.invoke(stream.clj:738) at manifold.stream$reduce$fn__31304$this__29295__auto____31308.invoke(stream.clj:737) at manifold.stream$reduce$fn__31304.invoke(stream.clj:737) at manifold.deferred$eval29130$chain_SINGLEQUOTE____29151.invoke(deferred.clj:883) at manifold.stream$reduce.invokeStatic(stream.clj:733) at manifold.stream$reduce.invoke(stream.clj:722) at aleph.http.client_middleware$wrap_exceptions$fn__38826$fn__38873.invoke(client_middleware.clj:281) at clojure.lang.AFn.applyToHelper(AFn.java:154) at clojure.lang.AFn.applyTo(AFn.java:144) at clojure.core$apply.invokeStatic(core.clj:667) at clojure.core$with_bindings_STAR_.invokeStatic(core.clj:1990) at clojure.core$with_bindings_STAR_.doInvoke(core.clj:1990) at clojure.lang.RestFn.applyTo(RestFn.java:145) at clojure.core$apply.invokeStatic(core.clj:671) at clojure.core$bound_fn_STAR_$fn__5839.doInvoke(core.clj:2020) at clojure.lang.RestFn.invoke(RestFn.java:411) at manifold.deferred$eval29130$chain_SINGLEQUOTE____29151.invoke(deferred.clj:883) at manifold.deferred$eval29130$subscribe__29131$fn__29136.invoke(deferred.clj:849) at manifold.deferred.Listener.onSuccess(deferred.clj:345) at manifold.deferred.Deferred$fn__29000$fn__29001.invoke(deferred.clj:524) at clojure.lang.AFn.run(AFn.java:22) at io.aleph.dirigiste.Executor$3.run(Executor.java:325) at io.aleph.dirigiste.Executor$Worker$1.run(Executor.java:61) at manifold.executor$thread_factory$reify__28099$f__28100.invoke(executor.clj:71) at clojure.lang.AFn.run(AFn.java:22) at java.base/java.lang.Thread.run(Thread.java:1583)Reproducer
It occasionally happens with this function:
(defn get-retry-429 "Performs an HTTP get, but if it receives a 429 error, it retries after 15 seconds, for up to five times." ([url] (get-retry-429 url {})) ([url options] (d/loop [retries 5] (-> (http/get url options) (d/catch clojure.lang.ExceptionInfo (fn [e] (let [info (ex-data e)] (if (= (:status info) 429) (if (pos? retries) ;; Get delay (let [seconds 15 #_(-> (get-in info [:headers "retry-after"]) parse-long) millis (* seconds 1000)] (-> (d/timeout! (d/deferred) millis nil) (d/chain (fn [_] (d/recur (dec retries)))))) (throw e)) (throw e)))))))))Metadata
Metadata
Assignees
Labels
No labels