Skip to content

Commit 73987fd

Browse files
committed
redis: leader-route demo reads and fail invalid Jepsen runs
1 parent 41cadd4 commit 73987fd

File tree

6 files changed

+45
-5
lines changed

6 files changed

+45
-5
lines changed

adapter/add_voter_join_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ func startAddVoterJoinNode(
182182
return err
183183
})
184184

185-
rd := NewRedisServer(lis.redis, port.redisAddress, st, coordinator, leaderRedisMap, relay)
185+
rd := NewRedisServer(lis.redis, port.redisAddress, routedStore, coordinator, leaderRedisMap, relay)
186186
workers.Go(func() error {
187187
err := rd.Run()
188188
if errors.Is(err, net.ErrClosed) {

adapter/redis_server_setup_test.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package adapter
2+
3+
import (
4+
"testing"
5+
6+
"github.com/bootjp/elastickv/kv"
7+
"github.com/stretchr/testify/require"
8+
)
9+
10+
func TestRedisServerUsesLeaderRoutedStoreInSingleGroupCluster(t *testing.T) {
11+
t.Parallel()
12+
13+
nodes, _, _ := createNode(t, 3)
14+
defer shutdown(nodes)
15+
16+
require.IsType(t, &kv.LeaderRoutedStore{}, nodes[0].redisServer.store)
17+
require.IsType(t, &kv.LeaderRoutedStore{}, nodes[1].redisServer.store)
18+
require.IsType(t, &kv.LeaderRoutedStore{}, nodes[2].redisServer.store)
19+
}

adapter/test_util.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -370,7 +370,7 @@ func setupNodes(t *testing.T, ctx context.Context, n int, ports []portsAdress) (
370370
assert.NoError(t, srv.Serve(lis))
371371
}(s, grpcSock)
372372

373-
rd := NewRedisServer(redisSock, port.redisAddress, st, coordinator, leaderRedisMap, relay)
373+
rd := NewRedisServer(redisSock, port.redisAddress, routedStore, coordinator, leaderRedisMap, relay)
374374
go func(server *RedisServer) {
375375
assert.NoError(t, server.Run())
376376
}(rd)

cmd/server/demo.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -354,7 +354,8 @@ func setupRedis(ctx context.Context, lc net.ListenConfig, st store.MVCCStore, co
354354
if err != nil {
355355
return nil, errors.WithStack(err)
356356
}
357-
return adapter.NewRedisServer(l, redisAddr, st, coordinator, leaderRedis, relay), nil
357+
routedStore := kv.NewLeaderRoutedStore(st, coordinator)
358+
return adapter.NewRedisServer(l, redisAddr, routedStore, coordinator, leaderRedis, relay), nil
358359
}
359360

360361
func run(ctx context.Context, eg *errgroup.Group, cfg config) error {

jepsen/src/elastickv/redis_workload.clj

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,13 @@
175175
:parse-fn #(Integer/parseInt %)]
176176
["-h" "--help"]])
177177

178+
(defn fail-on-invalid!
179+
"Raises when Jepsen completed analysis and found the history invalid."
180+
[result]
181+
(when (false? (:valid? result))
182+
(throw (ex-info "Jepsen analysis invalid" {:result result})))
183+
result)
184+
178185
(defn -main
179186
[& args]
180187
(let [{:keys [options errors summary]} (tools.cli/parse-opts args cli-opts)
@@ -211,5 +218,5 @@
211218
(seq errors) (binding [*out* *err*]
212219
(println "Error parsing options:" (str/join "; " errors)))
213220
(:local options) (binding [control/*dummy* true]
214-
(jepsen/run! (elastickv-redis-test options)))
215-
:else (jepsen/run! (elastickv-redis-test options)))))
221+
(fail-on-invalid! (jepsen/run! (elastickv-redis-test options))))
222+
:else (fail-on-invalid! (jepsen/run! (elastickv-redis-test options))))))
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
(ns elastickv.redis-workload-test
2+
(:require [clojure.test :refer :all]
3+
[elastickv.redis-workload :as workload]))
4+
5+
(deftest fail-on-invalid-passes-through-valid-results
6+
(let [result {:valid? true}]
7+
(is (= result (workload/fail-on-invalid! result)))))
8+
9+
(deftest fail-on-invalid-throws-for-invalid-results
10+
(is (thrown-with-msg?
11+
clojure.lang.ExceptionInfo
12+
#"Jepsen analysis invalid"
13+
(workload/fail-on-invalid! {:valid? false}))))

0 commit comments

Comments
 (0)