forked from lei.chen/myxce
extract_data() (src/lib/request.c), the shared reassembly step every inbound push passes through inside vtask_entry() before any receiver's handler runs, had no case for Data_data_jobArray -- it hit default: rc=-EINVAL. Because vtask_entry()'s callnext check treats any nonzero return (including a negative errno) as "reassembly complete, proceed," this never surfaced as an error: the real payload was freed and the receiver silently handed an empty, zeroed dataset_t, with no log anywhere in the chain. Tasks 5.1-5.3 were each individually correct and tested in isolation, but the feature was dead on the real wire end-to-end. Adds case Data_data_jobArray: passing the single, unchunked descriptor straight through (no pagination needed, unlike the existing LIST-shaped cases) and nulls the source pointer after transfer -- verified this is not cosmetic, since free_Request()'s pushmsg case would otherwise double-free it via free_Data()'s live Data_data_jobArray branch. Proven with a real xce_encode()/xce_decode() round-trip through the fixed extract_data() -> sched_handle_dataset() -> sched_on_job_array() (task 5.3, unmodified) chain, not just a unit-level check on extract_data() alone. Also confirms task 5.4's future API-server receive path shares this exact fix, since both go through the same xcecli_ctx_init() -> vtask_entry() -> extract_data() pipeline. One self-flagged, non-blocking residual gap (pre-existing since task 5.3, out of this task's request.c-only boundary): dataset->rows for the jobArray case is never deep-freed downstream, leaking one bounded xce_job_submit_t per successfully-delivered array push commit. Task 5.3b of job-array-single-wal-record (Requirements 6.1, 6.2, 6.4, 8.4). Inserted mid-run after independent review confirmed the gap; user confirmed sequencing (fix now, before task 5.4). |
||
|---|---|---|
| .. | ||
| failover_harness.h | ||
| test.c | ||
| test_bitset.c | ||
| test_cluster.c | ||
| test_cluster_parse.c | ||
| test_config.c | ||
| test_ctrlstatus.c | ||
| test_delay.c | ||
| test_error.c | ||
| test_group.c | ||
| test_hooks.c | ||
| test_htab.c | ||
| test_htab_int.c | ||
| test_idgen.c | ||
| test_jobj.c | ||
| test_jobj_hardening.c | ||
| test_kv.c | ||
| test_kvmgr.c | ||
| test_kvmgr_capture.c | ||
| test_libxce_retry.c | ||
| test_limit.c | ||
| test_netio_arm_failure.c | ||
| test_netio_bounded_connect.c | ||
| test_netio_close_propagation.c | ||
| test_netio_on_connected.c | ||
| test_netio_on_fini.c | ||
| test_ordq.c | ||
| test_preason.c | ||
| test_qobj.c | ||
| test_raft.c | ||
| test_request.c | ||
| test_request_send_propagation.c | ||
| test_resmgr_fixture.c | ||
| test_resmgr_fixture.h | ||
| test_resreq.c | ||
| test_select.c | ||
| test_utils.c | ||
| test_vtask_admission.c | ||
| test_wal_wire.c | ||
| test_wobj.c | ||
| test_xlist.c | ||
| test_xstring.c | ||
| test_xvec.c | ||
| test_zarray.c | ||
| test_zarray_cow.c | ||