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
|
|
@ -201,12 +201,12 @@ static void ap_scan_pushes(endpoint_t* ep, ap_push_obs_t* obs)
|
|||
rp.p = capn_getp(capn_root(&c), 0, 1);
|
||||
read_Request(&rq, rp);
|
||||
if (rq.body_which == Request_body_pushmsg) {
|
||||
struct Data d;
|
||||
struct XceData d;
|
||||
|
||||
read_Data(&d, rq.body.pushmsg);
|
||||
read_XceData(&d, rq.body.pushmsg);
|
||||
obs->n_pushes += 1;
|
||||
obs->last_data_which = (int)d.data_which;
|
||||
if (d.data_which == Data_data_jobArray) {
|
||||
if (d.data_which == XceData_data_jobArray) {
|
||||
struct JobSubmit js;
|
||||
|
||||
read_JobSubmit(&js, d.data.jobArray);
|
||||
|
|
@ -255,7 +255,7 @@ test_multi_element_job_new_produces_one_compact_jobarray_push_per_server(void)
|
|||
"job structs and not fewer than one per connected server (Req "
|
||||
"6.2, 6.4)");
|
||||
TEST_ASSERT_EQUAL_INT_MESSAGE(
|
||||
Data_data_jobArray, obs.last_data_which,
|
||||
XceData_data_jobArray, obs.last_data_which,
|
||||
"the push must encode the compact Data.jobArray descriptor, not "
|
||||
"Data.jobs (N individually-encoded job structs)");
|
||||
TEST_ASSERT_EQUAL_UINT64_MESSAGE(
|
||||
|
|
@ -302,7 +302,7 @@ static void test_single_element_job_new_is_unaffected(void)
|
|||
"an ordinary single-job notification must still produce exactly "
|
||||
"one push packet per connected API server, unchanged");
|
||||
TEST_ASSERT_EQUAL_INT_MESSAGE(
|
||||
Data_data_jobs, obs.last_data_which,
|
||||
XceData_data_jobs, obs.last_data_which,
|
||||
"a single-element notification must go through the EXISTING, "
|
||||
"UNMODIFIED apiserver_push_joblist() path (Data.jobs), never "
|
||||
"the new compact jobArray path (Req 8.1)");
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue