|
44 | 44 | (assoc this :conn conn :node node)))
|
45 | 45 |
|
46 | 46 | (invoke! [this test op]
|
| 47 | + (let [[k value] (:value op)] |
47 | 48 | (case (:f op)
|
48 |
| - :read (let [value (:VALUE |
49 |
| - (first (sql/query conn |
50 |
| - [(str "SELECT value FROM " table-name " WHERE id = 1")])))] |
51 |
| - (assoc op :type :ok :value value)) |
| 49 | + |
| 50 | + :read (let [r (first (sql/query conn [(str "SELECT value FROM " table-name " WHERE id = " k)])) |
| 51 | + v (:value r)] |
| 52 | + (assoc op :type :ok, :value (independent/tuple k v))) |
52 | 53 |
|
53 | 54 | :write (do (let [con (cl/open (jepsen/primary test) test)
|
54 | 55 | table (clojure.string/upper-case table-name)]
|
55 | 56 | (j/execute! con
|
56 |
| - [(str "SELECT _UPSERT(1, " (:value op) ", '" table "')")]) |
57 |
| - (assoc op :type :ok))) |
| 57 | + [(str "SELECT _UPSERT(" k ", " value ", '" table "')")]) |
| 58 | + (assoc op |
| 59 | + :type :ok |
| 60 | + :value (independent/tuple k value)))) |
58 | 61 |
|
59 |
| - :cas (let [[old new] (:value op) |
| 62 | + :cas (do (let [[old new] value |
60 | 63 | con (cl/open (jepsen/primary test) test)
|
61 |
| - table (clojure.string/upper-case table-name)] |
62 |
| - (assoc op :type (if (->> (j/execute! conn |
63 |
| - [(str "SELECT _CAS(1, " old ", " new ", '" table "')")]) |
64 |
| - (first) |
65 |
| - (vals) |
66 |
| - (first)) |
67 |
| - :ok |
68 |
| - :fail))))) |
| 64 | + table (clojure.string/upper-case table-name) |
| 65 | + r (->> (j/execute! con |
| 66 | + [(str "SELECT _CAS(" k ", " old ", " new ", '" table "')")]) |
| 67 | + (first) |
| 68 | + (vals) |
| 69 | + (first))] |
| 70 | + (if r |
| 71 | + (assoc op |
| 72 | + :type :ok |
| 73 | + :value (independent/tuple k value)) |
| 74 | + (assoc op :type :fail))))))) |
69 | 75 |
|
70 | 76 | (teardown! [_ test]
|
71 | 77 | (cl/with-conn-failure-retry conn
|
|
76 | 82 | (defn workload
|
77 | 83 | [opts]
|
78 | 84 | {:client (Client. nil)
|
79 |
| - :generator (->> (gen/mix [r w cas]) |
80 |
| - (gen/stagger 1/10) |
81 |
| - (gen/nemesis nil) |
82 |
| - (gen/time-limit (:time-limit opts))) |
83 |
| - :checker (checker/compose |
84 |
| - {:timeline (timeline/html) |
85 |
| - :linearizable (checker/linearizable {:model (model/cas-register 0) |
86 |
| - :algorithm :linear})})}) |
| 85 | + :generator (independent/concurrent-generator |
| 86 | + 10 |
| 87 | + (range) |
| 88 | + (fn [k] |
| 89 | + (->> (gen/mix [w cas]) |
| 90 | + (gen/reserve 5 r) |
| 91 | + (gen/limit 100)))) |
| 92 | + :checker (independent/checker |
| 93 | + (checker/compose |
| 94 | + {:timeline (timeline/html) |
| 95 | + :linearizable (checker/linearizable {:model (model/cas-register 0) |
| 96 | + :algorithm :linear})}))}) |
0 commit comments