Merge branch 'working' into job_peek_lchen
job_peek_lchen: Add fetchfile feature (job output/error peek proxy) working: HA/Raft infrastructure (consensus, replication, config mgmt) Conflict resolution summary: - controller.capnp: fetchfile @41, fetchfilereply @18, fetchfilemsg @30 - cluster.c: bifurcated OPCode_reply for fetchfile + config-push ACK - job.c: kept full fetchfile pending-request subsystem (~183 lines) - request.c: kept both xce_fetchfile_req() and XCE_RETRY_DEFAULTS - helper.c: added missing preVoteRequest/preVoteReply mappings - All 15 new test registrations (test_cbuf.c + 14 HA tests)
This commit is contained in:
commit
3a2094a461
529 changed files with 345174 additions and 5048 deletions
|
|
@ -116,17 +116,17 @@ int xce_get_with_condition(xce_ctx_t* ctx, xce_get_t* get, void*** data)
|
|||
}
|
||||
|
||||
memset(&getreply, 0x0, sizeof(getreply));
|
||||
|
||||
|
||||
ctx->reply.u.get = &getreply;
|
||||
rc = xce_get_req(ctx->ep, get);
|
||||
if (rc < 0) {
|
||||
return rc;
|
||||
goto done;
|
||||
}
|
||||
|
||||
struct timespec _dl; cbuf_deadline_10s(&_dl);
|
||||
rc = cbuf_timedget(&(ctx->wbuf), &status, &_dl);
|
||||
if (rc < 0) {
|
||||
return rc;
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (status >= 0) {
|
||||
|
|
@ -136,6 +136,12 @@ int xce_get_with_condition(xce_ctx_t* ctx, xce_get_t* get, void*** data)
|
|||
rc = status;
|
||||
}
|
||||
|
||||
done:
|
||||
/* Always clear the destination — including on the xce_get_req/cbuf_get
|
||||
* failover error paths — so the single, untagged reply union never retains
|
||||
* the address of this now-returning stack `getreply`. A later ctrlstatus
|
||||
* reply would otherwise free that dead-stack pointer as a CtrlStatus*
|
||||
* (bug-1077, ASan stack-use-after-return). */
|
||||
ctx->reply.u.get = NULL;
|
||||
|
||||
return rc;
|
||||
|
|
@ -200,13 +206,13 @@ int xce_resval(xce_ctx_t* ctx, char* host, char* res, xce_resval_t*** vals)
|
|||
ctx->reply.u.get = &getreply;
|
||||
rc = xce_get_req(ctx->ep, &get);
|
||||
if (rc < 0) {
|
||||
return rc;
|
||||
goto done;
|
||||
}
|
||||
|
||||
struct timespec _dl; cbuf_deadline_10s(&_dl);
|
||||
rc = cbuf_timedget(&(ctx->wbuf), &status, &_dl);
|
||||
if (rc < 0) {
|
||||
return rc;
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (status >= 0) {
|
||||
|
|
@ -216,6 +222,9 @@ int xce_resval(xce_ctx_t* ctx, char* host, char* res, xce_resval_t*** vals)
|
|||
rc = status;
|
||||
}
|
||||
|
||||
done:
|
||||
/* Clear on every path (incl. the failover error returns) so the shared
|
||||
* reply union never keeps this stack `getreply` address — bug-1077. */
|
||||
ctx->reply.u.get = NULL;
|
||||
|
||||
return rc;
|
||||
|
|
@ -443,6 +452,36 @@ int xce_clusterconf(xce_ctx_t* ctx, xce_clusterconf_t** conf)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int xce_ctrlstatus(xce_ctx_t* ctx, xce_ctrlstatus_t** status)
|
||||
{
|
||||
int rc, st;
|
||||
|
||||
if ((ctx == NULL) || (status == NULL)) {
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (ctx->state != XCE_CTX_RUN) {
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
rc = xce_ctrlstatus_req(ctx->ep);
|
||||
if (rc < 0) {
|
||||
return rc;
|
||||
}
|
||||
|
||||
rc = cbuf_get(&(ctx->wbuf), &st);
|
||||
if (rc < 0) {
|
||||
return rc;
|
||||
}
|
||||
|
||||
if (st < 0) {
|
||||
return st;
|
||||
}
|
||||
|
||||
MOVE_PTR((*status), ctx->reply.u.ctrlstatus);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int xce_update_resvals(xce_ctx_t* ctx, int count, xce_resval_t** vals)
|
||||
{
|
||||
int rc;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue