The last two transactions of the "disruptive server with the old term
and outdated log" test are checked on every server as soon as the
leader replied. A successful transaction reply only guarantees that
the entry was committed by a majority; a follower may not have learned
the new commit index and applied the entry yet. The test then reads
stale data with --no-leader-only and fails:
./ovsdb-cluster.at:1104: ovs-vsctl --db=unix:s$i.ovsdb --no-leader-only \
--bare --columns=type list QoS | grep . | sort | tr -d '\n'
@@ -1 +1 @@
-lmxyz
+lxyz
Wait for the data with OVS_WAIT_UNTIL_EQUAL instead of reading it once.
The lines are joined with paste instead of tr, since the macro expects
the output to end with a newline.
Fixes: 5d1fa6e4a4b0 ("ovsdb-cluster.at: Test disruptive server with outdated
log and term.")
Signed-off-by: Timothy Redaelli <[email protected]>
---
Changes since v3:
- Use OVS_WAIT_UNTIL_EQUAL instead of OVS_WAIT_UNTIL with test, so a
failure shows the actual output (Ilya). Join the lines with
paste -s -d '\0' instead of tr -d '\n' | sed '$a\', since BSD sed
adds no newline for '$a\' and busybox sed always adds one.
Changes since v2:
- Keep the compact expected output (Ilya). Use OVS_WAIT_UNTIL with
test, since OVS_WAIT_UNTIL_EQUAL adds a trailing newline to the
expected output and can't match the tr -d '\n' result.
Changes since v1:
- Fixed "Fixes" line to use 12 characters hash.
---
tests/ovsdb-cluster.at | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/tests/ovsdb-cluster.at b/tests/ovsdb-cluster.at
index 1dd74e3de..9e5c8a68d 100644
--- a/tests/ovsdb-cluster.at
+++ b/tests/ovsdb-cluster.at
@@ -1098,12 +1098,16 @@ AT_CHECK([ovs-vsctl --db=unix:s1.ovsdb --no-leader-only
--no-wait create QoS typ
AT_CHECK([ovs-vsctl --db=unix:s1.ovsdb --no-leader-only --no-wait create QoS
type=m], [0], [ignore], [ignore])
# Check that all the servers are in the cluster and have all the data.
+# A successful transaction reply only guarantees that the entry was
+# committed by a majority. A follower may not have learned the new
+# commit index and applied it yet, so wait for every server to catch up.
for i in $(seq $n); do
AT_CHECK([ovs-appctl -t $(pwd)/s$i cluster/status $schema_name \
| grep -qE "Role: (leader|follower)"])
- AT_CHECK([ovs-vsctl --db=unix:s$i.ovsdb --no-leader-only --bare \
- --columns=type list QoS | grep . | sort | tr -d '\n'],
- [0], [lmxyz])
+ OVS_WAIT_UNTIL_EQUAL([ovs-vsctl --db=unix:s$i.ovsdb --no-leader-only \
+ --bare --columns=type list QoS | grep . | \
+ sort | paste -s -d '\0' -],
+ [lmxyz])
done
# Check that s3 never won a pre-vote.
--
2.55.0
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev