I'm getting the following error in the transactor when trying to transact some data using a transaction function. It only happens for a specific query and set of data.
I'm not sure about the correct place to report errors like this, so feel free to direct me to another place if this is not the correct place.
Also let me know if you need any other information.
I am using datomic version 1.0.7075, peer and transactor have the same version.
I'm using JDK 21, Temurin (datomic transactor is running inside clojure:temurin-21-tools-deps-alpine
docker container)
taskfeed-datomic | java.lang.IllegalStateException: Can't set!: *io-index* from non-binding thread
taskfeed-datomic | at clojure.lang.Var.set(Var.java:223)
taskfeed-datomic | at datomic.measure.io_stats$using_index_BANG_.invokeStatic(io_stats.clj:57)
taskfeed-datomic | at datomic.measure.io_stats$using_index_BANG_.invoke(io_stats.clj:54)
taskfeed-datomic | at datomic.index.Index.seek(index.clj:553)
taskfeed-datomic | at datomic.btset$seek.invokeStatic(btset.clj:399)
taskfeed-datomic | at datomic.btset$seek.invoke(btset.clj:394)
taskfeed-datomic | at datomic.db.Db.seekEAVT(db.clj:2410)
taskfeed-datomic | at datomic.query$eav.invokeStatic(query.clj:78)
taskfeed-datomic | at datomic.query$eav.invoke(query.clj:69)
taskfeed-datomic | at datomic.query.EntityMap.valAt(query.clj:213) taskfeed-datomic | at datomic.query.EntityMap.entryAt(query.clj:199) taskfeed-datomic | at clojure.lang.RT.find(RT.java:860)
taskfeed-datomic | at clojure.core$select_keys.invokeStatic(core.clj:1562)
taskfeed-datomic | at clojure.core$select_keys.invoke(core.clj:1555)
taskfeed-datomic | at ns_272$eval273$fn__274$fn__275$fn__276.invoke(NO_SOURCE_FILE:143)
taskfeed-datomic | at clojure.walk$prewalk.invokeStatic(walk.clj:65)
taskfeed-datomic | at clojure.walk$prewalk.invoke(walk.clj:61)
taskfeed-datomic | at clojure.core$partial$fn__5908.invoke(core.clj:2641)
taskfeed-datomic | at clojure.core$map$fn__5935.invoke(core.clj:2770)
taskfeed-datomic | at clojure.lang.LazySeq.sval(LazySeq.java:42)
taskfeed-datomic | at clojure.lang.LazySeq.seq(LazySeq.java:51)
taskfeed-datomic | at clojure.lang.RT.seq(RT.java:535)
taskfeed-datomic | at clojure.core$seq__5467.invokeStatic(core.clj:139)
taskfeed-datomic | at clojure.core.protocols$seq_reduce.invokeStatic(protocols.clj:24)
taskfeed-datomic | at clojure.core.protocols$fn__8236.invokeStatic(protocols.clj:75)
taskfeed-datomic | at clojure.core.protocols$fn__8236.invoke(protocols.clj:75)
taskfeed-datomic | at clojure.core.protocols$fn__8178$G__8173__8191.invoke(protocols.clj:13)
taskfeed-datomic | at clojure.core$reduce.invokeStatic(core.clj:6886)
taskfeed-datomic | at clojure.core$into.invokeStatic(core.clj:6958)
taskfeed-datomic | at clojure.walk$walk.invokeStatic(walk.clj:50)
taskfeed-datomic | at clojure.walk$prewalk.invokeStatic(walk.clj:65)
taskfeed-datomic | at clojure.walk$prewalk.invoke(walk.clj:61)
taskfeed-datomic | at clojure.core$partial$fn__5908.invoke(core.clj:2641)
taskfeed-datomic | at clojure.core$map$fn__5935.invoke(core.clj:2772)
taskfeed-datomic | at clojure.lang.LazySeq.sval(LazySeq.java:42)
taskfeed-datomic | at clojure.lang.LazySeq.seq(LazySeq.java:51)
taskfeed-datomic | at clojure.lang.Cons.next(Cons.java:39)
taskfeed-datomic | at clojure.lang.RT.next(RT.java:713) taskfeed-datomic | at clojure.core$next__5451.invokeStatic(core.clj:64)
taskfeed-datomic | at clojure.core.protocols$fn__8249.invokeStatic(protocols.clj:169)
taskfeed-datomic | at clojure.core.protocols$fn__8249.invoke(protocols.clj:124)
taskfeed-datomic | at clojure.core.protocols$fn__8204$G__8199__8213.invoke(protocols.clj:19)
taskfeed-datomic | at clojure.core.protocols$seq_reduce.invokeStatic(protocols.clj:31)
taskfeed-datomic | at clojure.core.protocols$fn__8236.invokeStatic(protocols.clj:75)
taskfeed-datomic | at clojure.core.protocols$fn__8236.invoke(protocols.clj:75)
taskfeed-datomic | at clojure.core.protocols$fn__8178$G__8173__8191.invoke(protocols.clj:13)
taskfeed-datomic | at clojure.core.protocols$fn__8236.invoke(protocols.clj:75) [3165/9184]
taskfeed-datomic | at clojure.core.protocols$fn__8178$G__8173__8191.invoke(protocols.clj:13)
taskfeed-datomic | at clojure.core$reduce.invokeStatic(core.clj:6886)
taskfeed-datomic | at clojure.core$into.invokeStatic(core.clj:6958)
taskfeed-datomic | at clojure.walk$walk.invokeStatic(walk.clj:50)
taskfeed-datomic | at clojure.walk$prewalk.invokeStatic(walk.clj:65)
taskfeed-datomic | at clojure.walk$prewalk.invoke(walk.clj:61)
taskfeed-datomic | at ns_272$eval273$fn__274$fn__275.invoke(NO_SOURCE_FILE:93)
taskfeed-datomic | at clojure.core$pmap$fn__8552$fn__8553.invoke(core.clj:7089)
taskfeed-datomic | at clojure.core$binding_conveyor_fn$fn__5823.invoke(core.clj:2047)
taskfeed-datomic | at clojure.lang.AFn.call(AFn.java:18)
taskfeed-datomic | at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
taskfeed-datomic | at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
taskfeed-datomic | at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
taskfeed-datomic | at java.base/java.lang.Thread.run(Thread.java:1583)
On the client side, I get the following error:
taskfeed-1 | 01:09:47 [clojure-agent-send-off-pool-21] WARN datomic.connector - {:message "error executing future", :pid 1, :tid 97} { }
taskfeed-1 | java.lang.ClassCastException: class java.lang.String cannot be cast to class java.lang.Throwable (java.lang.String and java.lang.Throwable are in module java.base of loader 'bootstrap'
)
taskfeed-1 | at user$eval172500$fn__172501.invoke(NO_SOURCE_FILE)
taskfeed-1 | at datomic.error$deserialize_exception.invokeStatic(error.clj:178)
taskfeed-1 | at datomic.error$deserialize_exception.invoke(error.clj:160)
taskfeed-1 | at datomic.peer.Connection.notify_error(peer.clj:388)
taskfeed-1 | at datomic.connector$fn__16648.invokeStatic(connector.clj:154)
taskfeed-1 | at datomic.connector$fn__16648.invoke(connector.clj:152)
taskfeed-1 | at clojure.lang.MultiFn.invoke(MultiFn.java:234)
taskfeed-1 | at datomic.connector$create_hornet_notifier$fn__16654$fn__16655$fn__16659$fn__16660.invoke(connector.clj:178)
taskfeed-1 | at datomic.connector$create_hornet_notifier$fn__16654$fn__16655$fn__16659.invoke(connector.clj:173)
taskfeed-1 | at datomic.connector$create_hornet_notifier$fn__16654$fn__16655.invoke(connector.clj:171)
taskfeed-1 | at clojure.core$binding_conveyor_fn$fn__5823.invoke(core.clj:2047)
taskfeed-1 | at clojure.lang.AFn.call(AFn.java:18)
taskfeed-1 | at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
taskfeed-1 | at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
taskfeed-1 | at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
taskfeed-1 | at java.base/java.lang.Thread.run(Thread.java:1583)
And then a few seconds later, it throws the following error:
taskfeed-1 | Caused by: :db.error/transaction-timeout Transaction timed out.
taskfeed-1 | clojure.lang.ExceptionInfo: :db.error/transaction-timeout Transaction timed out. taskfeed-1 | #:db{:error :db.error/transaction-timeout}
taskfeed-1 | at datomic.error$raise.invokeStatic (error.clj:70)
taskfeed-1 | datomic.error$raise.invoke (error.clj:58)
taskfeed-1 | datomic.error$raise.invokeStatic (error.clj:68)
taskfeed-1 | datomic.error$raise.invoke (error.clj:58)
taskfeed-1 | datomic.peer$await_tx_result.invokeStatic (peer.clj:79)
taskfeed-1 | datomic.peer$await_tx_result.invoke (peer.clj:70)
taskfeed-1 | datomic.peer.Connection.transact (peer.clj:315)
taskfeed-1 | datomic.api$transact.invokeStatic (api.clj:107)
taskfeed-1 | datomic.api$transact.doInvoke (api.clj:105)