Fork me on GitHub
#calva
<
2021-08-15
>
henrik4208:08:36

Hi! Calva newbie here. I'm working with a Java app and when evaluating things in Calva that throw an exception out of that Java app it seems to take for ever until the exception shows up in Calva. Since there is no instantaneous response I used to think I might have hit the wrong key and run the eval again just to receive the exception multiple times then. Is this behavior known? Can I do something about it? I haven't done much debugging so I don't even know if this has something to do with Calva, clojure-lsp or nrepl. Any hint will help.

pez09:08:04

Welcome to Calva, @henrikheine! I haven’t heard of this before. Can you try it less stuff between the program and you? Like using just the clj tool and trigger the exception from its prompt.

henrik4212:08:37

When I connect from reply/reply everything is fine & fast. I took a threaddump from jvisualvm and found this:

"clojure-agent-send-off-pool-4" #15 prio=5 os_prio=0 tid=0x000000002a42b000 nid=0x204 runnable [0x000000002f86b000]
   java.lang.Thread.State: RUNNABLE
        at java.net.SocketInputStream.socketRead0(Native Method)
        at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
        at java.net.SocketInputStream.read(SocketInputStream.java:171)
        at java.net.SocketInputStream.read(SocketInputStream.java:141)
        at sun.security.ssl.InputRecord.readFully(InputRecord.java:465)
        at sun.security.ssl.InputRecord.read(InputRecord.java:503)
        at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:983)
        - locked <0x0000000727e2f2f0> (a java.lang.Object)
        at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1385)
        - locked <0x0000000727e2f2b0> (a java.lang.Object)
        at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1413)
        at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1397)
        at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:559)
        at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)
        at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:162)
        at cider.nrepl.inlined_deps.orchard.v0v5v3.orchard.clojuredocs$test_remote_url.invokeStatic(clojuredocs.clj:53)
        at cider.nrepl.inlined_deps.orchard.v0v5v3.orchard.clojuredocs$test_remote_url.invoke(clojuredocs.clj:45)
        at cider.nrepl.inlined_deps.orchard.v0v5v3.orchard.clojuredocs$load_cache_BANG_.invokeStatic(clojuredocs.clj:83)
        at cider.nrepl.inlined_deps.orchard.v0v5v3.orchard.clojuredocs$load_cache_BANG_.invoke(clojuredocs.clj:60)
        at cider.nrepl.inlined_deps.orchard.v0v5v3.orchard.clojuredocs$get_doc.invokeStatic(clojuredocs.clj:118)
        at cider.nrepl.inlined_deps.orchard.v0v5v3.orchard.clojuredocs$get_doc.invoke(clojuredocs.clj:111)
        at cider.nrepl.inlined_deps.orchard.v0v5v3.orchard.clojuredocs$get_doc.invokeStatic(clojuredocs.clj:116)
        at cider.nrepl.inlined_deps.orchard.v0v5v3.orchard.clojuredocs$get_doc.invoke(clojuredocs.clj:111)
        at cider.nrepl.inlined_deps.orchard.v0v5v3.orchard.clojuredocs$see_also.invokeStatic(clojuredocs.clj:163)
        at cider.nrepl.inlined_deps.orchard.v0v5v3.orchard.clojuredocs$see_also.invoke(clojuredocs.clj:159)
        at cider.nrepl.inlined_deps.orchard.v0v5v3.orchard.meta$maybe_add_see_also$fn__5475.invoke(meta.clj:77)
        at cider.nrepl.inlined_deps.orchard.v0v5v3.orchard.meta$maybe_add_see_also.invokeStatic(meta.clj:76)
        at cider.nrepl.inlined_deps.orchard.v0v5v3.orchard.meta$maybe_add_see_also.invoke(meta.clj:73)
        at cider.nrepl.inlined_deps.orchard.v0v5v3.orchard.meta$var_meta.invokeStatic(meta.clj:183)
        at cider.nrepl.inlined_deps.orchard.v0v5v3.orchard.meta$var_meta.invoke(meta.clj:168)
        at cider.nrepl.inlined_deps.orchard.v0v5v3.orchard.meta$var_meta.invokeStatic(meta.clj:171)
        at cider.nrepl.inlined_deps.orchard.v0v5v3.orchard.meta$var_meta.invoke(meta.clj:168)
        at $clj_meta.invokeStatic(info.clj:83)
        at $clj_meta.invoke(info.clj:74)
        at $info_STAR_.invokeStatic(info.clj:154)
        at $info_STAR_.invoke(info.clj:143)
        at cider.nrepl.middleware.stacktrace$analyze_fn.invokeStatic(stacktrace.clj:78)
        at cider.nrepl.middleware.stacktrace$analyze_fn.invoke(stacktrace.clj:63)
        at clojure.core$comp$fn__5825.invoke(core.clj:2573)
        at clojure.core$comp$fn__5825.invoke(core.clj:2573)
        at clojure.core$comp$fn__5825.invoke(core.clj:2573)
        at cider.nrepl.middleware.stacktrace$analyze_frame.invokeStatic(stacktrace.clj:180)
        at cider.nrepl.middleware.stacktrace$analyze_frame.invoke(stacktrace.clj:177)
        at clojure.core$map$fn__5884.invoke(core.clj:2759)
        at clojure.lang.LazySeq.sval(LazySeq.java:42)
        - locked <0x0000000727e2bb58> (a clojure.lang.LazySeq)
        at clojure.lang.LazySeq.seq(LazySeq.java:51)
        - locked <0x0000000727e2bb58> (a clojure.lang.LazySeq)
        at clojure.lang.RT.seq(RT.java:535)
        at clojure.core$seq__5419.invokeStatic(core.clj:139)
        at clojure.core$map$fn__5888.invoke(core.clj:2761)
        at clojure.lang.LazySeq.sval(LazySeq.java:42)
        - eliminated <0x0000000727e2bbf0> (a clojure.lang.LazySeq)
        at clojure.lang.LazySeq.seq(LazySeq.java:51)
        - locked <0x0000000727e2bbf0> (a clojure.lang.LazySeq)
        at clojure.lang.Cons.next(Cons.java:39)
        at clojure.lang.RT.next(RT.java:713)
        at clojure.core$next__5403.invokeStatic(core.clj:64)
        at clojure.core.protocols$fn__8181.invokeStatic(protocols.clj:169)
        at clojure.core.protocols$fn__8181.invoke(protocols.clj:124)
        at clojure.core.protocols$fn__8136$G__8131__8145.invoke(protocols.clj:19)
        at clojure.core.protocols$seq_reduce.invokeStatic(protocols.clj:31)
        at clojure.core.protocols$fn__8168.invokeStatic(protocols.clj:75)
        at clojure.core.protocols$fn__8168.invoke(protocols.clj:75)
        at clojure.core.protocols$fn__8110$G__8105__8123.invoke(protocols.clj:13)
        at clojure.core$reduce.invokeStatic(core.clj:6830)
        at clojure.core$into.invokeStatic(core.clj:6897)
        at clojure.core$mapv.invokeStatic(core.clj:6905)
        at clojure.core$mapv.invoke(core.clj:6905)
        at cider.nrepl.middleware.stacktrace$flag_duplicates.invokeStatic(stacktrace.clj:175)
        at cider.nrepl.middleware.stacktrace$flag_duplicates.invoke(stacktrace.clj:164)
        at cider.nrepl.middleware.stacktrace$analyze_stacktrace.invokeStatic(stacktrace.clj:186)
        at cider.nrepl.middleware.stacktrace$analyze_stacktrace.invoke(stacktrace.clj:182)
        at cider.nrepl.middleware.stacktrace$analyze_cause.invokeStatic(stacktrace.clj:290)
        at cider.nrepl.middleware.stacktrace$analyze_cause.invoke(stacktrace.clj:281)
        at cider.nrepl.middleware.stacktrace$analyze_causes$fn__5727.invoke(stacktrace.clj:315)
        at clojure.core$map$fn__5880$fn__5881.invoke(core.clj:2746)
        at clojure.core$take_while$fn__5931$fn__5932.invoke(core.clj:2905)
        at clojure.lang.Iterate.reduce(Iterate.java:81)
        at clojure.core$transduce.invokeStatic(core.clj:6885)
        at clojure.core$into.invokeStatic(core.clj:6901)
        at clojure.core$into.invoke(core.clj:6889)
        at cider.nrepl.middleware.stacktrace$analyze_causes.invokeStatic(stacktrace.clj:314)
        at cider.nrepl.middleware.stacktrace$analyze_causes.invoke(stacktrace.clj:306)
        at cider.nrepl.middleware.stacktrace$handle_stacktrace.invokeStatic(stacktrace.clj:323)
        at cider.nrepl.middleware.stacktrace$handle_stacktrace.invoke(stacktrace.clj:320)
        at clojure.lang.Var.invoke(Var.java:388)
        at cider.nrepl$wrap_stacktrace$fn__2072.invoke(nrepl.clj:391)
        at nrepl.middleware$wrap_conj_descriptor$fn__660.invoke(middleware.clj:16)
        at cider.nrepl$wrap_classpath$fn__1956.invoke(nrepl.clj:111)
        at nrepl.middleware$wrap_conj_descriptor$fn__660.invoke(middleware.clj:16)
        at cider.nrepl$wrap_resource$fn__2056.invoke(nrepl.clj:363)
        at nrepl.middleware$wrap_conj_descriptor$fn__660.invoke(middleware.clj:16)
        at nrepl.middleware.completion$wrap_completion$fn__1428.invoke(completion.clj:50)
        at nrepl.middleware$wrap_conj_descriptor$fn__660.invoke(middleware.clj:16)
        at cider.nrepl$wrap_complete$fn__1964.invoke(nrepl.clj:117)
        at nrepl.middleware$wrap_conj_descriptor$fn__660.invoke(middleware.clj:16)
        at nrepl.middleware.sideloader$wrap_sideloader$fn__1547.invoke(sideloader.clj:104)
        at nrepl.middleware$wrap_conj_descriptor$fn__660.invoke(middleware.clj:16)
        at cider.nrepl$wrap_info$fn__1998.invoke(nrepl.clj:181)
        at nrepl.middleware$wrap_conj_descriptor$fn__660.invoke(middleware.clj:16)
        at nrepl.middleware.load_file$wrap_load_file$fn__1460.invoke(load_file.clj:81)
        at nrepl.middleware$wrap_conj_descriptor$fn__660.invoke(middleware.clj:16)
        at cider.nrepl$wrap_content_type$fn__1932.invoke(nrepl.clj:83)
        at nrepl.middleware$wrap_conj_descriptor$fn__660.invoke(middleware.clj:16)
        at nrepl.middleware.caught$wrap_caught$fn__929.invoke(caught.clj:97)
        at nrepl.middleware$wrap_conj_descriptor$fn__660.invoke(middleware.clj:16)
        at nrepl.middleware.print$wrap_print$fn__896.invoke(print.clj:234)
        at nrepl.middleware$wrap_conj_descriptor$fn__660.invoke(middleware.clj:16)
        at cider.nrepl$wrap_trace$fn__2088.invoke(nrepl.clj:420)
        at nrepl.middleware$wrap_conj_descriptor$fn__660.invoke(middleware.clj:16)
        at cider.nrepl$wrap_tracker$fn__2096.invoke(nrepl.clj:438)
        at nrepl.middleware$wrap_conj_descriptor$fn__660.invoke(middleware.clj:16)
        at nrepl.middleware.session$session$fn__1095.invoke(session.clj:309)
        at nrepl.middleware$wrap_conj_descriptor$fn__660.invoke(middleware.clj:16)
        at cider.nrepl$wrap_enlighten$fn__1982.invoke(nrepl.clj:163)
        at nrepl.middleware$wrap_conj_descriptor$fn__660.invoke(middleware.clj:16)
        at nrepl.server$default_handler$fn__1591.invoke(server.clj:130)
        at nrepl.server$handle_STAR_.invokeStatic(server.clj:22)
        at nrepl.server$handle_STAR_.invoke(server.clj:19)
        at nrepl.server$handle$fn__1562.invoke(server.clj:39)
        at clojure.core$binding_conveyor_fn$fn__5772.invoke(core.clj:2034)
        at clojure.lang.AFn.call(AFn.java:18)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)
So it looks like it has to do with cider.nrepl. From my experiments it seems to happen only if I eval a (def foo (...stuff-throwing...)) - but not if I just eval (...stuff-throwing...). And for some reason it does not seem to always happen. I must say, that the classpath holds quite a few jar-dependencies. So this may cause the delay. I'll keep investigating this.

pez12:08:54

Also check the cider-nrepl repo for similar issues, maybe.

henrik4212:08:54

I will. Thx

henrik4218:08:47

Updating to cider/cider-nrepl {:mvn/version "0.26.0"}} from "0.22.4" seems to solve the problem.

pez20:08:08

Ah, I remember there was some versions that got stuck trying to call a clojuredocs API.