forked from lei.chen/myxce
78 lines
2 KiB
C
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;
|
|
}
|