forked from lei.chen/myxce
feat: implement restore_job/worker_from_capnp for WAL recovery
WAL hooks now write real Cap'n Proto payloads instead of stub uint32_t: - WAL_JOB_SUBMIT: full xce_job_t serialized via encode_Job/write_Job - WAL_WORKER_CTRL: [uint32_t detail][xce_worker_t capnp] via encode_Worker - Other job events (START/FINISH/FAIL/STOP etc): uint64_t jobid only restore_job(): deserializes Cap'n Proto xce_job_t, guards against duplicate replay with key_find check, then calls create_job() worker_from_capnp(): skips 4-byte detail prefix, deserializes xce_worker_t, guards against duplicate replay, then calls restore_worker() join.c: pass worker_t* (looked up by idx via vget) to WORKER_JOIN hook so persist hook can serialize worker data without touching workermgr RTTI
This commit is contained in:
parent
b80ca3deaa
commit
9b6a91a89e
4 changed files with 239 additions and 42 deletions
|
|
@ -64,8 +64,12 @@ static int handle_worker_join(cluster_t* c, endpoint_t* ep,
|
|||
reply.status = idx;
|
||||
reply.data_which = RequestReply_data_nodata;
|
||||
|
||||
/* Look up the newly added worker so the persist hook can serialize it */
|
||||
worker_t* w = NULL;
|
||||
if (idx >= 0)
|
||||
vget(c->workermgr, idx, (void**)&w);
|
||||
xce_run_hooks(&(c->hooksys), XCE_CONTROLLER_HOOK_WORKER, HOOK_AFTER_EVENT,
|
||||
HOOK_DETAIL_WORKER_JOIN, c, from->name, idx);
|
||||
HOOK_DETAIL_WORKER_JOIN, c, w);
|
||||
xce_reply(ep, c->myhost, &reply);
|
||||
unlock(c->workermgr);
|
||||
if (idx < 0) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue