diff --git a/docs/managed-update-recovery-implementation.md b/docs/managed-update-recovery-implementation.md index 1ede00ea..39ed4cdb 100644 --- a/docs/managed-update-recovery-implementation.md +++ b/docs/managed-update-recovery-implementation.md @@ -495,3 +495,15 @@ refusal. Bounded private failure diagnostics now preserve the controller's reaso without exposing stderr in the public RPC response. The previously recorded 2,025 Rust tests predate these final helper changes; a matching executable and final combined receipt remain required. + +The matching c58d1180 VM build passed with unchanged inputs. A second actual +RPC operation, `7d2ea2ae-7b42-4a2c-9095-f0ef2ab52048`, successfully drained all +seven recovered-image originals (including the relay's owned lineage admission) +and completed backup. Private diagnostics identified a **10-second pg_isready +probe TimeoutExpired**, not a schema mismatch. Pre-target recovery again reached +Restored with cleanup complete. The readiness loop now treats probe timeout as +not ready only within its existing 90-second overall budget, caps each attempt +and sleep by remaining time, and rejects success after the deadline. No mutation +or pg_restore timeout is retried. **58 pure controller tests pass**, including +ready-after-timeout, expired-deadline cleanup and late-success refusal. Another +matching executable/full transaction and final combined suite remain pending. diff --git a/scripts/indeehub-maintenance-controller.py b/scripts/indeehub-maintenance-controller.py index f04cd5d5..0cbc5556 100644 --- a/scripts/indeehub-maintenance-controller.py +++ b/scripts/indeehub-maintenance-controller.py @@ -704,12 +704,16 @@ class Controller: # TCP readiness waits for the final server, avoiding interrupted restore. deadline=time.monotonic()+90 while True: + remaining=deadline-time.monotonic() + require(remaining>0,'Backup restore database did not become ready') try: - self.run(['podman','exec',identifier,'pg_isready','-h','127.0.0.1','-U','indeedhub','-d','indeedhub'],timeout=10) - break - except subprocess.CalledProcessError: - require(time.monotonic()0,'Backup restore database did not become ready') + time.sleep(min(0.5,remaining));continue + require(time.monotonic()