Skip to content

Instantly share code, notes, and snippets.

@Ramblurr
Last active April 20, 2025 13:24
Show Gist options
  • Save Ramblurr/cb0e575a76870c626181b0a17e0ea2d8 to your computer and use it in GitHub Desktop.
Save Ramblurr/cb0e575a76870c626181b0a17e0ea2d8 to your computer and use it in GitHub Desktop.
Inaccessible `(ex-data ..)` in datahike exceptions
2025-04-20T13:18:30.410Z quine DEBUG [datahike.connector:149] - Using config {:keep-history? true, :search-cache-size 10000, :index :datahike.index/persistent-set, :store {:path "/tmp/example", :scope "127.0.0.2", :backend :file}, :store-cache-size 1000, :attribute-refs? false, :writer {:backend :self}, :crypto-hash? false, :schema-flexibility :write, :branch :db}
2025-04-20T13:18:30.423Z quine DEBUG [datahike.writing:296] - Transacting 1 objects
2025-04-20T13:18:30.454Z quine DEBUG [datahike.writing:296] - Transacting 1 objects
2025-04-20T13:18:30.476Z quine DEBUG [datahike.writing:296] - Transacting 1 objects
2025-04-20T13:18:30.476Z quine ERROR [datahike.db.transaction:231] - Cannot add #datahike/Datom [3 :name "Alice" 536870915 true] because of unique constraint: #datahike/Datom [2 :name "Alice" 536870914 true] {:error :transact/unique, :attribute :name, :datom #datahike/Datom [3 :name "Alice" 536870915 true]}
2025-04-20T13:18:30.478Z quine ERROR [datahike.writer:73] - Error during invocation {:op transact!, :args [{:tx-data [{:name "Alice"}]}], :callback #object[clojure.core.async.impl.channels.ManyToManyChannel 0x429f355b "clojure.core.async.impl.channels.ManyToManyChannel@429f355b"]} #error {
:cause "Cannot add #datahike/Datom [3 :name \"Alice\" 536870915 true] because of unique constraint: #datahike/Datom [2 :name \"Alice\" 536870914 true]"
:data {:error :transact/unique, :attribute :name, :datom #datahike/Datom [3 :name "Alice" 536870915 true]}
:via
[{:type clojure.lang.ExceptionInfo
:message "Cannot add #datahike/Datom [3 :name \"Alice\" 536870915 true] because of unique constraint: #datahike/Datom [2 :name \"Alice\" 536870914 true]"
:data {:error :transact/unique, :attribute :name, :datom #datahike/Datom [3 :name "Alice" 536870915 true]}
:at [datahike.db.transaction$validate_datom_upsert invokeStatic "transaction.cljc" 231]}]
:trace
[[datahike.db.transaction$validate_datom_upsert invokeStatic "transaction.cljc" 231]
[datahike.db.transaction$validate_datom_upsert invoke "transaction.cljc" 227]
[datahike.db.transaction$with_datom_upsert invokeStatic "transaction.cljc" 237]
[datahike.db.transaction$with_datom_upsert invoke "transaction.cljc" 236]
[clojure.lang.AFn applyToHelper "AFn.java" 156]
[clojure.lang.AFn applyTo "AFn.java" 144]
[clojure.core$apply invokeStatic "core.clj" 669]
[clojure.core$update_in$up__6945 invoke "core.clj" 6248]
[clojure.core$update_in invokeStatic "core.clj" 6249]
[clojure.core$update_in doInvoke "core.clj" 6235]
[clojure.lang.RestFn invoke "RestFn.java" 470]
[datahike.db.transaction$transact_report invokeStatic "transaction.cljc" 276]
[datahike.db.transaction$transact_report invoke "transaction.cljc" 269]
[datahike.db.transaction$transact_add invokeStatic "transaction.cljc" 409]
[datahike.db.transaction$transact_add invoke "transaction.cljc" 398]
[datahike.db.transaction$apply_db_op invokeStatic "transaction.cljc" 634]
[datahike.db.transaction$apply_db_op invoke "transaction.cljc" 630]
[datahike.db.transaction$transact_tx_data invokeStatic "transaction.cljc" 819]
[datahike.db.transaction$transact_tx_data invoke "transaction.cljc" 746]
[datahike.core$with invokeStatic "core.cljc" 133]
[datahike.core$with invoke "core.cljc" 126]
[datahike.writing$transact_BANG_ invokeStatic "writing.cljc" 298]
[datahike.writing$transact_BANG_ invoke "writing.cljc" 295]
[clojure.lang.AFn applyToHelper "AFn.java" 156]
[clojure.lang.AFn applyTo "AFn.java" 144]
[clojure.core$apply invokeStatic "core.clj" 669]
[clojure.core$apply invoke "core.clj" 662]
[datahike.writer$create_thread$fn__41384$fn__41758$state_machine__6885__auto____41785$fn__41788 invoke "writer.cljc" 51]
[datahike.writer$create_thread$fn__41384$fn__41758$state_machine__6885__auto____41785 invoke "writer.cljc" 51]
[clojure.core.async.impl.ioc_macros$run_state_machine invokeStatic "ioc_macros.clj" 58]
[clojure.core.async.impl.ioc_macros$run_state_machine invoke "ioc_macros.clj" 57]
[clojure.core.async.impl.ioc_macros$run_state_machine_wrapped invokeStatic "ioc_macros.clj" 62]
[clojure.core.async.impl.ioc_macros$run_state_machine_wrapped invoke "ioc_macros.clj" 60]
[clojure.core.async.impl.ioc_macros$take_BANG_$fn__946 invoke "ioc_macros.clj" 71]
[clojure.core.async.impl.channels$appm$fn__730 invoke "channels.clj" 36]
[clojure.lang.AFn run "AFn.java" 22]
[java.util.concurrent.ThreadPoolExecutor runWorker "ThreadPoolExecutor.java" 1144]
[java.util.concurrent.ThreadPoolExecutor$Worker run "ThreadPoolExecutor.java" 642]
[clojure.core.async.impl.concurrent$counted_thread_factory$reify__621$fn__622 invoke "concurrent.clj" 29]
[clojure.lang.AFn run "AFn.java" 22]
[java.lang.Thread run "Thread.java" 1583]]} [{:tx-data [{:name "Alice"}]}]
---- EX
#error {
:cause "Cannot add #datahike/Datom [3 :name \"Alice\" 536870915 true] because of unique constraint: #datahike/Datom [2 :name \"Alice\" 536870914 true]"
:data {:error :transact/unique, :attribute :name, :datom #datahike/Datom [3 :name "Alice" 536870915 true]}
:via
[{:type clojure.lang.ExceptionInfo
:message "clojure.lang.ExceptionInfo: Cannot add #datahike/Datom [3 :name \"Alice\" 536870915 true] because of unique constraint: #datahike/Datom [2 :name \"Alice\" 536870914 true] {:error :transact/unique, :attribute :name, :datom #datahike/Datom [3 :name \"Alice\" 536870915 true]}"
:data {}
:at [superv.async$throw_if_exception_ invokeStatic "async.cljc" 93]}
{:type java.util.concurrent.ExecutionException
:message "clojure.lang.ExceptionInfo: Cannot add #datahike/Datom [3 :name \"Alice\" 536870915 true] because of unique constraint: #datahike/Datom [2 :name \"Alice\" 536870914 true] {:error :transact/unique, :attribute :name, :datom #datahike/Datom [3 :name \"Alice\" 536870915 true]}"
:at [java.util.concurrent.CompletableFuture reportGet "CompletableFuture.java" 396]}
{:type clojure.lang.ExceptionInfo
:message "Cannot add #datahike/Datom [3 :name \"Alice\" 536870915 true] because of unique constraint: #datahike/Datom [2 :name \"Alice\" 536870914 true]"
:data {:error :transact/unique, :attribute :name, :datom #datahike/Datom [3 :name "Alice" 536870915 true]}
:at [datahike.db.transaction$validate_datom_upsert invokeStatic "transaction.cljc" 231]}]
:trace
[[datahike.db.transaction$validate_datom_upsert invokeStatic "transaction.cljc" 231]
[datahike.db.transaction$validate_datom_upsert invoke "transaction.cljc" 227]
[datahike.db.transaction$with_datom_upsert invokeStatic "transaction.cljc" 237]
[datahike.db.transaction$with_datom_upsert invoke "transaction.cljc" 236]
[clojure.lang.AFn applyToHelper "AFn.java" 156]
[clojure.lang.AFn applyTo "AFn.java" 144]
[clojure.core$apply invokeStatic "core.clj" 669]
[clojure.core$update_in$up__6945 invoke "core.clj" 6248]
[clojure.core$update_in invokeStatic "core.clj" 6249]
[clojure.core$update_in doInvoke "core.clj" 6235]
[clojure.lang.RestFn invoke "RestFn.java" 470]
[datahike.db.transaction$transact_report invokeStatic "transaction.cljc" 276]
[datahike.db.transaction$transact_report invoke "transaction.cljc" 269]
[datahike.db.transaction$transact_add invokeStatic "transaction.cljc" 409]
[datahike.db.transaction$transact_add invoke "transaction.cljc" 398]
[datahike.db.transaction$apply_db_op invokeStatic "transaction.cljc" 634]
[datahike.db.transaction$apply_db_op invoke "transaction.cljc" 630]
[datahike.db.transaction$transact_tx_data invokeStatic "transaction.cljc" 819]
[datahike.db.transaction$transact_tx_data invoke "transaction.cljc" 746]
[datahike.core$with invokeStatic "core.cljc" 133]
[datahike.core$with invoke "core.cljc" 126]
[datahike.writing$transact_BANG_ invokeStatic "writing.cljc" 298]
[datahike.writing$transact_BANG_ invoke "writing.cljc" 295]
[clojure.lang.AFn applyToHelper "AFn.java" 156]
[clojure.lang.AFn applyTo "AFn.java" 144]
[clojure.core$apply invokeStatic "core.clj" 669]
[clojure.core$apply invoke "core.clj" 662]
[datahike.writer$create_thread$fn__41384$fn__41758$state_machine__6885__auto____41785$fn__41788 invoke "writer.cljc" 51]
[datahike.writer$create_thread$fn__41384$fn__41758$state_machine__6885__auto____41785 invoke "writer.cljc" 51]
[clojure.core.async.impl.ioc_macros$run_state_machine invokeStatic "ioc_macros.clj" 58]
[clojure.core.async.impl.ioc_macros$run_state_machine invoke "ioc_macros.clj" 57]
[clojure.core.async.impl.ioc_macros$run_state_machine_wrapped invokeStatic "ioc_macros.clj" 62]
[clojure.core.async.impl.ioc_macros$run_state_machine_wrapped invoke "ioc_macros.clj" 60]
[clojure.core.async.impl.ioc_macros$take_BANG_$fn__946 invoke "ioc_macros.clj" 71]
[clojure.core.async.impl.channels$appm$fn__730 invoke "channels.clj" 36]
[clojure.lang.AFn run "AFn.java" 22]
[java.util.concurrent.ThreadPoolExecutor runWorker "ThreadPoolExecutor.java" 1144]
[java.util.concurrent.ThreadPoolExecutor$Worker run "ThreadPoolExecutor.java" 642]
[clojure.core.async.impl.concurrent$counted_thread_factory$reify__621$fn__622 invoke "concurrent.clj" 29]
[clojure.lang.AFn run "AFn.java" 22]
[java.lang.Thread run "Thread.java" 1583]]}
---- is ex-info?
true
---- EX DATA
{}
(ns user)
(require '[datahike.api :as d])
(def cfg {:store {:backend :file :path "/tmp/example"}})
(d/create-database cfg)
(def conn (d/connect cfg))
(d/transact conn [{:db/ident :name
:db/unique :db.unique/value
:db/valueType :db.type/string
:db/cardinality :db.cardinality/one}])
(d/transact conn {:tx-data [{:name "Alice"}]})
(try
(d/transact conn {:tx-data [{:name "Alice"}]})
(catch Exception e
(println "---- EX")
(prn e)
(println "")
(println "---- is ex-info?")
(prn (instance? clojure.lang.ExceptionInfo e))
(println "")
(println "---- EX DATA")
(prn (ex-data e))))
(d/release conn)
(d/delete-database cfg)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment