myxce/src/controller/reply.c
2026-03-03 16:49:26 +08:00

78 lines
2 KiB
C

#include "config.h"
#include <errno.h>
#include <string.h>
#include <unistd.h>
#include "cluster.h"
#include "xce/cluster_def.h"
int handle_clusterconf(cluster_t* c, endpoint_t* ep, xce_request_t* request)
{
/* clang-format off */
xce_reply_t reply;
int rc = 0;
xce_clusterconf_t clusterconf = {
.name = c->myconf->cluster_config->clustername,
.wlist = {
.count = 0,
.workers = NULL
},
.uglist = {
.count = 0,
.groups = NULL
},
.hglist = {
.count = 0,
.groups = NULL
}
};
/* clang-format on */
int i;
xlist_t clist, qlist, rlist, wlist;
init_reply_by_req(&reply, request);
reply.status = 0;
reply.data_which = RequestReply_data_clusterconf;
reply.data.clusterconf = &clusterconf;
xlist_init(&clist, 256);
xlist_init(&qlist, 64);
xlist_init(&rlist, 1024);
xlist_init(&wlist, 10240);
collect_confvars(c, NULL, &clist);
clusterconf.cfglist.count = clist.count;
clusterconf.cfglist.configs = (xce_config_t**)clist.data;
collect_queues(c, NULL, &qlist);
clusterconf.qlist.count = qlist.count;
clusterconf.qlist.queues = (xce_queue_t**)qlist.data;
collect_resources(c, NULL, &rlist);
clusterconf.reslist.count = rlist.count;
clusterconf.reslist.res = (xce_resource_t**)rlist.data;
collect_workers(c, (collect_check_fn_t)check_worker_, &wlist);
clusterconf.wlist.count = wlist.count;
clusterconf.wlist.workers = (xce_worker_t**)wlist.data;
xce_reply(ep, c->myhost, &reply);
for (i = 0; i < clusterconf.wlist.count; i++) {
xce_worker_t* w = clusterconf.wlist.workers[i];
free_resval_with_idx_list(&(w->resvals_to_sched), w->nresvals_to_sched);
}
unlock_collect_queues(&qlist);
unlock_collect_workers(&wlist);
xlist_fini(&clist);
xlist_fini(&qlist);
xlist_fini(&rlist);
xlist_fini(&wlist);
return rc;
}