Commit f351504
test(harness): release-gate cleanup — cli-matrix/replay/burnin/cli-parity (batch 4) + unmask BUG-048 (#162)
* test(cli-matrix): fix bug-278 to exercise the real SkipDisk auto-clear contract
The cell stamped DrbdOptions/SkipDisk=True on a HEALTHY UpToDate replica
and read the prop back as a setup precondition. But the product's
SkipDiskClearer correctly auto-clears the observer-owned stamp on every
reconcile of a healthy slot (HasDisklessVolume==false), so the satellite
wiped the stamp between the SSA apply and the read-back — the precondition
raced the product's correct behaviour and aborted with "stamp did not
land". The stamped state on a healthy disk is transient by design.
Restructure into a two-sided contract:
A. Persistence (positive control): stamp on a genuinely-Diskless
replica, where the auto-clear gate is intentionally closed, and
assert the stamp survives — proving the clearer is selective.
B. Auto-clear: stamp on a healthy replica, restart its satellite (the
Talos reattach shape), and poll for the stamp's ABSENCE (the steady
state) plus disk UpToDate, instead of reading back the doomed stamp.
No product behaviour changed. Validated on stand "big".
Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Andrei Kvapil <kvapss@gmail.com>
* test(cli-matrix): fix SIGPIPE (exit 141) in drbd-options-hierarchy wait loop
The cell picked a diskful node via `linstor_diskful_nodes | head -1`:
head closed the pipe after the first node while the helper's internal
`while read` loop was still emitting the rest, so under `set -o pipefail`
the pipeline exited 141 and `set -e` aborted the cell before the C1/C2
assertions ran. The replay twin of this scenario passes, confirming the
product is correct.
Consume the helper via mapfile over a process substitution (no pipe) —
the convention every other cell follows — and use the existing
wait_diskful_count helper for the convergence wait. Also harden
show_max_buffers: capture drbdsetup output into a variable before the
awk `... exit`, so the early pipe close can never SIGPIPE the writer.
Validated on stand "big".
Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Andrei Kvapil <kvapss@gmail.com>
* test(replay): fix snap create-multiple CLI form so BUG-046 L7 coverage runs
The replay called `snapshot create-multiple` with positional colon args
(`{{rd}}:grp bug046-multi-b:grp`), which linstor-client 1.27.1 rejects
with argparse exit 2 (`-r`/--resource_names is required). The step never
ran, so BUG-046's L7 group-consistency coverage was dead.
Use the correct CLI form: the snapshot name is a single positional and
the resource names go to `-r`. The snapshot name must come BEFORE `-r`,
otherwise argparse's variadic `-r A B grp` greedily consumes `grp` and
leaves no positional ("too few arguments"). Mirrors the multi-resource
form the cli-matrix cell drives.
Validated PASS on stand "big".
Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Andrei Kvapil <kvapss@gmail.com>
* test(burnin): guard md5 read against transient dd failures to kill false alarms
The md5-consistency check compared primary vs peer md5 without checking
dd's exit code. Under churn dd can fail to open /dev/drbdN (EAGAIN) and
read zero bytes; md5("") is a fixed digest, so the unguarded read raised
a FALSE mismatch alarm that would drown out a real future divergence.
Guard each read with dd's exit status (PIPESTATUS) and the byte count
(must equal the full 1 MiB); the md5 is still piped straight from dd into
md5sum so binary NUL bytes are never routed through a shell variable. On
a transient read failure the iteration emits a sentinel and its compare
is SKIPPED (neither PASS nor FAIL) rather than reported as a mismatch.
Validated on stand "big" (12/12 iterations pass, no false alarms).
Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Andrei Kvapil <kvapss@gmail.com>
* test(cli-parity): normalize rg-l border/DfltRscGrp drift, whitelist sp-l topology
The pool-name normalizer cleared n l / r l / v l / vd l false diffs but
left rg l / rg l --pastable as WIRE_SHAPE: after the pool token is
collapsed to <POOL>, two artefacts survived `diff -w`:
- ASCII-table border width tracks the longest cell, so BS's pool name
`stand` (5) rendered one dash wider than the oracle's `pool` (4) on
every +----+ / |====| rule line (dashes are not whitespace).
- The built-in DfltRscGrp row prints `PlaceCount: N` on upstream but a
blank cell on BS — a render choice over the same default.
Extend normalize_side_output to collapse border-char runs and strip the
DfltRscGrp PlaceCount value on both sides. rg l (05) and rg l --pastable
(20) now classify PARITY (verified against the live dev-stand raw
artefacts).
The residual `sp l` (03) divergence is genuine — the BS stand and the
upstream oracle have different storage-pool topologies, and BS's FILE_THIN
DTO leaves PoolName/SharedName blank where the oracle renders a backing
path / shared name. Whitelisted as row 03 with justification rather than
masked; sp l -m (79) and sp l --show-props (04) still catch real
capacity/driver regressions.
Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Andrei Kvapil <kvapss@gmail.com>
* test(cli-matrix): fix multi-volume-late convergence detection (null vlms)
The wait loops parsed `linstor --machine-readable resource list` for
`.vlms[].state.disk_state`, but the blockstor apiserver leaves that array
null in the golinstor JSON projection, so the jq always read empty and
the loop timed out at the vol-0 stage even though `linstor r l` (which
reads Resource.Status) showed every replica UpToDate.
Switch the convergence checks to status_disk_state / wait_diskful_count
(the CRD-backed `.status.volumes[].diskState`, the same reliable helpers
the passing cells use), resolve the diskful node set via mapfile over a
process substitution (no SIGPIPE), and probe the kernel-truth check via
on_node drbdsetup instead of the same null-projection jq.
Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Andrei Kvapil <kvapss@gmail.com>
---------
Signed-off-by: Andrei Kvapil <kvapss@gmail.com>
Co-authored-by: Claude <noreply@anthropic.com>1 parent 2b6dd2d commit f351504
7 files changed
Lines changed: 305 additions & 137 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
15 | 15 | | |
16 | 16 | | |
17 | 17 | | |
| 18 | + | |
18 | 19 | | |
19 | 20 | | |
20 | 21 | | |
| |||
71 | 72 | | |
72 | 73 | | |
73 | 74 | | |
| 75 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
135 | 135 | | |
136 | 136 | | |
137 | 137 | | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
138 | 152 | | |
139 | 153 | | |
140 | 154 | | |
141 | | - | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
142 | 158 | | |
| 159 | + | |
143 | 160 | | |
144 | 161 | | |
145 | 162 | | |
146 | 163 | | |
147 | | - | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
148 | 167 | | |
| 168 | + | |
149 | 169 | | |
150 | 170 | | |
151 | | - | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
152 | 178 | | |
153 | 179 | | |
154 | 180 | | |
| |||
Lines changed: 127 additions & 70 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
11 | 11 | | |
12 | 12 | | |
13 | 13 | | |
14 | | - | |
15 | | - | |
16 | | - | |
17 | | - | |
18 | | - | |
19 | | - | |
20 | | - | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
21 | 23 | | |
22 | | - | |
| 24 | + | |
| 25 | + | |
23 | 26 | | |
24 | | - | |
25 | | - | |
26 | | - | |
27 | | - | |
28 | | - | |
29 | | - | |
30 | | - | |
31 | | - | |
32 | | - | |
33 | | - | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
34 | 33 | | |
35 | | - | |
36 | | - | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
37 | 61 | | |
38 | 62 | | |
39 | 63 | | |
| |||
44 | 68 | | |
45 | 69 | | |
46 | 70 | | |
47 | | - | |
| 71 | + | |
48 | 72 | | |
49 | 73 | | |
50 | 74 | | |
| |||
59 | 83 | | |
60 | 84 | | |
61 | 85 | | |
62 | | - | |
63 | | - | |
64 | | - | |
65 | | - | |
66 | | - | |
67 | | - | |
68 | | - | |
69 | | - | |
70 | | - | |
71 | | - | |
72 | | - | |
73 | | - | |
74 | | - | |
75 | | - | |
76 | | - | |
77 | | - | |
78 | | - | |
79 | | - | |
80 | | - | |
81 | | - | |
82 | | - | |
83 | | - | |
84 | | - | |
85 | | - | |
86 | | - | |
87 | | - | |
88 | | - | |
89 | | - | |
90 | | - | |
91 | | - | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
92 | 95 | | |
93 | 96 | | |
94 | 97 | | |
95 | | - | |
| 98 | + | |
96 | 99 | | |
97 | 100 | | |
98 | | - | |
| 101 | + | |
99 | 102 | | |
100 | 103 | | |
101 | 104 | | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
102 | 114 | | |
103 | | - | |
104 | | - | |
105 | | - | |
106 | | - | |
107 | | - | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
108 | 154 | | |
109 | 155 | | |
110 | 156 | | |
111 | | - | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
112 | 170 | | |
113 | 171 | | |
114 | 172 | | |
| |||
119 | 177 | | |
120 | 178 | | |
121 | 179 | | |
| 180 | + | |
122 | 181 | | |
123 | 182 | | |
124 | 183 | | |
| |||
133 | 192 | | |
134 | 193 | | |
135 | 194 | | |
136 | | - | |
| 195 | + | |
137 | 196 | | |
138 | 197 | | |
139 | | - | |
140 | | - | |
141 | | - | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
142 | 201 | | |
143 | 202 | | |
144 | | - | |
145 | | - | |
146 | | - | |
| 203 | + | |
147 | 204 | | |
148 | 205 | | |
149 | 206 | | |
150 | 207 | | |
151 | 208 | | |
152 | 209 | | |
153 | 210 | | |
154 | | - | |
| 211 | + | |
155 | 212 | | |
156 | 213 | | |
157 | 214 | | |
158 | 215 | | |
159 | 216 | | |
160 | | - | |
| 217 | + | |
161 | 218 | | |
162 | | - | |
| 219 | + | |
163 | 220 | | |
164 | 221 | | |
165 | 222 | | |
| |||
175 | 232 | | |
176 | 233 | | |
177 | 234 | | |
178 | | - | |
| 235 | + | |
0 commit comments