From d43ae58edc72d873a8a339b0ff689b2b798a71d5 Mon Sep 17 00:00:00 2001 From: Rongsong Shen Date: Sat, 26 Sep 2026 15:16:46 +0000 Subject: [PATCH] chore(buglog): bug-1870 fixed (63fd3d2a) Co-Authored-By: Claude Opus 5.5 (1M context) --- .wolf/buglog.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.wolf/buglog.json b/.wolf/buglog.json index 41a97f29..384b5234 100644 --- a/.wolf/buglog.json +++ b/.wolf/buglog.json @@ -28096,7 +28096,7 @@ "error_message": "Controller job snapshot/checkpoint drops job.exit_info: the capnp Job struct (controller.capnp) has no exit-info field, so capnp_encode_job() never writes it and a job restored from a snapshot (rather than WAL replay) has exit_info NULL for both DONE/EXIT (FINISH) and failed (FAIL) jobs", "file": "src/schema/controller.capnp", "root_cause": "struct Job in src/schema/controller.capnp has finishtime/runtime/pidinfo/pendreason but no exit code; xce_job_t.exit_info (job_exitinfo_t*) has no capnp mapping. bug-1689 and bug-1754 made WAL_JOB_FINISH/WAL_JOB_FAIL carry the exit code, but anything restored from a checkpoint/entity snapshot after WAL truncation loses it (persistence.md field-completeness).", - "fix": "", + "fix": "UPDATE (2026-09-26): live-verified by the bug-1870 force-snapshot soak (real snapshot install, 63fd3d2a)", "tags": [ "persistence", "snapshot", @@ -28162,9 +28162,9 @@ }, { "id": "bug-1870", - "status": "open", + "status": "fixed", "status_updated": "2026-09-26", - "status_note": "found while soak-verifying bug-1867; blocks live verification of snapshot restore", + "status_note": "63fd3d2a: checkpoints no longer write the LSN-consuming WAL_CHECKPOINT marker; force-snapshot, config-upgrade-wal-trim, sequential soaks PASS.", "timestamp": "2026-09-26T09:55:09Z", "error_message": "xce-test-ha --force-snapshot FAIL: 'could not submit 110 jobs to trigger a checkpoint' -- writes stall right after the first max-wal-records checkpoint. The primary's WAL holds a CHECKPOINT entry (plen 0) at the checkpoint LSN that no standby ever receives (primary ctrl-1: 109 JOB_SUBMIT, 110 CHECKPOINT, 111 JOB_SUBMIT; standbys stop at 109). Every later AppendEntries carries prevIdx=, standbys reply ae_reject_logmismatch, the primary marks catch-up and re-sends the last common entry forever: 'commit: async continuation deadline expired without commit', 'HA quorum lost: connected=0'.", "file": "src/controller/persist.c (checkpoint marker append), src/controller/repl.c / config_repl.c (broadcast / catch-up)",