jepsen-io / maelstrom

A workbench for writing toy implementations of distributed systems.
Eclipse Public License 1.0
3.03k stars 188 forks source link

Not clear how to troubleshoot "No matching clause: [:ok :invoke]" #28

Closed brentvukmer closed 1 year ago

brentvukmer commented 1 year ago

I'm working through the Maelstrom Guide. For better or worse I decided to implement each exercise in Go rather than just use the Ruby code supplied in docs. I'm currently implementing the logic from Chapter 5 'Database As Value'.

I'm invoking maelstrom with these arguments: ./maelstrom test -w txn-list-append --bin "${GOPATH}/bin/datomic" --time-limit 10 --node-count 2 --rate 100 --log-stderr

I'm running into an error in results.edn that I'm not sure how to troubleshoot: java.lang.IllegalArgumentException: No matching clause: [:ok :invoke]

My first thought was that that indicated there was an :invoke without a corresponding :ok. I found one missing:ok for each node -- with a :net :timeout instead. That seems to match the behavior described in the Database As Value section.

Any suggestions for how to troubleshoot this?

{:perf {:latency-graph {:valid? true},
        :rate-graph {:valid? true},
        :valid? true},
 :timeline {:valid? true},
 :exceptions {:valid? true},
 :stats {:valid? true,
         :count 853,
         :ok-count 851,
         :fail-count 0,
         :info-count 2,
         :by-f {:txn {:valid? true,
                      :count 853,
                      :ok-count 851,
                      :fail-count 0,
                      :info-count 2}}},
 :net {:all {:send-count 5120,
             :recv-count 5120,
             :msg-count 5120,
             :msgs-per-op 6.0023446},
       :clients {:send-count 1708, :recv-count 1708, :msg-count 1708},
       :servers {:send-count 3412,
                 :recv-count 3412,
                 :msg-count 3412,
                 :msgs-per-op 4.0},
       :valid? true},
 :workload {:valid? :unknown,
            :error "java.lang.IllegalArgumentException: No matching clause: [:ok :invoke]\n at elle.list_append$dirty_update_cases$fn__18117$fn__18122.invoke (list_append.clj:404)\n    clojure.lang.PersistentVector.reduce (PersistentVector.java:343)\n    clojure.core$reduce.invokeStatic (core.clj:6829)\n    clojure.core$reduce.invoke (core.clj:6812)\n    elle.list_append$dirty_update_cases$fn__18117.invoke (list_append.clj:397)\n    clojure.core$map$fn__5884.invoke (core.clj:2759)\n    clojure.lang.LazySeq.sval (LazySeq.java:42)\n    clojure.lang.LazySeq.seq (LazySeq.java:51)\n    clojure.lang.RT.seq (RT.java:535)\n    clojure.core$seq__5419.invokeStatic (core.clj:139)\n    clojure.core$apply.invokeStatic (core.clj:662)\n    clojure.core$mapcat.invokeStatic (core.clj:2787)\n    clojure.core$mapcat.doInvoke (core.clj:2787)\n    clojure.lang.RestFn.invoke (RestFn.java:423)\n    elle.list_append$dirty_update_cases.invokeStatic (list_append.clj:395)\n    elle.list_append$dirty_update_cases.invoke (list_append.clj:386)\n    elle.list_append$check.invokeStatic (list_append.clj:883)\n    elle.list_append$check.invoke (list_append.clj:848)\n    jepsen.tests.cycle.append$checker$reify__18396.check (append.clj:19)\n    jepsen.checker$check_safe.invokeStatic (checker.clj:81)\n    jepsen.checker$check_safe.invoke (checker.clj:74)\n    jepsen.checker$compose$reify__9656$fn__9658.invoke (checker.clj:97)\n    clojure.core$pmap$fn__8485$fn__8486.invoke (core.clj:7024)\n    clojure.core$binding_conveyor_fn$fn__5772.invoke (core.clj:2034)\n    clojure.lang.AFn.call (AFn.java:18)\n    java.util.concurrent.FutureTask.run (FutureTask.java:264)\n    java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1136)\n    java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:635)\n    java.lang.Thread.run (Thread.java:833)\n"},
 :valid? :unknown}
aphyr commented 1 year ago

Ah, yes, sorry, this is a bad error message I still haven't had time to clean up. Is it possible that there are operations in the history where the completion's transaction (:value) is different than the :value of the invocation?

brentvukmer commented 1 year ago

That was it! Thanks very much.