aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--script/jepsen.garage/README.md7
-rw-r--r--script/jepsen.garage/src/jepsen/garage/set.clj55
2 files changed, 42 insertions, 20 deletions
diff --git a/script/jepsen.garage/README.md b/script/jepsen.garage/README.md
index 800dde94..1bba32ec 100644
--- a/script/jepsen.garage/README.md
+++ b/script/jepsen.garage/README.md
@@ -24,6 +24,13 @@ 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
+```
+
## License
Copyright © 2023 Alex Auvolat
diff --git a/script/jepsen.garage/src/jepsen/garage/set.clj b/script/jepsen.garage/src/jepsen/garage/set.clj
index f8c92580..156493bc 100644
--- a/script/jepsen.garage/src/jepsen/garage/set.clj
+++ b/script/jepsen.garage/src/jepsen/garage/set.clj
@@ -28,14 +28,18 @@
(assoc this :creds creds)))
(setup! [this test])
(invoke! [this test op]
- (case (:f op)
- :add
- (do
- (grg/s3-put (:creds this) (str (:value op)) "present")
- (assoc op :type :ok))
- :read
- (let [items (grg/s3-list (:creds this) "")]
- (assoc op :type :ok, :value (set (map read-string items))))))
+ (let [[k v] (:value op)
+ prefix (str "set" k "/")]
+ (case (:f op)
+ :add
+ (do
+ (grg/s3-put (:creds this) (str prefix v) "present")
+ (assoc op :type :ok))
+ :read
+ (let [items (grg/s3-list (:creds this) prefix)
+ items-stripped (map (fn [o] (str/replace-first o prefix "")) items)
+ items-set (set (map read-string items-stripped))]
+ (assoc op :type :ok, :value (independent/tuple k items-set))))))
(teardown! [this test])
(close! [this test]))
@@ -43,22 +47,33 @@
"Tests insertions and deletions"
[opts]
{:client (SetClient. nil)
- :checker (checker/compose
- {:set (checker/set)
- :timeline (timeline/html)})
- ; :generator (gen/mix [op-add op-read])
- :generator (->> (range)
- (map (fn [x] {:type :invoke, :f :add, :value x})))
- :final-generator (gen/once op-read)})
+ :checker (independent/checker
+ (checker/compose
+ {:set (checker/set)
+ :timeline (timeline/html)}))
+ :generator (independent/concurrent-generator
+ 10
+ (range 100)
+ (fn [k]
+ (->>
+ (gen/mix [op-add])
+ (gen/limit (:ops-per-key opts)))))
+ :final-generator (independent/sequential-generator
+ (range 100)
+ (fn [k] (gen/once op-read)))})
(defn workload2
"Tests insertions and deletions"
[opts]
{:client (SetClient. nil)
- :checker (checker/compose
- {:set (checker/set-full {:linearizable? false})
- :timeline (timeline/html)})
- :generator (gen/mix [op-read
- (->> (range) (map (fn [x] {:type :invoke, :f :add, :value x})))])})
+ :checker (independent/checker
+ (checker/compose
+ {:set (checker/set-full {:linearizable? false})
+ :timeline (timeline/html)}))
+ :generator (independent/concurrent-generator
+ 10
+ (range 100)
+ (fn [k]
+ (gen/mix [op-add op-read])))})