diff --git a/.kiro/specs/ha-repl-hardening/tasks.md b/.kiro/specs/ha-repl-hardening/tasks.md index b5b022f..f0fab31 100644 --- a/.kiro/specs/ha-repl-hardening/tasks.md +++ b/.kiro/specs/ha-repl-hardening/tasks.md @@ -17,7 +17,7 @@ - _Requirements: 1.1, 1.3_ - _Boundary: Wire Protocol (controller.capnp)_ -- [ ] 1.2 Extend `WalCatchupEntry` for batch support in controller.capnp +- [x] 1.2 Extend `WalCatchupEntry` for batch support in controller.capnp - Add `entries :List(WalCatchupEntry)` field for multiple entries per message - Regenerate capnp bindings; verify compilation - Compilation succeeds; single-entry decode path still works diff --git a/src/include/typemap.h b/src/include/typemap.h index df2aded..f3a70f6 100644 --- a/src/include/typemap.h +++ b/src/include/typemap.h @@ -286,10 +286,12 @@ typedef struct { xce_data_t *payload; } snapshot_transfer_t; -typedef struct { - uint64_t lsn; - uint8_t entry_type; - xce_data_t *payload; +typedef struct wal_catchup_entry { + uint64_t lsn; + uint8_t entry_type; + xce_data_t *payload; + int n_entries; /* batch: number of sub-entries */ + struct wal_catchup_entry **entries; /* batch: array of sub-entry pointers */ } wal_catchup_entry_t; /* ── Persistence Cap'n Proto mapped types (P0-9) ───────────────────── diff --git a/src/schema/controller.capnp b/src/schema/controller.capnp index 7ccf3f3..49ce1c9 100644 --- a/src/schema/controller.capnp +++ b/src/schema/controller.capnp @@ -838,6 +838,7 @@ struct WalCatchupEntry $C.mapname("wal_catchup_entry_t") { lsn @0 :UInt64 $C.mapname("lsn"); entryType @1 :UInt8 $C.mapname("entry_type"); payload @2 :Data $C.mapname("payload"); + entries @3 :List(WalCatchupEntry) $C.mapname("entries") $C.maplistcount("n_entries"); } struct CtrlHelloRequest $C.mapname("ctrl_hello_req_t") {