feat(config-upgrade-snapshot): decode host/queue admin-state frames on checkpoint load
load_snapshot_entities' queue-frame decode migrates from the old raw
{name_len,name,status} layout to {payload_len, capnp QueueAdminState
bytes}, still calling the unmodified restore_queue_state. Adds a new
host-frame section decode after queues, dispatching to
restore_host_state (worker.c, task 3) with the same bounds-checking
and restore-before-advance discipline as the existing job/queue loops.
Un-ignores test_snapent_load_snapshot_restores_entities_before_advancing_position
(blocked since task 2.2) -- now passes for real. Also fixes a genuine
regression in test_snapshot_recv_out_of_order_chunks_assemble_correctly
(test_config_repl.c): its synthetic checkpoint-body filler landed on
the new host_count field's offset, tripping the cluster==NULL guard --
pinned to a well-formed host_count=0, matching that test's existing
fmt/job_count/queue_count precedent. Task 4 of 19.
Requirements: 1.10
This commit is contained in:
parent
5b1600a8b2
commit
00cd26a927
4 changed files with 347 additions and 60 deletions
|
|
@ -3766,11 +3766,17 @@ static void test_snapshot_recv_out_of_order_chunks_assemble_correctly(void)
|
|||
* entity-bearing checkpoint (same reason as
|
||||
* test_snapshot_recv_two_chunks_assembles_and_renames above): legacy
|
||||
* 57-byte header (cfgref_present=0) + format_version=2 + job_count=0 +
|
||||
* queue_count=0, then filler out to 256 bytes. The filler is
|
||||
* position-dependent (distinct per source byte, not per chunk) so ANY
|
||||
* chunk landing at the wrong file offset is immediately detectable via
|
||||
* a whole-buffer memcmp, regardless of which physical chunk a given
|
||||
* structural field happens to fall in. */
|
||||
* queue_count=0 + host_count=0 (config-upgrade-snapshot task 4 --
|
||||
* load_snapshot_entities now reads a host section after the queue
|
||||
* section, so it must likewise be pinned to a well-formed 0 here rather
|
||||
* than left as position-dependent filler), then filler out to 256
|
||||
* bytes. The filler is position-dependent (distinct per source byte,
|
||||
* not per chunk) so ANY chunk landing at the wrong file offset is
|
||||
* immediately detectable via a whole-buffer memcmp, regardless of
|
||||
* which physical chunk a given structural field happens to fall in --
|
||||
* except for the 4 structural-field byte ranges explicitly overlaid
|
||||
* below (fmt/job_count/queue_count/host_count), which must stay
|
||||
* well-formed for the load to succeed at all. */
|
||||
uint64_t snap_lsn = 400;
|
||||
size_t total_size = 256;
|
||||
uint8_t body[256];
|
||||
|
|
@ -3783,9 +3789,11 @@ static void test_snapshot_recv_out_of_order_chunks_assemble_correctly(void)
|
|||
* (config-upgrade-snapshot task 1 bumped 1->2) */
|
||||
uint32_t fake_job_count = 0u;
|
||||
uint32_t fake_queue_count = 0u;
|
||||
uint32_t fake_host_count = 0u;
|
||||
memcpy(body + 57, &fake_fmt, sizeof(fake_fmt));
|
||||
memcpy(body + 61, &fake_job_count, sizeof(fake_job_count));
|
||||
memcpy(body + 65, &fake_queue_count, sizeof(fake_queue_count));
|
||||
memcpy(body + 69, &fake_host_count, sizeof(fake_host_count));
|
||||
|
||||
persist_t *p = calloc(1, sizeof(persist_t));
|
||||
TEST_ASSERT_NOT_NULL(p);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue