fix(schema): rename struct Data -> XceData to unshadow capnp builtin blob type
controller.capnp declared `struct Data $C.mapname("xce_data_t")` (an
OPCode_get query-result tagged union) at file scope, which shadows
Cap'n Proto's builtin Data blob type for every later `: Data` field in
the same file. This silently miscompiled 7 fields across 6 structs as
a struct-pointer type instead of a raw byte blob: UpgradeConfigRequest
.sha256/.bytes, ReplConfigReply.sha256/.bytes, ReplConfigPushRequest
.sha256/.bytes, ReplEnvelope.payload, SnapshotTransfer's chunk
payload, WalCatchupEntry.payload/.batchPayloads, and CtrlHelloRequest
.key. Production C code had already routed around it for years via
hand-rolled raw capn_ptr manipulation (see request.c's own comments);
nothing before now needed the generated codec/accessors to actually
work for these fields.
Renamed the local struct to XceData (capnp-level name only; the
$C.mapname("xce_data_t") C typedef is unchanged) and explicitly
repointed getdata/pushmsg at XceData by name, since those two fields
correctly want the local tagged union. Updated every derived
generated-identifier reference across 19 hand-written files spanning
controller, lib, scheduler, and the Go apiserver/xcecli CGo bindings.
Fixed 5 call sites in lib/request.c that had been typed against the
old workaround alias but now legitimately receive the correct
capn_data type (a pure type-name swap -- Data_ptr/XceData_ptr and
capn_data share the identical {capn_ptr p} layout).
Verified via full rebuild+test: lib (1/1), controller (3/3, incl. the
job-array push regression tests), scheduler (15/15), Go apiserver +
xcecli (all packages green), and a direct pycapnp round-trip proving
UpgradeConfigRequest.sha256/.bytes now encode/decode correctly.
Bug: bug-1461 (.wolf/buglog.json). Unblocks admin-config-tool task 3.3.
This commit is contained in:
parent
7ed3a3941f
commit
e53c086ec5
21 changed files with 144 additions and 144 deletions
|
|
@ -275,7 +275,7 @@ static void test_data_job_array_variant_round_trip(void)
|
|||
|
||||
xce_data_t data;
|
||||
memset(&data, 0, sizeof(data));
|
||||
data.table = Data_data_jobArray;
|
||||
data.table = XceData_data_jobArray;
|
||||
data.data.job_array = &src;
|
||||
|
||||
/* Encode -> flat wire buffer -> decode, exercising both the schema
|
||||
|
|
@ -285,8 +285,8 @@ static void test_data_job_array_variant_round_trip(void)
|
|||
capn_init_malloc(&c);
|
||||
struct capn_segment *cs = capn_root(&c).seg;
|
||||
|
||||
Data_ptr p;
|
||||
encode_Data_ptr(cs, &p, &data);
|
||||
XceData_ptr p;
|
||||
encode_XceData_ptr(cs, &p, &data);
|
||||
capn_setp(capn_root(&c), 0, p.p);
|
||||
|
||||
int64_t sz = capn_size(&c);
|
||||
|
|
@ -298,15 +298,15 @@ static void test_data_job_array_variant_round_trip(void)
|
|||
|
||||
struct capn d;
|
||||
TEST_ASSERT_EQUAL_INT(0, capn_init_mem(&d, buf, (size_t)sz, 0));
|
||||
Data_ptr dp;
|
||||
XceData_ptr dp;
|
||||
dp.p = capn_getp(capn_root(&d), 0, 1);
|
||||
struct Data wire;
|
||||
read_Data(&wire, dp);
|
||||
struct XceData wire;
|
||||
read_XceData(&wire, dp);
|
||||
xce_data_t dst;
|
||||
memset(&dst, 0, sizeof(dst));
|
||||
decode_Data(&dst, &wire);
|
||||
decode_XceData(&dst, &wire);
|
||||
|
||||
TEST_ASSERT_EQUAL_INT(Data_data_jobArray, dst.table);
|
||||
TEST_ASSERT_EQUAL_INT(XceData_data_jobArray, dst.table);
|
||||
TEST_ASSERT_NOT_NULL(dst.data.job_array);
|
||||
TEST_ASSERT_EQUAL_UINT64(5000ULL, dst.data.job_array->jobid);
|
||||
TEST_ASSERT_EQUAL_UINT64(250ULL, dst.data.job_array->array_size);
|
||||
|
|
@ -320,12 +320,12 @@ static void test_data_job_array_variant_round_trip(void)
|
|||
/* Untouched: the existing schedjobs/jobs/etc. wire layout is unaffected --
|
||||
* spot-check the enum values these variants relied on before this change
|
||||
* did not shift underneath them. */
|
||||
TEST_ASSERT_EQUAL_INT(0, (int)Data_data_schedjobs);
|
||||
TEST_ASSERT_EQUAL_INT(2, (int)Data_data_jobs);
|
||||
TEST_ASSERT_EQUAL_INT(5, (int)Data_data_resvals);
|
||||
TEST_ASSERT_EQUAL_INT(6, (int)Data_data_jobArray);
|
||||
TEST_ASSERT_EQUAL_INT(0, (int)XceData_data_schedjobs);
|
||||
TEST_ASSERT_EQUAL_INT(2, (int)XceData_data_jobs);
|
||||
TEST_ASSERT_EQUAL_INT(5, (int)XceData_data_resvals);
|
||||
TEST_ASSERT_EQUAL_INT(6, (int)XceData_data_jobArray);
|
||||
|
||||
free_Data(&dst);
|
||||
free_XceData(&dst);
|
||||
capn_free(&d);
|
||||
free(buf);
|
||||
printf("test_data_job_array_variant_round_trip: PASS\n");
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue