Add the full call chain for host control operations from the Go API server through the C library to the controller: - schema/controller.capnp: HostControl struct + hostctrlmsg @21 in Request.body union - include/typemap.h: xce_hostctrl_t* hostctrlmsg in body union (placed after @20 clrpreasonmsg, matching capnp ordinal) - include/client.h, xceapi.h, request.h: declarations for xcecli_hostctrl, xce_hostctrl, xce_hostctrl_req - lib/client.c: xcecli_hostctrl (validate + delegate to xce_hostctrl) - lib/xceapi.c: xce_hostctrl (validate ctx state + send + wait reply) - lib/request.c: xce_hostctrl_req (validate hostname/empty/nil, accept only HOST_OPEN/HOST_CLOSE, reject HOST_TAG/UNTAG) - lib/helper.c: Request_body_hostctrlmsg cases in xce_request_body() and xce_request_msg_name() - controller/cluster.c: OPCode_hostcontrol dispatch - controller/include/cluster.h: do_hostcontrol_op declaration - controller/worker.c: do_hostcontrol_op + fix pre-existing goto-clean bug in worker_ctrl that leaked write lock and reference on HOST_OPEN/HOST_CLOSE no-op paths TDD: 8 xce_hostctrl_req validation tests (null ep, null ctrl, null/empty hostname, HOST_DO_NONE no-op, HOST_TAG/UNTAG reject, negative action reject, HOST_OPEN/CLOSE accept via xce_request). 116/116 xcelib tests pass. CGO_ENABLED=0 Go backend tests pass. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
37 lines
1.5 KiB
C
37 lines
1.5 KiB
C
#if !defined(_XCEAPI_H_)
|
|
|
|
#define _XCEAPI_H_ 1
|
|
|
|
#include "config.h"
|
|
|
|
#include "xce/types.h"
|
|
#include "xcectx.h"
|
|
|
|
extern int xce_hello(xce_ctx_t*, char*);
|
|
extern int xce_nop(xce_ctx_t*);
|
|
extern int xce_heartbeat(xce_ctx_t*, int);
|
|
extern int xce_shutdown(xce_ctx_t*);
|
|
extern int xce_reslist(xce_ctx_t*, xce_resource_t***);
|
|
extern int xce_join(xce_ctx_t*, int, hostattrs_t*);
|
|
extern int xce_workerlist(xce_ctx_t*, xce_worker_t***);
|
|
extern int xce_jobdispatch(xce_ctx_t*, xce_job_dispatch_t*);
|
|
extern int xce_jobsubmit(xce_ctx_t*, xce_job_submit_t*, uint64_t*);
|
|
extern int xce_joblist(xce_ctx_t*, xce_job_t***);
|
|
extern int xce_clusterconf(xce_ctx_t*, xce_clusterconf_t**);
|
|
extern int xce_push(xce_ctx_t*, xce_check_fn_t, void*, int, int, int, void**);
|
|
extern int xce_update_rows(xce_ctx_t*, int, int, xlist_t*);
|
|
extern int xce_resval(xce_ctx_t*, char*, char*, xce_resval_t***);
|
|
|
|
extern int xce_notify(xce_ctx_t*, xce_notify_data_t*);
|
|
extern int xce_update_resvals(xce_ctx_t*, int, xce_resval_t**);
|
|
extern int xce_jobctrl(xce_ctx_t*, xce_jobctrl_t*);
|
|
extern int xce_queuectrl(xce_ctx_t*, xce_queuectrl_t*);
|
|
extern int xce_hostctrl(xce_ctx_t*, xce_hostctrl_t*);
|
|
extern int xce_runtask(xce_ctx_t*, xce_taskrun_t*);
|
|
extern int xce_update_jusage(xce_ctx_t*, uint64_t, int, int*, int, int*, int,
|
|
xce_rusage_t**);
|
|
extern int xce_set_pend_reason(xce_ctx_t*, xce_preason_set_t*);
|
|
extern int xce_clear_reason(xce_ctx_t*, xce_clear_reason_t*);
|
|
extern int xce_jobinfo(xce_ctx_t*, uint64_t, xce_job_t**);
|
|
|
|
#endif
|