41 lines
2.7 KiB
Markdown
41 lines
2.7 KiB
Markdown
---
|
|
id: "bug-1725"
|
|
status: "fixed"
|
|
status_updated: "2026-10-03"
|
|
status_note: ""
|
|
component: "xceadmin"
|
|
severity: "unknown"
|
|
timestamp: "2026-08-28T00:00:00Z"
|
|
last_seen: "2026-10-03T07:45:06Z"
|
|
occurrences: 2
|
|
files: ["src/xceadmin/tests/test_e2e_live_ha_push.py"]
|
|
tags: ["xceadmin", "config-push", "redirect", "OPCode_upgradeConfig", "stale-test", "design-doc-sync", "roadmap-sync", "race-condition", "config_activate_committed", "found-live", "root-caused", "live-verified"]
|
|
related: ["bug-1724", "bug-1700", "bug-1701", "bug-1468"]
|
|
fix_commits: ["362098b1"]
|
|
legacy: true
|
|
---
|
|
|
|
# bug-1725: After bug-1724's fix made…
|
|
|
|
## Description
|
|
After bug-1724's fix made test_live_config_push_against_standby_returns_standby_rejection_not_redirect actually execute (previously always skipped), it FAILED for real: pushing config to a standby now redirects to the primary and succeeds, contradicting the test's own hard-coded 'standby flatly rejects, no redirect' assertions. Separately, the rewritten success-path test's reused _assert_primary_committed() helper intermittently failed its 4th assertion ('config activated from committed marker tag=...' not found in the primary's log immediately after the push CLI returned success).
|
|
|
|
## Environment
|
|
_Not recorded (migrated from buglog.json)._
|
|
|
|
## Reproduction
|
|
_Not recorded (migrated from buglog.json)._
|
|
|
|
## Root cause
|
|
Corrected 2026-10-03. Part (1) of the original entry (stale standby-redirect assertion) was fixed earlier. Part (2), the recurring flake: the controller replies to the push before two of the lines the tests assert are logged — "Config upgraded to tag=" is logged right after `xce_reply()` (`config_repl.c` ~1865-1873) and "config activated from committed marker" comes from `config_activate_committed()` (`config_repl.c` ~376) on the asynchronous WAL apply pump. `test_e2e_live_push.py` read the log once with no polling (the 2026-10-03 recurrence), and the HA helper polled only for the activation line, not "Config upgraded".
|
|
|
|
## Fix
|
|
Shared `assert_primary_committed()` in `src/xceadmin/tests/_live_e2e_common.py` polls (5 s) until the commit, upgrade and activation lines are all present, then asserts each; both live tests use it. Fix commit 362098b1.
|
|
|
|
## Verification
|
|
- Test: helper unit tests in `src/xceadmin/tests/test_live_e2e_common.py` (lines logged after the reply are waited for; missing activation line fails; missing "Config upgraded" line fails) — the old single-read and activation-only patterns fail deterministically when the late lines are written 0.3 s after the read; GREEN after. Live tests looped 95 runs (incl. heavy CPU load) with 0 bug-1725 failures.
|
|
- Suites: xceadmin 373 passed, 2026-10-03.
|
|
- Live: n/a
|
|
|
|
## References
|
|
- Related: bug-1724, bug-1700, bug-1701, bug-1468
|