#include "config.h" #include #include #include #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_name_val_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; }