Skip to content

Commit 5a7b068

Browse files
committed
Keep the abort cases on the strict probe verdict.
The bounded-closure judgement belongs to rounds that complete and drain the old generation. An aborted round keeps the strict verdict, which is what makes a drain that closes connections it should not have visible. rt24 also judges its probe summary instead of its liveness, and its criterion text now matches what it asserts.
1 parent 41948ef commit 5a7b068

1 file changed

Lines changed: 28 additions & 9 deletions

File tree

‎tests/integration/test_graceful_reload.sh‎

Lines changed: 28 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,8 @@ Usage: test_graceful_reload.sh -t <TARGET_IP> [options]
171171
-c, --cases <list> Comma-separated case list, or 'all'.
172172
available: precheck,baseline,rt01,rt02,rv9,gr0,
173173
rt12,rt13,rt20,rt20b,rt21,rt22,rt23,
174-
rt30,rt31 (PT-NR baselines)
174+
rt24,rt30,rt31 (rt24 and the other
175+
rt2x need a fault-injection build)
175176
--fault <name> runtime fault injection (FF_FAULT); requires a
176177
fault-injection build manifest. rt23 is the only
177178
fault case that runs on the production form
@@ -992,7 +993,7 @@ case_rt24() {
992993
say "=== case rt24 (abort, then HUP again: the surviving G_old drains a second time) ==="
993994
local rc=0 hrc=0 conf out before after found=0 done=0 deadline fetch
994995
local crit meas completions drain nworkers t0_line
995-
crit="round 1 aborts (rx ownership flip failed, G_old untouched); round 2 completes with a bounded drain (<= 15000 ms), 6/6 FSM and workers back to $WORKERS"
996+
crit="round 1 aborts (rx ownership flip failed, G_old untouched); round 2 completes with a bounded drain (<= 15000 ms), a T5 -> T0 transition, workers back to $WORKERS, and fresh_fail=0 with at most one closure per connection"
996997

997998
if [ "$FAULT" != "flip_fail_once" ]; then
998999
say "rt24: --fault=$FAULT does not match the case fault flip_fail_once"
@@ -1066,16 +1067,23 @@ case_rt24() {
10661067

10671068
meas="round1=abort round2=complete completions=$completions drain=${drain}ms bound=15000ms t5_to_t0=$t0_line workers=${nworkers}/${WORKERS} before=$before"
10681069

1069-
probe_running || { say "rt24: probe not running after the second reload"; rc=1; }
1070-
# fetch=1 is missing data; fetch=2 is the probe's own strict criterion,
1071-
# which an aborted round is expected to trip (connections are reset). The
1072-
# summary is still the evidence that G_old kept serving, so keep it.
1070+
# No liveness check: the probe (30 s) can finish before the second round is
1071+
# judged, same convention as fault_case(). Its summary is the evidence.
1072+
# fetch=1 is missing data; fetch=2 is the probe's own strict criterion, which
1073+
# an aborted round resets connections into. What has to hold is fresh_fail=0
1074+
# and at most one closure per connection (rt31's judgement).
10731075
local fetch=0
10741076
out=$(wait_client_summary "/tmp/gr_rt24_lc_out.log" 'LC_SUMMARY' 90) || fetch=$?
10751077
if [ "$fetch" = "1" ]; then
10761078
out="NO_DATA (m4_lc.py did not report within 90 s)"
1079+
say "rt24: no probe summary -- no evidence that G_old kept serving"
1080+
rc=1
10771081
elif [ "$fetch" = "2" ]; then
1078-
say "rt24: lc probe tripped its own strict criterion (an aborted round resets connections); the summary is kept as evidence"
1082+
say "rt24: lc probe tripped its own strict criterion; judging it as rt31 does"
1083+
fi
1084+
if [ "$fetch" != "1" ] && ! check_summary lc "$out" perf; then
1085+
say "rt24: lc verdict below target (closures not bounded or a fresh failure): $out"
1086+
rc=1
10791087
fi
10801088

10811089
unset FF_FAULT
@@ -1231,8 +1239,19 @@ fault_case() { # tag fault expect(ok|abort) criterion [abort-signature]
12311239
# once, which trips the probe's own strict check. What has to hold
12321240
# is a bounded closure per connection and no failure on fresh (new)
12331241
# connections -- the same rule rt31 documents for the drain.
1234-
say "$tag: lc probe tripped its own strict criterion; judging it as rt31 does (at most one closure per connection, fresh_fail=0)"
1235-
lcmode=perf
1242+
say "$tag: lc probe tripped its own strict criterion"
1243+
if [ "$expect" = ok ]; then
1244+
# A completing round drains the old generation, which closes
1245+
# each keep-alive connection once -- the same judgement rt31
1246+
# documents. An aborted round must keep the strict verdict: it
1247+
# is exactly how the drain latch closing connections it should
1248+
# not have (rt21) becomes visible.
1249+
say "$tag: judging it as rt31 does (at most one closure per connection, fresh_fail=0)"
1250+
lcmode=perf
1251+
else
1252+
say "$tag: abort round keeps the strict verdict"
1253+
rc=1
1254+
fi
12361255
fi
12371256
check_summary lc "$summary" "$lcmode" \
12381257
|| { say "$tag: lc verdict below target: $summary"; rc=1; }

0 commit comments

Comments
 (0)