Fork me on GitHub
#datomic
<
2018-07-13
>
eoliphant03:07:18

i’m seeing this error for a largish (~500 datoms) transaction

"java.lang.IllegalArgumentException: No implementation of method: :value-size of protocol: #'datomic.cloud.tx-limits/ValueSize found for class: java.lang.Integer\n\t
Any ideas what this might be?

stuarthalloway11:07:20

@U380J7PAQ somehow a wrapped Integer showed up where it should not, probably should be a primitive long. Let me know if you can make a small repro. I doubt this has to do with tx size.

eoliphant21:07:49

hmm, will do some digging. I’m using transit to sneak edn in and out of my ions. ran into the customary issues/surprises on my cljs client, might be something similar on the server

eoliphant18:07:03

Ok so.. um.. that was in fact the problem… but it was weirdly intermittent lol. I’m uploading some info off of a gene sequencer. I’d totally forgotten that my parser on the server was in fact calling Integer/parseInt to set the value of the associated datoms But, it frequently worked just fine. Changing to Long/parseLong did fix it. Gonna finish this stuff up. Then try to go back and see if i can get a consistent test case

souenzzo20:07:20

Hello I'm on "classic peer" I have a datomic function :empty-query? that is pretty simple

(def empty-query?
  (d/function '{:lang     :clojure
                :requires [[datomic.api :as d]]
                :params   [db query & args]
                :code     (when-not (->> (into [db] args)
                                         (hash-map :query query :args)
                                         (d/query)
                                         (empty?))
                            (throw (ex-info "FAIL" {})))}))
But some queries produce different result's on peer and on transactor For example
'[:find ?e
  :in $ ?ignore-set
  :where
  [?e :app/foo]
  (not [(contains? ?ignore-set ?e)])]
on peer(d/with and d/transact on "mem") works "as expected" on transact(d/transact on "dev") always return "empty?" Then I changed to
'[:find ?e
  :in $ ?ignore-set
  :where
  [?e :app/foo]
  [(contains? ?ignore-set ?e) ?q]
  [(ground false) ?q]]
That second one always returns the same results ("as expected") on transactor and on peer. Is it a bug?

souenzzo12:07:27

BUMP. It's causing me concurrence problems and there is no simple way to test if the query will work on transactor or not

stuarthalloway11:07:01

@U2J4FRT2T I have reproduced this but have not fully isolated it yet. The workaround with ground seems sound.

souenzzo12:07:28

The worse part is that I can't test if my query will work or not. The unique way to test it is testing against dev/free transactor, and it's way slower.

souenzzo15:07:38

Will be a issue to fix that? @stuarthalloway

souenzzo05:07:06

@stuarthalloway news about that? it's a but and will be fixed? I will need to always run all my tests in datomic:free? I need to make a repo to reproduce?