|
2 | 2 | "Run Tarantool tests."
|
3 | 3 | (:require [clojure.tools.logging :refer [info warn]]
|
4 | 4 | [clojure.string :as str]
|
5 |
| - [clojure.java.io :as io] |
6 |
| - [next.jdbc :as j] |
7 |
| - [next.jdbc.connection :as connection] |
8 |
| - [slingshot.slingshot :refer [try+]] |
9 | 5 | [jepsen [cli :as cli]
|
10 | 6 | [client :as client]
|
11 | 7 | [checker :as checker]
|
|
19 | 15 | [knossos.model :as model]
|
20 | 16 | [jepsen.checker.timeline :as timeline]
|
21 | 17 | [jepsen.os.ubuntu :as ubuntu]
|
| 18 | + [tarantool.client :as cl] |
22 | 19 | [tarantool.db :as db]))
|
23 | 20 |
|
24 | 21 | (defn r [_ _] {:type :invoke, :f :read, :value nil})
|
25 | 22 | (defn w [_ _] {:type :invoke, :f :write, :value (rand-int 5)})
|
26 | 23 | (defn cas [_ _] {:type :invoke, :f :cas, :value [(rand-int 5) (rand-int 5)]})
|
27 | 24 |
|
28 |
| -(defn conn-spec |
29 |
| - "JDBC connection spec for a node." |
30 |
| - [node] |
31 |
| - {:classname "org.tarantool.jdbc.SQLDriver" |
32 |
| - :dbtype "tarantool" |
33 |
| - :dbname "jepsen" |
34 |
| - :host (name node) |
35 |
| - :port 3301 |
36 |
| - :user "jepsen" |
37 |
| - :password "jepsen"}) |
38 |
| - |
39 |
| -(defn open |
40 |
| - "Opens a connection to the given node." |
41 |
| - [node test] |
42 |
| - (j/get-datasource (conn-spec node))) |
43 |
| - |
44 |
| -(defn read-v-by-k |
45 |
| - "Reads the current value of a key." |
46 |
| - [conn k] |
47 |
| - (first (vals (first (j/execute! conn ["SELECT _READ(?, 'JEPSEN')" k]))))) |
48 |
| - |
49 |
| -(defn write-v-by-k |
50 |
| - "Writes the current value of a key." |
51 |
| - [conn k v] |
52 |
| - (j/execute! conn ["SELECT _WRITE(?, ?, 'JEPSEN')" |
53 |
| - k v])) |
54 |
| - |
55 |
| -(defn compare-and-set |
56 |
| - [conn id old new] |
57 |
| - (first (vals (first (j/execute! conn ["SELECT _CAS(?, ?, ?, 'JEPSEN')" |
58 |
| - id old new]))))) |
59 |
| - |
60 | 25 | (defrecord Client [conn]
|
61 | 26 | client/Client
|
62 | 27 |
|
63 | 28 | (open! [this test node]
|
64 |
| - (let [conn (open node test)] |
| 29 | + (let [conn (cl/open node test)] |
65 | 30 | (assert conn)
|
66 | 31 | (assoc this :conn conn :node node)))
|
67 | 32 |
|
68 | 33 | (setup! [this test node]
|
69 |
| - (let [conn (open node test)] |
| 34 | + (let [conn (cl/open node test)] |
70 | 35 | (assert conn)
|
71 | 36 | ;(when (= node (jepsen/primary test))
|
72 | 37 | ; (j/execute! conn ["CREATE TABLE IF NOT EXISTS jepsen (key INT, value INT, PRIMARY KEY (key))"])
|
|
77 | 42 | (case (:f op)
|
78 | 43 | :read (assoc op
|
79 | 44 | :type :ok
|
80 |
| - :value (read-v-by-k conn 1)) |
81 |
| - :write (do (let [con (open (jepsen/primary test) test)] |
82 |
| - (write-v-by-k con 1 (:value op))) |
| 45 | + :value (cl/read-v-by-k conn 1)) |
| 46 | + :write (do (let [con (cl/open (jepsen/primary test) test)] |
| 47 | + (cl/write-v-by-k con 1 (:value op))) |
83 | 48 | (assoc op :type :ok))
|
84 | 49 | :cas (let [[old new] (:value op)
|
85 |
| - con (open (jepsen/primary test) test)] |
86 |
| - (assoc op :type (if (compare-and-set con 1 old new) |
| 50 | + con (cl/open (jepsen/primary test) test)] |
| 51 | + (assoc op :type (if (cl/compare-and-set con 1 old new) |
87 | 52 | :ok
|
88 | 53 | :fail)))))
|
89 | 54 |
|
|
0 commit comments