Skip to content

Commit bf83b04

Browse files
authored
test: add a case for the recoverability from cluster down (#387)
1 parent b5b3e08 commit bf83b04

File tree

5 files changed

+277
-21
lines changed

5 files changed

+277
-21
lines changed

.github/workflows/test.yaml

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ jobs:
4040
- {ruby: 'jruby'}
4141
- {ruby: 'truffleruby'}
4242
- {task: test_cluster_broken, restart: 'no', startup: '6'}
43+
- {task: test_cluster_down}
4344
- {redis: '8', ruby: '3.3', compose: compose.valkey.yaml, replica: '2'}
4445
- {redis: '7.2', ruby: '3.2', compose: compose.auth.yaml}
4546
- {redis: '7.0', ruby: '3.1'}
@@ -66,17 +67,17 @@ jobs:
6667
ruby-version: ${{ matrix.ruby || '3.3' }}
6768
bundler-cache: true
6869
- name: Pull Docker images
69-
run: docker compose -f $DOCKER_COMPOSE_FILE pull
70+
run: docker compose --progress quiet -f $DOCKER_COMPOSE_FILE pull
7071
- name: Run containers
71-
run: docker compose -f $DOCKER_COMPOSE_FILE up -d
72+
run: docker compose --progress quiet -f $DOCKER_COMPOSE_FILE up -d
7273
- name: Wait for Redis cluster to be ready
7374
run: bundle exec rake wait
7475
- name: Print containers
7576
run: docker compose -f $DOCKER_COMPOSE_FILE ps
7677
- name: Run minitest
7778
run: bundle exec rake ${{ matrix.task || 'test' }}
7879
- name: Stop containers
79-
run: docker compose -f $DOCKER_COMPOSE_FILE down || true
80+
run: docker compose --progress quiet -f $DOCKER_COMPOSE_FILE down || true
8081
nat-ted-env:
8182
name: NAT-ted Environments
8283
timeout-minutes: 5
@@ -97,9 +98,9 @@ jobs:
9798
host_ip_addr=$(ip a | grep eth0 | grep inet | awk '{print $2}' | cut -d'/' -f1)
9899
echo "HOST_IP_ADDR=$host_ip_addr" >> $GITHUB_ENV
99100
- name: Pull Docker images
100-
run: docker compose -f $DOCKER_COMPOSE_FILE pull
101+
run: docker compose --progress quiet -f $DOCKER_COMPOSE_FILE pull
101102
- name: Run containers
102-
run: docker compose -f $DOCKER_COMPOSE_FILE up -d
103+
run: docker compose --progress quiet -f $DOCKER_COMPOSE_FILE up -d
103104
env:
104105
HOST_ADDR: ${{ env.HOST_IP_ADDR }}
105106
- name: Wait for nodes to be ready
@@ -134,7 +135,7 @@ jobs:
134135
- name: Run minitest
135136
run: bundle exec rake test
136137
- name: Stop containers
137-
run: docker compose -f $DOCKER_COMPOSE_FILE down || true
138+
run: docker compose --progress quiet -f $DOCKER_COMPOSE_FILE down || true
138139
lint:
139140
name: Lint
140141
timeout-minutes: 5
@@ -168,9 +169,9 @@ jobs:
168169
ruby-version: '3.3'
169170
bundler-cache: true
170171
- name: Pull Docker images
171-
run: docker compose -f $DOCKER_COMPOSE_FILE pull
172+
run: docker compose --progress quiet -f $DOCKER_COMPOSE_FILE pull
172173
- name: Run containers
173-
run: docker compose -f $DOCKER_COMPOSE_FILE up -d
174+
run: docker compose --progress quiet -f $DOCKER_COMPOSE_FILE up -d
174175
- name: Wait for Redis cluster to be ready
175176
run: bundle exec rake wait
176177
- name: Print containers
@@ -208,7 +209,7 @@ jobs:
208209
docker compose -f $DOCKER_COMPOSE_FILE exec node$i tc qdisc del dev eth0 root netem || true
209210
done
210211
- name: Stop containers
211-
run: docker compose -f $DOCKER_COMPOSE_FILE down || true
212+
run: docker compose --progress quiet -f $DOCKER_COMPOSE_FILE down || true
212213
ips:
213214
name: IPS
214215
timeout-minutes: 10
@@ -228,9 +229,9 @@ jobs:
228229
ruby-version: '3.3'
229230
bundler-cache: true
230231
- name: Pull Docker images
231-
run: docker compose -f $DOCKER_COMPOSE_FILE pull
232+
run: docker compose --progress quiet -f $DOCKER_COMPOSE_FILE pull
232233
- name: Run containers
233-
run: docker compose -f $DOCKER_COMPOSE_FILE up -d
234+
run: docker compose --progress quiet -f $DOCKER_COMPOSE_FILE up -d
234235
- name: Wait for Redis cluster to be ready
235236
run: bundle exec rake wait
236237
- name: Print containers
@@ -240,7 +241,7 @@ jobs:
240241
- name: Run iteration per second
241242
run: bundle exec rake ips
242243
- name: Stop containers
243-
run: docker compose -f $DOCKER_COMPOSE_FILE down || true
244+
run: docker compose --progress quiet -f $DOCKER_COMPOSE_FILE down || true
244245
profiling:
245246
name: Profiling
246247
timeout-minutes: 5
@@ -266,9 +267,9 @@ jobs:
266267
ruby-version: '3.3'
267268
bundler-cache: true
268269
- name: Pull Docker images
269-
run: docker compose -f $DOCKER_COMPOSE_FILE pull
270+
run: docker compose --progress quiet -f $DOCKER_COMPOSE_FILE pull
270271
- name: Run containers
271-
run: docker compose -f $DOCKER_COMPOSE_FILE up -d
272+
run: docker compose --progress quiet -f $DOCKER_COMPOSE_FILE up -d
272273
- name: Wait for Redis cluster to be ready
273274
run: bundle exec rake wait
274275
- name: Print containers
@@ -278,7 +279,7 @@ jobs:
278279
env:
279280
PROFILE_MODE: ${{ matrix.mode }}
280281
- name: Stop containers
281-
run: docker compose -f $DOCKER_COMPOSE_FILE down || true
282+
run: docker compose --progress quiet -f $DOCKER_COMPOSE_FILE down || true
282283
massive:
283284
name: Massive Cluster
284285
timeout-minutes: 10
@@ -322,9 +323,9 @@ jobs:
322323
sudo sysctl -w net.ipv4.tcp_max_syn_backlog=1024 # backlog setting
323324
sudo sysctl -w net.core.somaxconn=1024 # up the number of connections per port
324325
- name: Pull Docker images
325-
run: docker compose -f $DOCKER_COMPOSE_FILE pull
326+
run: docker compose --progress quiet -f $DOCKER_COMPOSE_FILE pull
326327
- name: Run containers
327-
run: docker compose -f $DOCKER_COMPOSE_FILE up -d
328+
run: docker compose --progress quiet -f $DOCKER_COMPOSE_FILE up -d
328329
- name: Print memory info
329330
run: free -w
330331
- name: Wait for Redis cluster to be ready
@@ -338,4 +339,4 @@ jobs:
338339
env:
339340
PROFILE_MODE: pipelining_in_moderation
340341
- name: Stop containers
341-
run: docker compose -f $DOCKER_COMPOSE_FILE down || true
342+
run: docker compose --progress quiet -f $DOCKER_COMPOSE_FILE down || true

Rakefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ require 'bundler/gem_helper'
77
RuboCop::RakeTask.new
88
Bundler::GemHelper.install_tasks
99

10-
SLUGGISH_TEST_TYPES = %w[broken scale state].freeze
10+
SLUGGISH_TEST_TYPES = %w[down broken scale state].freeze
1111

1212
task default: :test
1313

bin/pubsub

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,9 @@ module PubSubDebug
5353
ensure
5454
sleep 1.0
5555
end
56-
rescue StandardError => e
56+
rescue StandardError, SignalException => e
5757
log "#{role}: dead: #{e.class}: #{e.message}"
58+
ps&.close
5859
raise
5960
end
6061
end

bin/singlepiptx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,12 @@ module SinglePipTxDebug
5050
def spawn_transaction(cli)
5151
Thread.new(cli) do |r|
5252
role = 'Transaction'
53+
i = 0
5354

5455
loop do
5556
handle_errors(role) do
56-
reply = r.multi do |tx|
57+
reply = r.multi(watch: i.odd? ? %w[transaction] : nil) do |tx|
58+
i += 1
5759
tx.call('incr', 'transaction')
5860
tx.call('incr', 'transaction')
5961
tx.call('incr', 'transaction')

0 commit comments

Comments
 (0)