Skip to content

Commit 57d193a

Browse files
committed
Noresetgen verifies gen is preserved across bounce
Signed-off-by: mhannum <mhannum@bloomberg.net>
1 parent e9d8526 commit 57d193a

File tree

5 files changed

+129
-2
lines changed

5 files changed

+129
-2
lines changed

tests/noresetgen.test/Makefile

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
ifeq ($(TESTSROOTDIR),)
2+
include ../testcase.mk
3+
else
4+
include $(TESTSROOTDIR)/testcase.mk
5+
endif
6+
export CHECK_DB_AT_FINISH=0
7+
ifeq ($(TEST_TIMEOUT),)
8+
export TEST_TIMEOUT=20m
9+
endif
10+

tests/noresetgen.test/lrl.options

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
# Use default options - features that preserve generation are enabled by default
2+
# This test verifies that generation number is preserved and increments across cluster restarts
3+
4+
logmsg level debug

tests/noresetgen.test/runit

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
#!/usr/bin/env bash
2+
3+
bash -n "$0" | exit 1
4+
5+
. ${TESTSROOTDIR}/tools/runit_common.sh
6+
7+
. ${TESTSROOTDIR}/tools/cluster_utils.sh
8+
9+
export debug=1
10+
[[ "$debug" == "1" ]] && set -x
11+
12+
db=$1
13+
cnt=$(echo $CLUSTER | wc -w)
14+
15+
if [[ -z "$CLUSTER" || $cnt -lt 3 ]]; then
16+
echo "This test requires a clustered installation of at least 3 nodes"
17+
exit 0
18+
fi
19+
20+
21+
function run_test {
22+
echo "=== Starting generation preservation test (default options) ==="
23+
24+
# Get initial master and generation
25+
master=$(get_master)
26+
initial_gen=$(get_node_gen $master)
27+
echo "Initial master: $master"
28+
echo "Initial generation: $initial_gen"
29+
30+
# Test: Stop and restart cluster 10 times, verify generation increments each time
31+
echo "=== Testing generation preservation through cluster restarts ==="
32+
33+
prev_gen=$initial_gen
34+
for i in {1..10}; do
35+
# Get current master and generation before restart
36+
master=$(get_master)
37+
current_gen=$(get_node_gen $master)
38+
echo " Iteration $i: gen=$current_gen, master=$master"
39+
40+
echo " Writing checkpoint"
41+
master=$(get_master)
42+
$CDB2SQL_EXE ${CDB2_OPTIONS} $DBNAME --host $master "exec procedure sys.cmd.send('flush')"
43+
44+
sleep 5
45+
46+
# Stop entire cluster
47+
echo " Exiting all nodes"
48+
exit_all_nodes
49+
50+
sleep 5
51+
52+
# Verify all nodes are down
53+
for node in $CLUSTER; do
54+
$CDB2SQL_EXE -admin ${CDB2_OPTIONS} $db --host $node "select 1" >/dev/null 2>&1
55+
if [[ $? -eq 0 ]]; then
56+
kill_by_pidfile ${TMPDIR}/${DBNAME}.${node}.pid
57+
fi
58+
done
59+
60+
# Verify all nodes are down
61+
for node in $CLUSTER; do
62+
$CDB2SQL_EXE -admin ${CDB2_OPTIONS} $db --host $node "select 1" >/dev/null 2>&1
63+
if [[ $? -eq 0 ]]; then
64+
failexit "Node $node is still up after exit & kill"
65+
fi
66+
done
67+
68+
# Restart entire cluster
69+
echo " Restarting entire cluster"
70+
start_all_nodes
71+
sleep 5
72+
73+
# Wait for cluster coherency
74+
wait_for_cluster
75+
76+
# Get new master and generation after restart
77+
master=$(get_master)
78+
new_gen=$(get_node_gen $master)
79+
echo " After restart: gen=$new_gen, new_master=$master"
80+
81+
# Verify generation incremented
82+
if [[ $new_gen -le $prev_gen ]]; then
83+
stop_all_nodes
84+
failexit "Generation did not increment after restart (prev=$prev_gen, new=$new_gen)"
85+
else
86+
echo " SUCCESS: Generation incremented ($prev_gen -> $new_gen)"
87+
fi
88+
89+
prev_gen=$new_gen
90+
done
91+
92+
final_gen=$(get_node_gen $master)
93+
echo "=== Test completed successfully ==="
94+
echo "Summary:"
95+
echo " Initial generation: $initial_gen"
96+
echo " Final generation: $final_gen"
97+
echo " Total cluster restarts: 10"
98+
echo " Generation preserved and incremented correctly: YES"
99+
}
100+
101+
run_test
102+
stop_all_nodes
103+
echo "Success"

tests/sqllogfill_reset_gen.test/runit

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ function check_ignore_message {
7272
fi
7373
}
7474

75-
function runit {
75+
function run_test {
7676
echo "=== Starting SQL logfill generation wraparound test ==="
7777

7878
# Get initial master
@@ -228,6 +228,6 @@ function runit {
228228
echo " Records verified: $count_after"
229229
}
230230

231-
runit
231+
run_test
232232
stop_all_nodes
233233
echo "Success"

tests/tools/cluster_utils.sh

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -393,6 +393,16 @@ downgrade_master() {
393393
wait_for_cluster
394394
}
395395

396+
exit_all_nodes() {
397+
if [[ -z "$CLUSTER" ]]; then
398+
$CDB2SQL_EXE -admin $CDB2_OPTIONS --tabs $DBNAME default "exec procedure sys.cmd.send(\"exit\")"
399+
return
400+
fi
401+
for node in $CLUSTER; do
402+
$CDB2SQL_EXE -admin $CDB2_OPTIONS --tabs $DBNAME --host $node "exec procedure sys.cmd.send(\"exit\")"
403+
done
404+
}
405+
396406
stop_all_nodes() {
397407
if [[ -z "$CLUSTER" ]]; then
398408
kill_by_pidfile ${TMPDIR}/${DBNAME}.pid

0 commit comments

Comments
 (0)