From c8afe725dae7785ae9e4304bf02e4f6a8d89758f Mon Sep 17 00:00:00 2001 From: Janne Valkealahti Date: Sat, 22 Aug 2015 16:27:22 +0100 Subject: [PATCH] Add crash/start jepsen test --- docs/src/reference/asciidoc/appendix.adoc | 16 ++++ .../asciidoc/images/sm-tech-stop-start.png | Bin 0 -> 31507 bytes .../spring_statemachine_jepsen/checker.clj | 50 +++++++++++++ .../src/spring_statemachine_jepsen/core.clj | 70 +++++++++++++++++- .../spring_statemachine_jepsen/core_test.clj | 3 + 5 files changed, 137 insertions(+), 2 deletions(-) create mode 100644 docs/src/reference/asciidoc/images/sm-tech-stop-start.png diff --git a/docs/src/reference/asciidoc/appendix.adoc b/docs/src/reference/asciidoc/appendix.adoc index a85f6fb2..208e0a7e 100644 --- a/docs/src/reference/asciidoc/appendix.adoc +++ b/docs/src/reference/asciidoc/appendix.adoc @@ -563,3 +563,19 @@ What's happening in above chart: * Jepsen will heal network and after some time nodes `n3/n4` will join back into ensemble and synchronize its distributed status. +=== Crash and Join Tolerance +In this test we will demostrate that killing existing state machine +and then joining new instance back into an ensemble will keep the +distributed state healthy and newly joined state machines will synchronize +their states properly. + +image::images/sm-tech-stop-start.png[width=500] + +What's happening in above chart: + +* All state machines are transitioned from initial state `S21` into + `S211` so that we can test proper state synchronize during join. +* `X` is marking when a specific node has been crashed and started. +* At a same time we request states from all machines and plot it. +* Finally we do a simple transition back to `S21` from `S211` to make + sure that all state machines are still functioning properly. diff --git a/docs/src/reference/asciidoc/images/sm-tech-stop-start.png b/docs/src/reference/asciidoc/images/sm-tech-stop-start.png new file mode 100644 index 0000000000000000000000000000000000000000..6538af771cb9a63d689edf9cb5439509a8cd0240 GIT binary patch literal 31507 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 SN-?n(iKbZDPK>j3-SS_jlr}T~ literal 0 HcmV?d00001 diff --git a/jepsen/spring-statemachine-jepsen/src/spring_statemachine_jepsen/checker.clj b/jepsen/spring-statemachine-jepsen/src/spring_statemachine_jepsen/checker.clj index 85e89124..d76965c8 100644 --- a/jepsen/spring-statemachine-jepsen/src/spring_statemachine_jepsen/checker.clj +++ b/jepsen/spring-statemachine-jepsen/src/spring_statemachine_jepsen/checker.clj @@ -12,6 +12,7 @@ [knossos.history :as history] [gnuplot.core :as g])) +(def nodetovalue {"n1" 1 "n2" 2 "n3" 3 "n4" 4 "n5" 5 }) (def statetovalue {"S11" 1 "S12" 2 "S211" 3 "S212" 4 }) (def variabletovalue {"v1" 1 "v2" 2 "v3" 3 "v4" 4 "v5" 5 "v6" 6 "v7" 7 "v8" 8}) @@ -65,6 +66,16 @@ (vector (reduce-kv (fn [vec key value] (conj vec (vector (get value :time) (+ (get value :process) 1) (get value :v))) ) [] (vec data))))) +(defn extract-plot-data5 + [history] + (let [data + (->> history + (filter #(:value %)) + (filter #(= :nemesis (:process %))) + (filter #(= :stop (:f %))))] + (vector + (reduce-kv (fn [vec key value] (conj vec (vector (get value :time) (get nodetovalue (name (last (keys (get value :value))))) "X")) ) [] (vec data))))) + (defn plot1! [test model history] @@ -129,6 +140,38 @@ output-path) {:valid? true}) +(defn plot3! + [test model history] + + (let [output-path (.getCanonicalPath (store/path! test "states.png"))] + (g/raw-plot! [[:set :key :outside] + [:set :style :textbox :opaque] + [:set :terminal :qt :size (keyword "900,450")] + [:set :yrange (keyword "[0.5:4.5]")] + [:set :y2range (keyword "[0.5:5.5]")] + [:set :xtics :format "%h\nns"] + [:set :xlabel "elapsed time"] + [:set :ylabel "states in nodes"] + [:set :y2label "crash/start in nodes"] + [:set :ytics 1] + [:set :ytics (keyword "('S21' 1, 'S22' 2, 'S211' 3, 'S212' 4)")] + [:set :ytics :nomirror] + [:set :y2tics 1] + [:set :y2tics (keyword "('n1' 1, 'n2' 2, 'n3' 3, 'n4' 4, 'n5' 5)")] + [:plot + (g/list ["-" :title "states n1" :with :steps :lw :3] + ["-" :title "states n2" :with :steps :lw :3] + ["-" :title "states n3" :with :steps :lw :3] + ["-" :title "states n4" :with :steps :lw :3] + ["-" :title "states n5" :with :steps :lw :3] + ["-" :title "crash" :with :labels :center :boxed :font ",15" :axis :x1y2] + )]] + (into + (extract-plot-data history) + (extract-plot-data5 history))) + output-path) + {:valid? true}) + (defn checker1 "Constructs a Jepsen checker." [] @@ -142,3 +185,10 @@ (reify Checker (check [_ test model history] (if (env :plot) (plot2! test model history) {:valid? true})))) + +(defn checker3 + "Constructs a Jepsen checker." + [] + (reify Checker + (check [_ test model history] + (if (env :plot) (plot3! test model history) {:valid? true})))) diff --git a/jepsen/spring-statemachine-jepsen/src/spring_statemachine_jepsen/core.clj b/jepsen/spring-statemachine-jepsen/src/spring_statemachine_jepsen/core.clj index e8ebf1e5..22a651f5 100644 --- a/jepsen/spring-statemachine-jepsen/src/spring_statemachine_jepsen/core.clj +++ b/jepsen/spring-statemachine-jepsen/src/spring_statemachine_jepsen/core.clj @@ -17,6 +17,7 @@ [tests :as tests]] [spring-statemachine-jepsen.checker :refer [checker1]] [spring-statemachine-jepsen.checker :refer [checker2]] + [spring-statemachine-jepsen.checker :refer [checker3]] [jepsen.checker.timeline :as timeline] [jepsen.control.net :as net] [jepsen.os.debian :as debian] @@ -300,8 +301,7 @@ (gen-send-event-variable "J" "v7") (gen-read-variable "v7") (gen-send-event-variable "J" "v8") - (gen-read-variable "v8") -)) + (gen-read-variable "v8"))) (defn event-gen-4 "Generates event and checks states while splitting network" @@ -326,6 +326,64 @@ (gen-status 30) (gen-read-states 10 ["S0","S1","S11"]))) +(defn event-gen-5 + "Generates starts and stops and checks joins" + [] + (gen/phases + (gen-read-states 5 ["S0","S1","S11"]) + (gen-send-event-all "C") + (gen-read-states 5 ["S0","S2","S21","S211"]) + (gen/nemesis + (gen/seq [{:type :info :f :start} + (gen/sleep 5) + {:type :info :f :stop}])) + (gen-read-states 2 ["S0","S2","S21","S211"]) + (gen/nemesis + (gen/seq [{:type :info :f :start} + (gen/sleep 5) + {:type :info :f :stop}])) + (gen-read-states 2 ["S0","S2","S21","S211"]) + (gen/nemesis + (gen/seq [{:type :info :f :start} + (gen/sleep 5) + {:type :info :f :stop}])) + (gen-read-states 2 ["S0","S2","S21","S211"]) + (gen/nemesis + (gen/seq [{:type :info :f :start} + (gen/sleep 5) + {:type :info :f :stop}])) + (gen-read-states 2 ["S0","S2","S21","S211"]) + (gen/nemesis + (gen/seq [{:type :info :f :start} + (gen/sleep 5) + {:type :info :f :stop}])) + (gen-read-states 2 ["S0","S2","S21","S211"]) + (gen/nemesis + (gen/seq [{:type :info :f :start} + (gen/sleep 5) + {:type :info :f :stop}])) + (gen-read-states 2 ["S0","S2","S21","S211"]) + (gen/nemesis + (gen/seq [{:type :info :f :start} + (gen/sleep 5) + {:type :info :f :stop}])) + (gen-read-states 2 ["S0","S2","S21","S211"]) + (gen/nemesis + (gen/seq [{:type :info :f :start} + (gen/sleep 5) + {:type :info :f :stop}])) + (gen-read-states 5 ["S0","S2","S21","S211"]) + (gen-send-event-all "K") + (gen-read-states 5 ["S0","S1","S11"]))) + +(defn killer + "Kills statemachine on a random node on start, restarts it on stop." + [] + (nemesis/node-start-stopper + rand-nth + (fn start [test node] (c/su (c/exec :pkill :-9 :-f :spring-statemachine-samples-web))) + (fn stop [test node] (start! node)))) + (defn statemachine-test "Defaults for testing state machine." [name opts] @@ -374,3 +432,11 @@ {:nemesis (nemesis/partition-random-halves) :generator (event-gen-4) :checker (checker1)})) + +(defn stop-start-test + "Stops and start nodes checking join is okk." + [] + (event-test "partition-half" + {:nemesis (killer) + :generator (event-gen-5) + :checker (checker3)})) diff --git a/jepsen/spring-statemachine-jepsen/test/spring_statemachine_jepsen/core_test.clj b/jepsen/spring-statemachine-jepsen/test/spring_statemachine_jepsen/core_test.clj index 54f122df..9d80efa6 100644 --- a/jepsen/spring-statemachine-jepsen/test/spring_statemachine_jepsen/core_test.clj +++ b/jepsen/spring-statemachine-jepsen/test/spring_statemachine_jepsen/core_test.clj @@ -25,3 +25,6 @@ (deftest partition-half (run-statemachine-test! (partition-half-test))) + +(deftest stop-start + (run-statemachine-test! (stop-start-test)))