Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Pathom exceptions have huge ex-message, causing editor lag #142

Closed
nivekuil opened this issue Jun 11, 2022 · 12 comments · Fixed by #143
Closed

Pathom exceptions have huge ex-message, causing editor lag #142

nivekuil opened this issue Jun 11, 2022 · 12 comments · Fixed by #143

Comments

@nivekuil
Copy link

nivekuil commented Jun 11, 2022

(pco/defresolver bad []
  {:a (/ 1 0)})
(def env (pci/register bad))
(try @(p.a.eql/process env  [:a])
     (catch Exception e
       (def  x (ex-message e))
       (throw (ex-info (ex-message e) {}))))

This prints a huge error message. Looking at x, we see it is a string with a value way too big to ever be sensible for ex-message. In fact I had to trim it down or github wouldn't let me post it:

"clojure.lang.ExceptionInfo: Graph execution failed: Resolver com.nivekuil.nexus/bad exception at path []: Divide by zero {:com.wsscode.pathom3.connect.runner/processor-error? true, :com.wsscode.pathom3.connect.runner/batch-pending* #atom[{} 0x5604037e], :com.wsscode.pathom3.connect.indexes/index-oir {:a {{} #{com.nivekuil.nexus/bad}}}, :com.wsscode.pathom3.connect.indexes/index-resolvers #:com.nivekuil.nexus{bad #com.wsscode.pathom3.connect.operation.Resolver{:config #:com.wsscode.pathom3.connect.operation{:input [], :provides {:a {}}, :output [:a], :op-name com.nivekuil.nexus/bad, :requires {}}, :resolve #function[com.nivekuil.nexus/bad--145552]}}, :com.wsscode.pathom3.error/error-data #:com.wsscode.pathom3.path{:path []}, :com.wsscode.pathom3.entity-tree/entity-tree* #atom[{} 0x21a9fbfc], :com.wsscode.pathom3.connect.runner/batch-waiting* #atom[[] 0x206cae44], :com.wsscode.pathom3.connect.planner/graph {:com.wsscode.pathom3.connect.planner/source-ast {:type :root, :children [{:type :prop, :dispatch-key :a, :key :a}]}, :com.wsscode.pathom3.connect.planner/index-attrs {:a #{1}}, :com.wsscode.pathom3.connect.planner/user-request-shape {:a {}}, :com.wsscode.pathom3.connect.runner/compute-plan-run-finish-ms 1.0072404204597E7, :com.wsscode.pathom3.connect.runner/graph-run-finish-ms 1.007240462311E7, :com.wsscode.pathom3.connect.runner/compute-plan-run-start-ms 1.0072404121185E7, :com.wsscode.pathom3.connect.planner/root 1, :com.wsscode.pathom3.connect.planner/available-data {}, :com.wsscode.pathom3.connect.runner/node-run-stats {1 #:com.wsscode.pathom3.connect.runner{:node-run-start-ms 1.007240422799E7, :resolver-run-start-ms 1.007240424407E7, :node-error #:com.wsscode.pathom3.error{:error-message \"Resolver com.nivekuil.nexus/bad exception at path []: Divide by zero\", :error-data #:com.wsscode.pathom3.path{:path []}, :error-stack \"clojure.lang.ExceptionInfo: Resolver com.nivekuil.nexus/bad exception at path []: Divide by zero #:com.wsscode.pathom3.path{:path []}\\n\\tat com.wsscode.pathom3.connect.runner$report_resolver_error.invokeStatic(runner.cljc:447)\\n\\tat com.wsscode.pathom3.connect.runner$report_resolver_error.invoke(runner.cljc:437)\\n\\tat com.wsscode.pathom3.connect.runner.async$invoke_resolver_from_node$fn__14965.invoke(async.cljc:238)\\n\\tat promesa.impl$eval14454$fn__14467$handler__14468.invoke(impl.cljc:168)\\n\\tat promesa.util.BiFunctionWrapper.apply(util.cljc:49)\\n\\tat java.base/java.util.concurrent.CompletableFuture.uniHandle(CompletableFuture.java:934)\\n\\tat java.base/java.util.concurrent.CompletableFuture.uniHandleStage(CompletableFuture.java:950)\\n\\tat java.base/java.util.concurrent.CompletableFuture.handle(CompletableFuture.java:2340)\\n\\tat java.base/java.util.concurrent.CompletableFuture.handle(CompletableFuture.java:144)\\n\\tat promesa.impl$eval14454$fn__14467.invoke(impl.cljc:171)\\n\\tat promesa.protocols$eval13901$fn__13923$G__13888__13936.invoke(protocols.cljc:28)\\n\\tat promesa.core$catch.invokeStatic(core.cljc:242)\\n\\tat promesa.core$catch.invoke(core.cljc:238)\\n\\tat com.wsscode.pathom3.connect.runner.async$invoke_resolver_from_node.invokeStatic(async.cljc:236)\\n\\tat com.wsscode.pathom3.connect.runner.async$invoke_resolver_from_node.invoke(async.cljc:195)\\n\\tat com.wsscode.pathom3.connect.runner.async$run_resolver_node_BANG_$fn__14980$fn__14981$fn__14982.invoke(async.cljc:259)\\n\\tat promesa.util.FunctionWrapper.apply(util.cljc:43)\\n\\tat java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1187)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2309)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:144)\\n\\tat promesa.impl$eval14454$fn__14457.invoke(impl.cljc:124)\\n\\tat promesa.protocols$eval13901$fn__13965$G__13880__13978.invoke(protocols.cljc:28)\\n\\tat com.wsscode.pathom3.connect.runner.async$run_resolver_node_BANG_$fn__14980$fn__14981.invoke(async.cljc:256)\\n\\tat promesa.util.FunctionWrapper.apply(util.cljc:43)\\n\\tat java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1187)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2309)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:144)\\n\\tat promesa.impl$eval14454$fn__14457.invoke(impl.cljc:124)\\n\\tat promesa.protocols$eval13901$fn__13965$G__13880__13978.invoke(protocols.cljc:28)\\n\\tat com.wsscode.pathom3.connect.runner.async$run_resolver_node_BANG_$fn__14980.invoke(async.cljc:256)\\n\\tat promesa.util.FunctionWrapper.apply(util.cljc:43)\\n\\tat java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1187)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2309)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:144)\\n\\tat promesa.impl$eval14454$fn__14457.invoke(impl.cljc:124)\\n\\tat promesa.protocols$eval13901$fn__13965$G__13880__13978.invoke(protocols.cljc:28)\\n\\tat com.wsscode.pathom3.connect.runner.async$run_resolver_node_BANG_.invokeStatic(async.cljc:256)\\n\\tat com.wsscode.pathom3.connect.runner.async$run_resolver_node_BANG_.invoke(async.cljc:248)\\n\\tat com.wsscode.pathom3.connect.runner.async$run_node_BANG_.invokeStatic(async.cljc:365)\\n\\tat com.wsscode.pathom3.connect.runner.async$run_node_BANG_.invoke(async.cljc:354)\\n\\tat com.wsscode.pathom3.connect.runner.async$run_root_node_BANG_$fn__15143.invoke(async.cljc:442)\\n\\tat promesa.util.FunctionWrapper.apply(util.cljc:43)\\n\\tat java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1187)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2309)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:144)\\n\\tat promesa.impl$eval14454$fn__14457.invoke(impl.cljc:124)\\n\\tat promesa.protocols$eval13901$fn__13965$G__13880__13978.invoke(protocols.cljc:28)\\n\\tat com.wsscode.pathom3.connect.runner.async$run_root_node_BANG_.invokeStatic(async.cljc:442)\\n\\tat com.wsscode.pathom3.connect.runner.async$run_root_node_BANG_.invoke(async.cljc:439)\\n\\tat com.wsscode.pathom3.connect.runner.async$run_graph_BANG__STAR_$fn__15155$fn__15156$fn__15157$fn__15158.invoke(async.cljc:474)\\n\\tat promesa.util.FunctionWrapper.apply(util.cljc:43)\\n\\tat java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1187)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2309)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:144)\\n\\tat promesa.impl$eval14454$fn__14457.invoke(impl.cljc:124)\\n\\tat promesa.protocols$eval13901$fn__13965$G__13880__13978.invoke(protocols.cljc:28)\\n\\tat com.wsscode.pathom3.connect.runner.async$run_graph_BANG__STAR_$fn__15155$fn__15156$fn__15157.invoke(async.cljc:461)\\n\\tat promesa.util.FunctionWrapper.apply(util.cljc:43)\\n\\tat java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1187)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2309)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:144)\\n\\tat promesa.impl$eval14454$fn__14457.invoke(impl.cljc:124)\\n\\tat promesa.protocols$eval13901$fn__13965$G__13880__13978.invoke(protocols.cljc:28)\\n\\tat com.wsscode.pathom3.connect.runner.async$run_graph_BANG__STAR_$fn__15155$fn__15156.invoke(async.cljc:461)\\n\\tat promesa.util.FunctionWrapper.apply(util.cljc:43)\\n\\tat java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1187)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2309)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:144)\\n\\tat promesa.impl$eval14454$fn__14457.invoke(impl.cljc:124)\\n\\tat promesa.protocols$eval13901$fn__13965$G__13880__13978.invoke(protocols.cljc:28)\\n\\tat com.wsscode.pathom3.connect.runner.async$run_graph_BANG__STAR_$fn__15155.invoke(async.cljc:461)\\n\\tat promesa.util.FunctionWrapper.apply(util.cljc:43)\\n\\tat java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1187)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2309)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:144)\\n\\tat promesa.impl$eval14454$fn__14457.invoke(impl.cljc:124)\\n\\tat promesa.protocols$eval13901$fn__13965$G__13880__13978.invoke(protocols.cljc:28)\\n\\tat com.wsscode.pathom3.connect.runner.async$run_graph_BANG__STAR_.invokeStatic(async.cljc:461)\\n\\tat com.wsscode.pathom3.connect.runner.async$run_graph_BANG__STAR_.invoke(async.cljc:454)\\n\\tat com.wsscode.pathom3.connect.runner.async$plan_and_run_BANG_.invokeStatic(async.cljc:500)\\n\\tat com.wsscode.pathom3.connect.runner.async$plan_and_run_BANG_.invoke(async.cljc:478)\\n\\tat com.wsscode.pathom3.connect.runner.async$run_graph_impl_BANG_$fn__15260$fn__15261.invoke(async.cljc:616)\\n\\tat promesa.util.FunctionWrapper.apply(util.cljc:43)\\n\\tat java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1187)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2309)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:144)\\n\\tat promesa.impl$eval14454$fn__14457.invoke(impl.cljc:124)\\n\\tat promesa.protocols$eval13901$fn__13965$G__13880__13978.invoke(protocols.cljc:28)\\n\\tat com.wsscode.pathom3.connect.runner.async$run_graph_impl_BANG_$fn__15260.invoke(async.cljc:615)\\n\\tat promesa.util.FunctionWrapper.apply(util.cljc:43)\\n\\tat java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1187)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2309)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:144)\\n\\tat promesa.impl$eval14454$fn__14457.invoke(impl.cljc:124)\\n\\tat promesa.protocols$eval13901$fn__13965$G__13880__13978.invoke(protocols.cljc:28)\\n\\tat com.wsscode.pathom3.connect.runner.async$run_graph_impl_BANG_.invokeStatic(async.cljc:615)\\n\\tat com.wsscode.pathom3.connect.runner.async$run_graph_impl_BANG_.invoke(async.cljc:613)\\n\\tat com.wsscode.pathom3.plugin$run_with_plugins.invokeStatic(plugin.cljc:146)\\n\\tat com.wsscode.pathom3.plugin$run_with_plugins.invoke(plugin.cljc:132)\\n\\tat com.wsscode.pathom3.connect.runner$run_graph_with_plugins$fn__13851.invoke(runner.cljc:1115)\\n\\tat com.wsscode.pathom3.plugin$run_with_plugins.invokeStatic(plugin.cljc:146)\\n\\tat com.wsscode.pathom3.plugin$run_with_plugins.invoke(plugin.cljc:132)\\n\\tat com.wsscode.pathom3.connect.runner$run_graph_with_plugins.invokeStatic(runner.cljc:1113)\\n\\tat com.wsscode.pathom3.connect.runner$run_graph_with_plugins.invoke(runner.cljc:1111)\\n\\tat com.wsscode.pathom3.connect.runner.async$run_graph_BANG_$fn__15298$fn__15299$fn__15300.invoke(async.cljc:641)\\n\\tat promesa.util.FunctionWrapper.apply(util.cljc:43)\\n\\tat java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1187)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2309)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:144)\\n\\tat promesa.impl$eval14454$fn__14457.invoke(impl.cljc:124)\\n\\tat promesa.protocols$eval13901$fn__13965$G__13880__13978.invoke(protocols.cljc:28)\\n\\tat com.wsscode.pathom3.connect.runner.async$run_graph_BANG_$fn__15298$fn__15299.invoke(async.cljc:640)\\n\\tat promesa.util.FunctionWrapper.apply(util.cljc:43)\\n\\tat java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1187)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2309)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:144)\\n\\tat promesa.impl$eval14454$fn__14457.invoke(impl.cljc:124)\\n\\tat promesa.protocols$eval13901$fn__13965$G__13880__13978.invoke(protocols.cljc:28)\\n\\tat com.wsscode.pathom3.connect.runner.async$run_graph_BANG_$fn__15298.invoke(async.cljc:640)\\n\\tat promesa.util.FunctionWrapper.apply(util.cljc:43)\\n\\tat java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1187)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2309)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:144)\\n\\tat promesa.impl$eval14454$fn__14457.invoke(impl.cljc:124)\\n\\tat promesa.protocols$eval13901$fn__13965$G__13880__13978.invoke(protocols.cljc:28)\\n\\tat com.wsscode.pathom3.connect.runner.async$run_graph_BANG_.invokeStatic(async.cljc:640)\\n\\tat com.wsscode.pathom3.connect.runner.async$run_graph_BANG_.invoke(async.cljc:632)\\n\\tat com.wsscode.pathom3.interface.async.eql$process_ast_STAR_$fn__15837$fn__15838.invoke(eql.cljc:22)\\n\\tat promesa.util.FunctionWrapper.apply(util.cljc:43)\\n\\tat java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1187)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2309)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:144)\\n\\tat promesa.impl$eval14454$fn__14457.invoke(impl.cljc:124)\\n\\tat promesa.protocols$eval13901$fn__13965$G__13880__13978.invoke(protocols.cljc:28)\\n\\tat com.wsscode.pathom3.interface.async.eql$process_ast_STAR_$fn__15837.invoke(eql.cljc:19)\\n\\tat promesa.util.FunctionWrapper.apply(util.cljc:43)\\n\\tat java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1187)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2309)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:144)\\n\\tat promesa.impl$eval14454$fn__14457.invoke(impl.cljc:124)\\n\\tat promesa.protocols$eval13901$fn__13965$G__13880__13978.invoke(protocols.cljc:28)\\n\\tat com.wsscode.pathom3.interface.async.eql$process_ast_STAR_.invokeStatic(eql.cljc:19)\\n\\tat com.wsscode.pathom3.interface.async.eql$process_ast_STAR_.invoke(eql.cljc:18)\\n\\tat com.wsscode.pathom3.plugin$run_with_plugins.invokeStatic(plugin.cljc:143)\\n\\tat com.wsscode.pathom3.plugin$run_with_plugins.invoke(plugin.cljc:132)\\n\\tat com.wsscode.pathom3.interface.async.eql$process_ast$fn__15846$fn__15847$fn__15848.invoke(eql.cljc:30)\\n\\tat promesa.util.FunctionWrapper.apply(util.cljc:43)\\n\\tat java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1187)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2309)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:144)\\n\\tat promesa.impl$eval14454$fn__14457.invoke(impl.cljc:124)\\n\\tat promesa.protocols$eval13901$fn__13965$G__13880__13978.invoke(protocols.cljc:28)\\n\\tat com.wsscode.pathom3.interface.async.eql$process_ast$fn__15846$fn__15847.invoke(eql.cljc:29)\\n\\tat promesa.util.FunctionWrapper.apply(util.cljc:43)\\n\\tat java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1187)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2309)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:144)\\n\\tat promesa.impl$eval14454$fn__14457.invoke(impl.cljc:124)\\n\\tat promesa.protocols$eval13901$fn__13965$G__13880__13978.invoke(protocols.cljc:28)\\n\\tat com.wsscode.pathom3.interface.async.eql$process_ast$fn__15846.invoke(eql.cljc:29)\\n\\tat promesa.util.FunctionWrapper.apply(util.cljc:43)\\n\\tat java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1187)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2309)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:144)\\n\\tat promesa.impl$eval14454$fn__14457.invoke(impl.cljc:124)\\n\\tat promesa.protocols$eval13901$fn__13965$G__13880__13978.invoke(protocols.cljc:28)\\n\\tat com.wsscode.pathom3.interface.async.eql$process_ast.invokeStatic(eql.cljc:29)\\n\\tat com.wsscode.pathom3.interface.async.eql$process_ast.invoke(eql.cljc:26)\\n\\tat com.wsscode.pathom3.interface.async.eql$process$fn__15853$fn__15854$fn__15855.invoke(eql.cljc:59)\\n\\tat promesa.util.FunctionWrapper.apply(util.cljc:43)\\n\\tat java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1187)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2309)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:144)\\n\\tat promesa.impl$eval14454$fn__14457.invoke(impl.cljc:124)\\n\\tat promesa.protocols$eval13901$fn__13965$G__13880__13978.invoke(protocols.cljc:28)\\n\\tat com.wsscode.pathom3.interface.async.eql$process$fn__15853$fn__15854.invoke(eql.cljc:58)\\n\\tat promesa.util.FunctionWrapper.apply(util.cljc:43)\\n\\tat java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1187)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2309)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:144)\\n\\tat promesa.impl$eval14454$fn__14457.invoke(impl.cljc:124)\\n\\tat promesa.protocols$eval13901$fn__13965$G__13880__13978.invoke(protocols.cljc:28)\\n\\tat com.wsscode.pathom3.interface.async.eql$process$fn__15853.invoke(eql.cljc:58)\\n\\tat promesa.util.FunctionWrapper.apply(util.cljc:43)\\n\\tat java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1187)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2309)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:144)\\n\\tat promesa.impl$eval14454$fn__14457.invoke(impl.cljc:124)\\n\\tat promesa.protocols$eval13901$fn__13965$G__13880__13978.invoke(protocols.cljc:28)\\n\\tat com.wsscode.pathom3.interface.async.eql$process.invokeStatic(eql.cljc:58)\\n\\tat com.wsscode.pathom3.interface.async.eql$process.invoke(eql.cljc:33)\\n\\tat com.nivekuil.nexus$eval146658.invokeStatic(NO_SOURCE_FILE:230)\\n\\tat com.nivekuil.nexus$eval146658.invoke(NO_SOURCE_FILE:230)\\n\\tat clojure.lang.Compiler.eval(Compiler.java:7194)\\n\\tat clojure.lang.Compiler.eval(Compiler.java:7149)\\n\\tat clojure.core$eval.invokeStatic(core.clj:3215)\\n\\tat clojure.core$eval.invoke(core.clj:3211)\\n\\tat nrepl.middleware.interruptible_eval$evaluate$fn__23592$fn__23593.invoke(interruptible_eval.clj:87)\\n\\tat clojure.lang.AFn.applyToHelper(AFn.java:152)\\n\\tat clojure.lang.AFn.applyTo(AFn.java:144)\\n\\tat clojure.core$apply.invokeStatic(core.clj:667)\\n\\tat clojure.core$with_bindings_STAR_.invokeStatic(core.clj:1990)\\n\\tat clojure.core$with_bindings_STAR_.doInvoke(core.clj:1990)\\n\\tat clojure.lang.RestFn.invoke(RestFn.java:425)\\n\\tat nrepl.middleware.interruptible_eval$evaluate$fn__23592.invoke(interruptible_eval.clj:87)\\n\\tat clojure.main$repl$read_eval_print__9206$fn__9209.invoke(main.clj:437)\\n\\tat clojure.main$repl$read_eval_print__9206.invoke(main.clj:437)\\n\\tat clojure.main$repl$fn__9215.invoke(main.clj:458)\\n\\tat clojure.main$repl.invokeStatic(main.clj:458)\\n\\tat clojure.main$repl.doInvoke(main.clj:368)\\n\\tat clojure.lang.RestFn.invoke(RestFn.java:1523)\\n\\tat nrepl.middleware.interruptible_eval$evaluate.invokeStatic(interruptible_eval.clj:84)\\n\\tat nrepl.middleware.interruptible_eval$evaluate.invoke(interruptible_eval.clj:56)\\n\\tat nrepl.middleware.interruptible_eval$interruptible_eval$fn__23625$fn__23629.invoke(interruptible_eval.clj:152)\\n\\tat clojure.lang.AFn.run(AFn.java:22)\\n\\tat nrepl.middleware.session$session_exec$main_loop__23695$fn__23699.invoke(session.clj:218)\\n\\tat nrepl.middleware.session$session_exec$main_loop__23695.invoke(session.clj:217)\\n\\tat clojure.lang.AFn.run(AFn.java:22)\\n\\tat java.base/java.lang.Thread.run(Thread.java:833)\\nCaused by: java.lang.ArithmeticException: Divide by zero\\n\\tat clojure.lang.Numbers.divide(Numbers.java:190)\\n\\tat clojure.lang.Numbers.divide(Numbers.java:3911)\\n\\tat com.nivekuil.nexus$bad__145552.invokeStatic(NO_SOURCE_FILE:228)\\n\\tat com.nivekuil.nexus$bad__145552.invoke(NO_SOURCE_FILE:227)\\n\\tat com.wsscode.pathom3.connect.operation.Resolver._resolve(operation.cljc:64)\\n\\tat com.wsscode.pathom3.connect.runner$invoke_resolver_with_plugins$fn__13498.invoke(runner.cljc:379)\\n\\tat com.wsscode.pathom3.plugin$run_with_plugins.invokeStatic(plugin.cljc:143)\\n\\tat com.wsscode.pathom3.plugin$run_with_plugins.invoke(plugin.cljc:132)\\n\\tat com.wsscode.pathom3.connect.runner$invoke_resolver_with_plugins.invokeStatic(runner.cljc:379)\\n\\tat com.wsscode.pathom3.connect.runner$invoke_resolver_with_plugins.invoke(runner.cljc:378)\\n\\tat com.wsscode.pathom3.connect.runner.async$invoke_resolver_cached$fn__14950.invoke(async.cljc:168)\\n\\tat com.wsscode.pathom3.cache$eval12569$fn__12570.invoke(cache.cljc:24)\\n\\tat com.wsscode.pathom3.cache$eval12535$fn__12536$G__12524__12545.invoke(cache.cljc:10)\\n\\tat com.wsscode.pathom3.cache$cached.invokeStatic(cache.cljc:64)\\n\\tat com.wsscode.pathom3.cache$cached.invoke(cache.cljc:45)\\n\\tat com.wsscode.pathom3.connect.runner.async$invoke_resolver_cached.invokeStatic(async.cljc:165)\\n\\tat com.wsscode.pathom3.connect.runner.async$invoke_resolver_cached.invoke(async.cljc:162)\\n\\tat com.wsscode.pathom3.connect.runner.async$invoke_resolver_from_node.invokeStatic(async.cljc:234)\\n\\t... 205 more\\n\"}, :node-done? true}, :com.wsscode.pathom3.connect.runner/nodes-with-error #{1}}, :com.wsscode.pathom3.connect.planner/index-ast {:a {:type :prop, :dispatch-key :a, :key :a}}, :com.wsscode.pathom3.connect.runner/graph-run-start-ms 1.0072404117241E7, :com.wsscode.pathom3.connect.planner/index-resolver->nodes #:com.nivekuil.nexus{bad #{1}}, :com.wsscode.pathom3.connect.planner/nodes {1 {:com.wsscode.pathom3.connect.operation/op-name com.nivekuil.nexus/bad, :com.wsscode.pathom3.connect.planner/expects {:a {}}, :com.wsscode.pathom3.connect.planner/input {}, :com.wsscode.pathom3.connect.planner/node-id 1}}}, :com.wsscode.pathom3.connect.runner/root-query [:a], :com.wsscode.pathom3.connect.indexes/index-attributes {#{} #:com.wsscode.pathom3.connect.indexes{:attr-id #{}, :attr-provides {:a #{com.nivekuil.nexus/bad}}, :attr-input-in #{com.nivekuil.nexus/bad}}, :a #:com.wsscode.pathom3.connect.indexes{:attr-id :a, :attr-reach-via {#{} #{com.nivekuil.nexus/bad}}, :attr-output-in #{com.nivekuil.nexus/bad}}}, :com.wsscode.pathom3.connect.runner/resolver-cache* #atom[{[com.nivekuil.nexus/bad {} {}] #object[java.util.concurrent.CompletableFuture 0x7d71d517 \"rejected\"]} 0xb983634], :com.wsscode.pathom3.connect.indexes/index-io {#{} {:a {}}}, :com.wsscode.pathom3.connect.runner/node-run-stats* #atom[{1 #:com.wsscode.pathom3.connect.runner{:node-run-start-ms 1.007240422799E7, :resolver-run-start-ms 1.007240424407E7, :node-error #:com.wsscode.pathom3.error{:error-message \"Resolver com.nivekuil.nexus/bad exception at path []: Divide by zero\", :error-data #:com.wsscode.pathom3.path{:path []}, :error-stack \"clojure.lang.ExceptionInfo: Resolver com.nivekuil.nexus/bad exception at path []: Divide by zero #:com.wsscode.pathom3.path{:path []}\\n\\tat com.wsscode.pathom3.connect.runner$report_resolver_error.invokeStatic(runner.cljc:447)\\n\\tat com.wsscode.pathom3.connect.runner$report_resolver_error.invoke(runner.cljc:437)\\n\\tat com.wsscode.pathom3.connect.runner.async$invoke_resolver_from_node$fn__14965.invoke(async.cljc:238)\\n\\tat promesa.impl$eval14454$fn__14467$handler__14468.invoke(impl.cljc:168)\\n\\tat promesa.util.BiFunctionWrapper.apply(util.cljc:49)\\n\\tat java.base/java.util.concurrent.CompletableFuture.uniHandle(CompletableFuture.java:934)\\n\\tat java.base/java.util.concurrent.CompletableFuture.uniHandleStage(CompletableFuture.java:950)\\n\\tat java.base/java.util.concurrent.CompletableFuture.handle(CompletableFuture.java:2340)\\n\\tat java.base/java.util.concurrent.CompletableFuture.handle(CompletableFuture.java:144)\\n\\tat promesa.impl$eval14454$fn__14467.invoke(impl.cljc:171)\\n\\tat promesa.protocols$eval13901$fn__13923$G__13888__13936.invoke(protocols.cljc:28)\\n\\tat promesa.core$catch.invokeStatic(core.cljc:242)\\n\\tat promesa.core$catch.invoke(core.cljc:238)\\n\\tat com.wsscode.pathom3.connect.runner.async$invoke_resolver_from_node.invokeStatic(async.cljc:236)\\n\\tat com.wsscode.pathom3.connect.runner.async$invoke_resolver_from_node.invoke(async.cljc:195)\\n\\tat com.wsscode.pathom3.connect.runner.async$run_resolver_node_BANG_$fn__14980$fn__14981$fn__14982.invoke(async.cljc:259)\\n\\tat promesa.util.FunctionWrapper.apply(util.cljc:43)\\n\\tat java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1187)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2309)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:144)\\n\\tat promesa.impl$eval14454$fn__14457.invoke(impl.cljc:124)\\n\\tat promesa.protocols$eval13901$fn__13965$G__13880__13978.invoke(protocols.cljc:28)\\n\\tat com.wsscode.pathom3.connect.runner.async$run_resolver_node_BANG_$fn__14980$fn__14981.invoke(async.cljc:256)\\n\\tat promesa.util.FunctionWrapper.apply(util.cljc:43)\\n\\tat java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1187)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2309)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:144)\\n\\tat promesa.impl$eval14454$fn__14457.invoke(impl.cljc:124)\\n\\tat promesa.protocols$eval13901$fn__13965$G__13880__13978.invoke(protocols.cljc:28)\\n\\tat com.wsscode.pathom3.connect.runner.async$run_resolver_node_BANG_$fn__14980.invoke(async.cljc:256)\\n\\tat promesa.util.FunctionWrapper.apply(util.cljc:43)\\n\\tat java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1187)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2309)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:144)\\n\\tat promesa.impl$eval14454$fn__14457.invoke(impl.cljc:124)\\n\\tat promesa.protocols$eval13901$fn__13965$G__13880__13978.invoke(protocols.cljc:28)\\n\\tat com.wsscode.pathom3.connect.runner.async$run_resolver_node_BANG_.invokeStatic(async.cljc:256)\\n\\tat com.wsscode.pathom3.connect.runner.async$run_resolver_node_BANG_.invoke(async.cljc:248)\\n\\tat com.wsscode.pathom3.connect.runner.async$run_node_BANG_.invokeStatic(async.cljc:365)\\n\\tat com.wsscode.pathom3.connect.runner.async$run_node_BANG_.invoke(async.cljc:354)\\n\\tat com.wsscode.pathom3.connect.runner.async$run_root_node_BANG_$fn__15143.invoke(async.cljc:442)\\n\\tat promesa.util.FunctionWrapper.apply(util.cljc:43)\\n\\tat java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1187)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2309)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:144)\\n\\tat promesa.impl$eval14454$fn__14457.invoke(impl.cljc:124)\\n\\tat promesa.protocols$eval13901$fn__13965$G__13880__13978.invoke(protocols.cljc:28)\\n\\tat com.wsscode.pathom3.connect.runner.async$run_root_node_BANG_.invokeStatic(async.cljc:442)\\n\\tat com.wsscode.pathom3.connect.runner.async$run_root_node_BANG_.invoke(async.cljc:439)\\n\\tat com.wsscode.pathom3.connect.runner.async$run_graph_BANG__STAR_$fn__15155$fn__15156$fn__15157$fn__15158.invoke(async.cljc:474)\\n\\tat promesa.util.FunctionWrapper.apply(util.cljc:43)\\n\\tat java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1187)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2309)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:144)\\n\\tat promesa.impl$eval14454$fn__14457.invoke(impl.cljc:124)\\n\\tat promesa.protocols$eval13901$fn__13965$G__13880__13978.invoke(protocols.cljc:28)\\n\\tat com.wsscode.pathom3.connect.runner.async$run_graph_BANG__STAR_$fn__15155$fn__15156$fn__15157.invoke(async.cljc:461)\\n\\tat promesa.util.FunctionWrapper.apply(util.cljc:43)\\n\\tat java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1187)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2309)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:144)\\n\\tat promesa.impl$eval14454$fn__14457.invoke(impl.cljc:124)\\n\\tat promesa.protocols$eval13901$fn__13965$G__13880__13978.invoke(protocols.cljc:28)\\n\\tat com.wsscode.pathom3.connect.runner.async$run_graph_BANG__STAR_$fn__15155$fn__15156.invoke(async.cljc:461)\\n\\tat promesa.util.FunctionWrapper.apply(util.cljc:43)\\n\\tat java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1187)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2309)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:144)\\n\\tat promesa.impl$eval14454$fn__14457.invoke(impl.cljc:124)\\n\\tat promesa.protocols$eval13901$fn__13965$G__13880__13978.invoke(protocols.cljc:28)\\n\\tat com.wsscode.pathom3.connect.runner.async$run_graph_BANG__STAR_$fn__15155.invoke(async.cljc:461)\\n\\tat promesa.util.FunctionWrapper.apply(util.cljc:43)\\n\\tat java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1187)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2309)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:144)\\n\\tat promesa.impl$eval14454$fn__14457.invoke(impl.cljc:124)\\n\\tat promesa.protocols$eval13901$fn__13965$G__13880__13978.invoke(protocols.cljc:28)\\n\\tat com.wsscode.pathom3.connect.runner.async$run_graph_BANG__STAR_.invokeStatic(async.cljc:461)\\n\\tat com.wsscode.pathom3.connect.runner.async$run_graph_BANG__STAR_.invoke(async.cljc:454)\\n\\tat com.wsscode.pathom3.connect.runner.async$plan_and_run_BANG_.invokeStatic(async.cljc:500)\\n\\tat com.wsscode.pathom3.connect.runner.async$plan_and_run_BANG_.invoke(async.cljc:478)\\n\\tat com.wsscode.pathom3.connect.runner.async$run_graph_impl_BANG_$fn__15260$fn__15261.invoke(async.cljc:616)\\n\\tat promesa.util.FunctionWrapper.apply(util.cljc:43)\\n\\tat java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1187)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2309)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:144)\\n\\tat promesa.impl$eval14454$fn__14457.invoke(impl.cljc:124)\\n\\tat promesa.protocols$eval13901$fn__13965$G__13880__13978.invoke(protocols.cljc:28)\\n\\tat com.wsscode.pathom3.connect.runner.async$run_graph_impl_BANG_$fn__15260.invoke(async.cljc:615)\\n\\tat promesa.util.FunctionWrapper.apply(util.cljc:43)\\n\\tat java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1187)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2309)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:144)\\n\\tat promesa.impl$eval14454$fn__14457.invoke(impl.cljc:124)\\n\\tat promesa.protocols$eval13901$fn__13965$G__13880__13978.invoke(protocols.cljc:28)\\n\\tat com.wsscode.pathom3.connect.runner.async$run_graph_impl_BANG_.invokeStatic(async.cljc:615)\\n\\tat com.wsscode.pathom3.connect.runner.async$run_graph_impl_BANG_.invoke(async.cljc:613)\\n\\tat com.wsscode.pathom3.plugin$run_with_plugins.invokeStatic(plugin.cljc:146)\\n\\tat com.wsscode.pathom3.plugin$run_with_plugins.invoke(plugin.cljc:132)\\n\\tat com.wsscode.pathom3.connect.runner$run_graph_with_plugins$fn__13851.invoke(runner.cljc:1115)\\n\\tat com.wsscode.pathom3.plugin$run_with_plugins.invokeStatic(plugin.cljc:146)\\n\\tat com.wsscode.pathom3.plugin$run_with_plugins.invoke(plugin.cljc:132)\\n\\tat com.wsscode.pathom3.connect.runner$run_graph_with_plugins.invokeStatic(runner.cljc:1113)\\n\\tat com.wsscode.pathom3.connect.runner$run_graph_with_plugins.invoke(runner.cljc:1111)\\n\\tat com.wsscode.pathom3.connect.runner.async$run_graph_BANG_$fn__15298$fn__15299$fn__15300.invoke(async.cljc:641)\\n\\tat promesa.util.FunctionWrapper.apply(util.cljc:43)\\n\\tat java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1187)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2309)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:144)\\n\\tat promesa.impl$eval14454$fn__14457.invoke(impl.cljc:124)\\n\\tat promesa.protocols$eval13901$fn__13965$G__13880__13978.invoke(protocols.cljc:28)\\n\\tat com.wsscode.pathom3.connect.runner.async$run_graph_BANG_$fn__15298$fn__15299.invoke(async.cljc:640)\\n\\tat promesa.util.FunctionWrapper.apply(util.cljc:43)\\n\\tat java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1187)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2309)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:144)\\n\\tat promesa.impl$eval14454$fn__14457.invoke(impl.cljc:124)\\n\\tat promesa.protocols$eval13901$fn__13965$G__13880__13978.invoke(protocols.cljc:28)\\n\\tat com.wsscode.pathom3.connect.runner.async$run_graph_BANG_$fn__15298.invoke(async.cljc:640)\\n\\tat promesa.util.FunctionWrapper.apply(util.cljc:43)\\n\\tat java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1187)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2309)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:144)\\n\\tat promesa.impl$eval14454$fn__14457.invoke(impl.cljc:124)\\n\\tat promesa.protocols$eval13901$fn__13965$G__13880__13978.invoke(protocols.cljc:28)\\n\\tat com.wsscode.pathom3.connect.runner.async$run_graph_BANG_.invokeStatic(async.cljc:640)\\n\\tat com.wsscode.pathom3.connect.runner.async$run_graph_BANG_.invoke(async.cljc:632)\\n\\tat com.wsscode.pathom3.interface.async.eql$process_ast_STAR_$fn__15837$fn__15838.invoke(eql.cljc:22)\\n\\tat promesa.util.FunctionWrapper.apply(util.cljc:43)\\n\\tat java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1187)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2309)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:144)\\n\\tat promesa.impl$eval14454$fn__14457.invoke(impl.cljc:124)\\n\\tat promesa.protocols$eval13901$fn__13965$G__13880__13978.invoke(protocols.cljc:28)\\n\\tat com.wsscode.pathom3.interface.async.eql$process_ast_STAR_$fn__15837.invoke(eql.cljc:19)\\n\\tat promesa.util.FunctionWrapper.apply(util.cljc:43)\\n\\tat java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1187)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2309)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:144)\\n\\tat promesa.impl$eval14454$fn__14457.invoke(impl.cljc:124)\\n\\tat promesa.protocols$eval13901$fn__13965$G__13880__13978.invoke(protocols.cljc:28)\\n\\tat com.wsscode.pathom3.interface.async.eql$process_ast_STAR_.invokeStatic(eql.cljc:19)\\n\\tat com.wsscode.pathom3.interface.async.eql$process_ast_STAR_.invoke(eql.cljc:18)\\n\\tat com.wsscode.pathom3.plugin$run_with_plugins.invokeStatic(plugin.cljc:143)\\n\\tat com.wsscode.pathom3.plugin$run_with_plugins.invoke(plugin.cljc:132)\\n\\tat com.wsscode.pathom3.interface.async.eql$process_ast$fn__15846$fn__15847$fn__15848.invoke(eql.cljc:30)\\n\\tat promesa.util.FunctionWrapper.apply(util.cljc:43)\\n\\tat java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1187)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2309)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:144)\\n\\tat promesa.impl$eval14454$fn__14457.invoke(impl.cljc:124)\\n\\tat promesa.protocols$eval13901$fn__13965$G__13880__13978.invoke(protocols.cljc:28)\\n\\tat com.wsscode.pathom3.interface.async.eql$process_ast$fn__15846$fn__15847.invoke(eql.cljc:29)\\n\\tat promesa.util.FunctionWrapper.apply(util.cljc:43)\\n\\tat java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1187)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2309)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:144)\\n\\tat promesa.impl$eval14454$fn__14457.invoke(impl.cljc:124)\\n\\tat promesa.protocols$eval13901$fn__13965$G__13880__13978.invoke(protocols.cljc:28)\\n\\tat com.wsscode.pathom3.interface.async.eql$process_ast$fn__15846.invoke(eql.cljc:29)\\n\\tat promesa.util.FunctionWrapper.apply(util.cljc:43)\\n\\tat java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1187)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2309)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:144)\\n\\tat promesa.impl$eval14454$fn__14457.invoke(impl.cljc:124)\\n\\tat promesa.protocols$eval13901$fn__13965$G__13880__13978.invoke(protocols.cljc:28)\\n\\tat com.wsscode.pathom3.interface.async.eql$process_ast.invokeStatic(eql.cljc:29)\\n\\tat com.wsscode.pathom3.interface.async.eql$process_ast.invoke(eql.cljc:26)\\n\\tat com.wsscode.pathom3.interface.async.eql$process$fn__15853$fn__15854$fn__15855.invoke(eql.cljc:59)\\n\\tat promesa.util.FunctionWrapper.apply(util.cljc:43)\\n\\tat java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1187)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2309)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:144)\\n\\tat promesa.impl$eval14454$fn__14457.invoke(impl.cljc:124)\\n\\tat promesa.protocols$eval13901$fn__13965$G__13880__13978.invoke(protocols.cljc:28)\\n\\tat com.wsscode.pathom3.interface.async.eql$process$fn__15853$fn__15854.invoke(eql.cljc:58)\\n\\tat promesa.util.FunctionWrapper.apply(util.cljc:43)\\n\\tat java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1187)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2309)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:144)\\n\\tat promesa.impl$eval14454$fn__14457.invoke(impl.cljc:124)\\n\\tat promesa.protocols$eval13901$fn__13965$G__13880__13978.invoke(protocols.cljc:28)\\n\\tat com.wsscode.pathom3.interface.async.eql$process$fn__15853.invoke(eql.cljc:58)\\n\\tat promesa.util.FunctionWrapper.apply(util.cljc:43)\\n\\tat java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1187)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2309)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:144)\\n\\tat promesa.impl$eval14454$fn__14457.invoke(impl.cljc:124)\\n\\tat promesa.protocols$eval13901$fn__13965$G__13880__13978.invoke(protocols.cljc:28)\\n\\tat com.wsscode.pathom3.interface.async.eql$process.invokeStatic(eql.cljc:58)\\n\\tat com.wsscode.pathom3.interface.async.eql$process.invoke(eql.cljc:33)\\n\\tat com.nivekuil.nexus$eval146658.invokeStatic(NO_SOURCE_FILE:230)\\n\\tat com.nivekuil.nexus$eval146658.invoke(NO_SOURCE_FILE:230)\\n\\tat clojure.lang.Compiler.eval(Compiler.java:7194)\\n\\tat clojure.lang.Compiler.eval(Compiler.java:7149)\\n\\tat clojure.core$eval.invokeStatic(core.clj:3215)\\n\\tat clojure.core$eval.invoke(core.clj:3211)\\n\\tat nrepl.middleware.interruptible_eval$evaluate$fn__23592$fn__23593.invoke(interruptible_eval.clj:87)\\n\\tat clojure.lang.AFn.applyToHelper(AFn.java:152)\\n\\tat clojure.lang.AFn.applyTo(AFn.java:144)\\n\\tat clojure.core$apply.invokeStatic(core.clj:667)\\n\\tat clojure.core$with_bindings_STAR_.invokeStatic(core.clj:1990)\\n\\tat clojure.core$with_bindings_STAR_.doInvoke(core.clj:1990)\\n\\tat clojure.lang.RestFn.invoke(RestFn.java:425)\\n\\tat nrepl.middleware.interruptible_eval$evaluate$fn__23592.invoke(interruptible_eval.clj:87)\\n\\tat clojure.main$repl$read_eval_print__9206$fn__9209.invoke(main.clj:437)\\n\\tat clojure.main$repl$read_eval_print__9206.invoke(main.clj:437)\\n\\tat clojure.main$repl$fn__9215.invoke(main.clj:458)\\n\\tat clojure.main$repl.invokeStatic(main.clj:458)\\n\\tat clojure.main$repl.doInvoke(main.clj:368)\\n\\tat clojure.lang.RestFn.invoke(RestFn.java:1523)\\n\\tat nrepl.middleware.interruptible_eval$evaluate.invokeStatic(interruptible_eval.clj:84)\\n\\tat nrepl.middleware.interruptible_eval$evaluate.invoke(interruptible_eval.clj:56)\\n\\tat nrepl.middleware.interruptible_eval$interruptible_eval$fn__23625$fn__23629.invoke(interruptible_eval.clj:152)\\n\\tat clojure.lang.AFn.run(AFn.java:22)\\n\\tat nrepl.middleware.session$session_exec$main_loop__23695$fn__23699.invoke(session.clj:218)\\n\\tat nrepl.middleware.session$session_exec$main_loop__23695.invoke(session.clj:217)\\n\\tat clojure.lang.AFn.run(AFn.java:22)\\n\\tat java.base/java.lang.Thread.run(Thread.java:833)\\nCaused by: java.lang.ArithmeticException: Divide by zero\\n\\tat clojure.lang.Numbers.divide(Numbers.java:190)\\n\\tat clojure.lang.Numbers.divide(Numbers.java:3911)\\n\\tat com.nivekuil.nexus$bad__145552.invokeStatic(NO_SOURCE_FILE:228)\\n\\tat com.nivekuil.nexus$bad__145552.invoke(NO_SOURCE_FILE:227)\\n\\tat com.wsscode.pathom3.connect.operation.Resolver._resolve(operation.cljc:64)\\n\\tat com.wsscode.pathom3.connect.runner$invoke_resolver_with_plugins$fn__13498.invoke(runner.cljc:379)\\n\\tat com.wsscode.pathom3.plugin$run_with_plugins.invokeStatic(plugin.cljc:143)\\n\\tat com.wsscode.pathom3.plugin$run_with_plugins.invoke(plugin.cljc:132)\\n\\tat com.wsscode.pathom3.connect.runner$invoke_resolver_with_plugins.invokeStatic(runner.cljc:379)\\n\\tat com.wsscode.pathom3.connect.runner$invoke_resolver_with_plugins.invoke(runner.cljc:378)\\n\\tat com.wsscode.pathom3.connect.runner.async$invoke_resolver_cached$fn__14950.invoke(async.cljc:168)\\n\\tat com.wsscode.pathom3.cache$eval12569$fn__12570.invoke(cache.cljc:24)\\n\\tat com.wsscode.pathom3.cache$eval12535$fn__12536$G__12524__12545.invoke(cache.cljc:10)\\n\\tat com.wsscode.pathom3.cache$cached.invokeStatic(cache.cljc:64)\\n\\tat com.wsscode.pathom3.cache$cached.invoke(cache.cljc:45)\\n\\tat com.wsscode.pathom3.connect.runner.async$invoke_resolver_cached.invokeStatic(async.cljc:165)\\n\\tat com.wsscode.pathom3.connect.runner.async$invoke_resolver_cached.invoke(async.cljc:162)\\n\\tat com.wsscode.pathom3.connect.runner.async$invoke_resolver_from_node.invokeStatic(async.cljc:234)\\n\\t... 205 more\\n\"}, :node-done? true}, :com.wsscode.pathom3.connect.runner/nodes-with-error #{1}} 0x65804aa0], :com.wsscode.pathom3.path/path [], :com.wsscode.pathom3.connect.planner/plan-cache* #atom[{[-796332415 {} {:type :root, :children [{:type :prop, :dispatch-key :a, :key :a}]} true] #:com.wsscode.pathom3.connect.planner{:nodes {1 {:com.wsscode.pathom3.connect.operation/op-name com.nivekuil.nexus/bad, :com.wsscode.pathom3.connect.planner/expects {:a {}}, :com.wsscode.pathom3.connect.planner/input {}, :com.wsscode.pathom3.connect.planner/node-id 1}}, :index-ast {:a {:type :prop, :dispatch-key :a, :key :a}}, :source-ast {:type :root, :children [{:type :prop, :dispatch-key :a, :key :a}]}, :available-data {}, :user-request-shape {:a {}}, :index-resolver->nodes #:com.nivekuil.nexus{bad #{1}}, :index-attrs {:a #{1}}, :root 1}} 0x205bc6da], :com.wsscode.pathom3.error/error-message \"Resolver com.nivekuil.nexus/bad exception at path []: Divide by zero\", :com.wsscode.pathom3.connect.runner/graph-run-start-ms 1.0072404117241E7, :com.wsscode.pathom3.entity-tree/entity-tree {}, :com.wsscode.pathom3.error/error-stack \"clojure.lang.ExceptionInfo: Resolver com.nivekuil.nexus/bad exception at path []: Divide by zero #:com.wsscode.pathom3.path{:path []}\\n\\tat com.wsscode.pathom3.connect.runner$report_resolver_error.invokeStatic(runner.cljc:447)\\n\\tat com.wsscode.pathom3.connect.runner$report_resolver_error.invoke(runner.cljc:437)\\n\\tat com.wsscode.pathom3.connect.runner.async$invoke_resolver_from_node$fn__14965.invoke(async.cljc:238)\\n\\tat promesa.impl$eval14454$fn__14467$handler__14468.invoke(impl.cljc:168)\\n\\tat promesa.util.BiFunctionWrapper.apply(util.cljc:49)\\n\\tat java.base/java.util.concurrent.CompletableFuture.uniHandle(CompletableFuture.java:934)\\n\\tat java.base/java.util.concurrent.CompletableFuture.uniHandleStage(CompletableFuture.java:950)\\n\\tat java.base/java.util.concurrent.CompletableFuture.handle(CompletableFuture.java:2340)\\n\\tat java.base/java.util.concurrent.CompletableFuture.handle(CompletableFuture.java:144)\\n\\tat promesa.impl$eval14454$fn__14467.invoke(impl.cljc:171)\\n\\tat promesa.protocols$eval13901$fn__13923$G__13888__13936.invoke(protocols.cljc:28)\\n\\tat promesa.core$catch.invokeStatic(core.cljc:242)\\n\\tat promesa.core$catch.invoke(core.cljc:238)\\n\\tat com.wsscode.pathom3.connect.runner.async$invoke_resolver_from_node.invokeStatic(async.cljc:236)\\n\\tat com.wsscode.pathom3.connect.runner.async$invoke_resolver_from_node.invoke(async.cljc:195)\\n\\tat com.wsscode.pathom3.connect.runner.async$run_resolver_node_BANG_$fn__14980$fn__14981$fn__14982.invoke(async.cljc:259)\\n\\tat promesa.util.FunctionWrapper.apply(util.cljc:43)\\n\\tat java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1187)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2309)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:144)\\n\\tat promesa.impl$eval14454$fn__14457.invoke(impl.cljc:124)\\n\\tat promesa.protocols$eval13901$fn__13965$G__13880__13978.invoke(protocols.cljc:28)\\n\\tat com.wsscode.pathom3.connect.runner.async$run_resolver_node_BANG_$fn__14980$fn__14981.invoke(async.cljc:256)\\n\\tat promesa.util.FunctionWrapper.apply(util.cljc:43)\\n\\tat java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1187)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2309)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:144)\\n\\tat promesa.impl$eval14454$fn__14457.invoke(impl.cljc:124)\\n\\tat promesa.protocols$eval13901$fn__13965$G__13880__13978.invoke(protocols.cljc:28)\\n\\tat com.wsscode.pathom3.connect.runner.async$run_resolver_node_BANG_$fn__14980.invoke(async.cljc:256)\\n\\tat promesa.util.FunctionWrapper.apply(util.cljc:43)\\n\\tat java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1187)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2309)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:144)\\n\\tat promesa.impl$eval14454$fn__14457.invoke(impl.cljc:124)\\n\\tat promesa.protocols$eval13901$fn__13965$G__13880__13978.invoke(protocols.cljc:28)\\n\\tat com.wsscode.pathom3.connect.runner.async$run_resolver_node_BANG_.invokeStatic(async.cljc:256)\\n\\tat com.wsscode.pathom3.connect.runner.async$run_resolver_node_BANG_.invoke(async.cljc:248)\\n\\tat com.wsscode.pathom3.connect.runner.async$run_node_BANG_.invokeStatic(async.cljc:365)\\n\\tat com.wsscode.pathom3.connect.runner.async$run_node_BANG_.invoke(async.cljc:354)\\n\\tat com.wsscode.pathom3.connect.runner.async$run_root_node_BANG_$fn__15143.invoke(async.cljc:442)\\n\\tat promesa.util.FunctionWrapper.apply(util.cljc:43)\\n\\tat java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1187)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2309)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:144)\\n\\tat promesa.impl$eval14454$fn__14457.invoke(impl.cljc:124)\\n\\tat promesa.protocols$eval13901$fn__13965$G__13880__13978.invoke(protocols.cljc:28)\\n\\tat com.wsscode.pathom3.connect.runner.async$run_root_node_BANG_.invokeStatic(async.cljc:442)\\n\\tat com.wsscode.pathom3.connect.runner.async$run_root_node_BANG_.invoke(async.cljc:439)\\n\\tat com.wsscode.pathom3.connect.runner.async$run_graph_BANG__STAR_$fn__15155$fn__15156$fn__15157$fn__15158.invoke(async.cljc:474)\\n\\tat promesa.util.FunctionWrapper.apply(util.cljc:43)\\n\\tat java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1187)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2309)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:144)\\n\\tat promesa.impl$eval14454$fn__14457.invoke(impl.cljc:124)\\n\\tat promesa.protocols$eval13901$fn__13965$G__13880__13978.invoke(protocols.cljc:28)\\n\\tat com.wsscode.pathom3.connect.runner.async$run_graph_BANG__STAR_$fn__15155$fn__15156$fn__15157.invoke(async.cljc:461)\\n\\tat promesa.util.FunctionWrapper.apply(util.cljc:43)\\n\\tat java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1187)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2309)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:144)\\n\\tat promesa.impl$eval14454$fn__14457.invoke(impl.cljc:124)\\n\\tat promesa.protocols$eval13901$fn__13965$G__13880__13978.invoke(protocols.cljc:28)\\n\\tat com.wsscode.pathom3.connect.runner.async$run_graph_BANG__STAR_$fn__15155$fn__15156.invoke(async.cljc:461)\\n\\tat promesa.util.FunctionWrapper.apply(util.cljc:43)\\n\\tat java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1187)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2309)\\n\\tat java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:144)\\n\\tat promesa.impl$eval14454$fn__14457.invoke(impl.cljc:124)\\n\\tat promesa.protocols$eval13901$fn__13965$G__13880__13978.invoke(protocols.cljc:28)\\n\\tat com.wsscode.pathom3.connect.runner.async$run_graph_BANG__STAR_$fn__15155.invoke(async.cljc:461)\\n\\tat "
@souenzzo
Copy link
Contributor

souenzzo commented Jun 11, 2022

p.a.eql/process returns CompletableFuture, that extends Future
when we call deref a Future, it calls Future#get, that in CompletableFuture implementation calls reportGet.

https://github.com/openjdk/jdk17/blob/jdk-17+35/src/java.base/share/classes/java/util/concurrent/CompletableFuture.java#L396

reportGet in exceptional cases calls ExecutionException constructor, that is implemented at Throwable. It calls .toString in the exception to create the message.

https://github.com/openjdk/jdk17/blob/jdk-17+35/src/java.base/share/classes/java/lang/Throwable.java#L317

Seems to be a bad default from the JDK.

It means, that this ex-info will always be called with .toString.

https://github.com/wilkerlucio/pathom3/blob/main/src/main/com/wsscode/pathom3/connect/runner.cljc#L886

A possible path to solve it:

swap this ex-info with a reify IExceptionInfo and make its Object#toString impl returns just the ex-message.

@souenzzo
Copy link
Contributor

souenzzo commented Jun 11, 2022

Impl:

souenzzo@8aae86f

op before after
(count msg) 67571 121

@wilkerlucio
Copy link
Owner

Hello @nivekuil , what editor do you use? I have received reports on that for people using Emacs, because cider made a decision to always print the full ex-data, is this the same case or something else?

@nivekuil
Copy link
Author

same case, it's still a little laggy with the huge error buffer but substantially better with souenzzo's patch.

@wilkerlucio
Copy link
Owner

@nivekuil you think this still an issue after @souenzzo patch?

@nivekuil
Copy link
Author

nivekuil commented Jun 22, 2022

I think having env in ex-data is still generally problematic because you have to be explicitly remove it when serializing exceptions for logging for example, or else it's just too big. I tried logging a raw exception and it took my 6700k several minutes to serialize one Pathom exception. Fixing ex-message has at least made editor usage bearable again in my testing so far.

@wilkerlucio
Copy link
Owner

I'm considering adding an option to elide it, the thing is, the reason env is there is to provide full information during error recovery because what should be done might be very different depending on the scenario.

@nivekuil
Copy link
Author

Have you had many concrete needs for env in debugging? I think it could work as part of a verbose/debug option as part of a query/env

@aiba
Copy link

aiba commented Jan 31, 2023

Would love to have the option to elide putting the entire env in the ex-data of the exception, or at least put env under one key, e.g. {:pathom/env <giant env here>}, so I can easily dissoc it when printing a given ExceptionInfo instance.

@wilkerlucio
Copy link
Owner

@aiba in what scenario you see env as the root of ex-data? it shouldn't be as top level anywhere, can you make a repro?

@aiba
Copy link

aiba commented Feb 10, 2023

Sure, maybe this makes it more clear:

(def temperatures
  {"Recife" 23})

(pco/defresolver temperature-from-city [{:keys [city]}]
  (throw (ex-info "An intentional error" {:a 1 :b 2}))
  {:temperature (get temperatures city)})

(def env (merge (pci/register [temperature-from-city])
                {:my-stuff/other-env-key "stuff"}))

(try
  (p.eql/process env {:city "Recife"} [:temperature])
  (catch Exception ex
    (keys (ex-data ex))))

when the resolver throws an exception, the caller to process catches an ExceptionInfo whoese data contains all of these keys:

:com.wsscode.pathom3.connect.runner/processor-error?
:com.wsscode.pathom3.connect.runner/batch-pending*
:com.wsscode.pathom3.connect.indexes/index-oir
:com.wsscode.pathom3.connect.indexes/index-resolvers
:com.wsscode.pathom3.error/error-data
:com.wsscode.pathom3.entity-tree/entity-tree*
:com.wsscode.pathom3.connect.runner/batch-waiting*
:com.wsscode.pathom3.connect.planner/graph
:com.wsscode.pathom3.connect.runner/root-query
:com.wsscode.pathom3.connect.indexes/index-attributes
:com.wsscode.pathom3.connect.runner/resolver-cache*
:com.wsscode.pathom3.connect.indexes/index-io
:com.wsscode.pathom3.connect.runner/node-run-stats*
:com.wsscode.pathom3.path/path
:com.wsscode.pathom3.connect.planner/plan-cache*
:com.wsscode.pathom3.error/error-message
:com.wsscode.pathom3.connect.runner/graph-run-start-ms
:com.wsscode.pathom3.entity-tree/entity-tree
:com.wsscode.pathom3.error/error-stack)
:my-stuff/other-env-key

And this is super cumbersome to log to the console because of all the keys, many of which have values that are themeslves deeply nested maps with many keys.

@aiba
Copy link

aiba commented Feb 10, 2023

My current workaround is to wrap process and ditch the ex-data

(defn update-ex-data [^ExceptionInfo ex, f]
  (let [^Throwable t (ex-info (.getMessage ex)
                              (f (ex-data ex))
                              (when-let [cause (.getCause ex)]
                                (update-ex-data cause f)))]
    (.setStackTrace t (.getStackTrace ex))
    t))

(defn process [env & args]
  (try
    (apply p.eql/process env args)
    (catch ExceptionInfo ex
      (throw (update-ex-data ex (fn [data]
                                  ;; ditch all the ex-data for now
                                  {}))))))

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants