Challenge 6 question

Hey, very nice set of challenges! Although the last one (6c) was a bit unexpected - maelstrom gives me a-ok even when nodes don’t coordinate at all (each one has a separate store). I assume it’s not right?.

Here’s my code: fly-dist-sys/06-txns.py at master · ashtuchkin/fly-dist-sys · GitHub (the invocations are in Makefile)

Results for run-6c:

Summary
INFO [2023-02-27 01:57:51,940] jepsen test runner - jepsen.core Analyzing...
INFO [2023-02-27 01:57:54,292] clojure-agent-send-off-pool-7 - elle.txn Timing out search for :G-nonadjacent in SCC of 7140 transactions (checked [:G0 :G1c :G-single :G-nonadjacent] )
INFO [2023-02-27 01:57:55,178] clojure-agent-send-off-pool-8 - elle.viz Skipping plot of 6045069 bytes
INFO [2023-02-27 01:57:55,181] jepsen test runner - jepsen.core Analysis complete
INFO [2023-02-27 01:57:55,191] jepsen results - jepsen.store Wrote /Users/ashtuchkin/code/dist-sys/store/txn-rw-register/20230227T015728.981-0500/results.edn
INFO [2023-02-27 01:57:55,217] jepsen test runner - jepsen.core {:perf {:latency-graph {:valid? true},
        :rate-graph {:valid? true},
        :valid? true},
 :timeline {:valid? true},
 :exceptions {:valid? true},
 :stats {:valid? true,
         :count 16347,
         :ok-count 16347,
         :fail-count 0,
         :info-count 0,
         :by-f {:txn {:valid? true,
                      :count 16347,
                      :ok-count 16347,
                      :fail-count 0,
                      :info-count 0}}},
 :availability {:valid? true, :ok-fraction 1.0},
 :net {:all {:send-count 32698,
             :recv-count 32698,
             :msg-count 32698,
             :msgs-per-op 2.0002446},
       :clients {:send-count 32698,
                 :recv-count 32698,
                 :msg-count 32698},
       :servers {:send-count 0,
                 :recv-count 0,
                 :msg-count 0,
                 :msgs-per-op 0.0},
       :valid? true},
 :workload {:valid? true,
            :anomaly-types (),
            :anomalies {},
            :not #{:cursor-stability :read-atomic},
            :also-not #{:ROLA
                        :causal-cerone
                        :consistent-view
                        :forward-consistent-view
                        :parallel-snapshot-isolation
                        :prefix
                        :repeatable-read
                        :serializable
                        :snapshot-isolation
                        :strong-serializable
                        :strong-session-serializable
                        :strong-session-snapshot-isolation
                        :strong-snapshot-isolation
                        :update-serializable}},
 :valid? true}


Everything looks good! ヽ(‘ー`)ノ

The Totally-Available Transactions challenges are interesting because Read Uncommitted and Read Committed are so weak. Also, there’s no real-time guarantee so you could technically just return empty data (which is the initial state of the database) and it meets the requirements of even Serializable consistency.

We used to have a blurb in there saying you need to make it non-trivial and have the nodes communicate state but I don’t see that now. I’ll have to re-add that.

A really hard challenge is to actually get Maelstrom to fail your program for each one of the anomalies (G0, G1a, G1b, G1c). The strong consistency models (Monotonic Atomic View, etc) are more interesting challenges but we use some of those for internal evaluation.