# jepsen.garage Jepsen checking of Garage consistency properties. ## Usage Requirements: - vagrant - VirtualBox, configured so that nodes can take an IP in a private network `192.168.56.0/24` - a user that can create VirtualBox VMs - leiningen - gnuplot Set up VMs: ``` vagrant up ``` Run tests (this one should fail): ``` lein run test --nodes-file nodes.vagrant --time-limit 64 --concurrency 50 --rate 50 --workload reg ``` These ones are working: ``` lein run test --nodes-file nodes.vagrant --time-limit 64 --rate 50 --concurrency 50 --workload set1 lein run test --nodes-file nodes.vagrant --time-limit 64 --rate 50 --concurrency 50 --workload set2 ``` ## Results **Register linear, without timestamp patch** Command: `lein run test --nodes-file nodes.vagrant --time-limit 60 --rate 20 --concurrency 20 --workload reg --ops-per-key 100` Results: fails with a simple clock-scramble nemesis. Explanation: without the timestamp patch, nodes will create objects using their local clock only as a timestamp, so the ordering will be all over the place if clocks are scrambled. **Register linear, with timestamp patch** Command: `lein run test --nodes-file nodes.vagrant --time-limit 60 --rate 20 --concurrency 20 --workload reg --ops-per-key 100 -I` Results: - No failure with clock-scramble nemesis - Fails with clock-scramble nemesis + partition nemesis Explanation: S3 objects are not meant to behave like linearizable registers. TODO explain using a counter-example **Read-after-write CRDT register model**: TODO: determine the expected semantics of such a register, code a checker and show that results are correct **Set, basic test** Command: `lein run test --nodes-file nodes.vagrant --time-limit 60 --rate 20 --concurrency 20 --workload set1 --ops-per-key 100` Results: - ListObjects returns objects not within prefix???? ## License Copyright © 2023 Alex Auvolat This program and the accompanying materials are made available under the terms of the GNU Affero General Public License v3.0.