forked from lei.chen/myxce
improve resmgr/jobmgr/qmgr/workermgr
This commit is contained in:
parent
2362b32825
commit
8d78f0cbeb
12 changed files with 161 additions and 575 deletions
|
|
@ -497,7 +497,8 @@ int cluster_init(cluster_t* c)
|
|||
|
||||
objmgr_init(&(c->objmgr));
|
||||
jobmgr_init(&(c->jobmgr), c->myconf->cluster_config->jobmgr->nhash_slots,
|
||||
c->myconf->cluster_config->jobmgr->delta);
|
||||
c->myconf->cluster_config->jobmgr->delta,
|
||||
(zarray_item_killer_t)job_obj_killer);
|
||||
resmgr_init(&(c->resmgr), c->myconf->cluster_config->resmgr->nhash_slots,
|
||||
c->myconf->cluster_config->resmgr->delta,
|
||||
(zarray_item_killer_t)res_obj_killer);
|
||||
|
|
@ -505,9 +506,11 @@ int cluster_init(cluster_t* c)
|
|||
(zarray_item_killer_t)resval_obj_killer);
|
||||
workermgr_init(&(c->workermgr),
|
||||
c->myconf->cluster_config->workermgr->nhash_slots,
|
||||
c->myconf->cluster_config->workermgr->delta);
|
||||
c->myconf->cluster_config->workermgr->delta,
|
||||
(zarray_item_killer_t)worker_obj_killer);
|
||||
qmgr_init(&(c->qmgr), c->myconf->cluster_config->qmgr->nhash_slots,
|
||||
c->myconf->cluster_config->qmgr->delta);
|
||||
c->myconf->cluster_config->qmgr->delta,
|
||||
(zarray_item_killer_t)queue_obj_killer);
|
||||
iomgr_init(&(c->iomgr));
|
||||
|
||||
iomgr_set_ssl_ctx(&(c->iomgr), ssl_ctx);
|
||||
|
|
|
|||
|
|
@ -22,33 +22,19 @@
|
|||
|
||||
typedef int (*collect_check_fn_t)(void*);
|
||||
|
||||
extern int check_controller(void*);
|
||||
extern int cluster_init(cluster_t*);
|
||||
extern int cluster_start(cluster_t*);
|
||||
extern int cluster_run(cluster_t*);
|
||||
extern void cluster_fini(cluster_t*);
|
||||
extern int register_types(cluster_t*);
|
||||
extern int jobmgr_init(jobmgr_t*, int, int);
|
||||
extern void jobmgr_fini(jobmgr_t*);
|
||||
extern int workermgr_init(workermgr_t*, int, int);
|
||||
extern void workermgr_fini(workermgr_t*);
|
||||
extern int workermgr_add(workermgr_t*, worker_t*);
|
||||
extern worker_t* workermgr_lock(workermgr_t*, char*, int);
|
||||
extern worker_t* workermgr_lock_byid(workermgr_t*, int, int);
|
||||
extern void workermgr_del(workermgr_t*, worker_t*);
|
||||
extern int worker_ctrl(cluster_t*, xce_hostctrl_t*);
|
||||
extern void qmgr_fini(qmgr_t*);
|
||||
extern int qmgr_init(qmgr_t*, int, int);
|
||||
extern int qmgr_add(qmgr_t*, queue_t*);
|
||||
extern queue_t* qmgr_lockq(qmgr_t*, char*, int);
|
||||
extern void qmgr_delq(qmgr_t*, queue_t*);
|
||||
extern int qmgr_iter(qmgr_t*, xlist_t*, void*);
|
||||
|
||||
extern int check_controller(void*);
|
||||
extern int cluster_init(cluster_t*);
|
||||
extern int cluster_start(cluster_t*);
|
||||
extern int cluster_run(cluster_t*);
|
||||
extern void cluster_fini(cluster_t*);
|
||||
extern int register_types(cluster_t*);
|
||||
extern int worker_ctrl(cluster_t*, xce_hostctrl_t*);
|
||||
extern xce_resource_t* get_resource(cluster_t*, char*);
|
||||
extern int add_to_xlist(xlist_t*, void*);
|
||||
extern int add_worker_to_xlist(xlist_t*, void*);
|
||||
extern int add_queue_to_xlist(xlist_t*, void*);
|
||||
extern int add_job_to_xlist(xlist_t*, void*);
|
||||
extern void queue_obj_killer(queue_t*);
|
||||
extern void res_obj_killer(xce_resource_t*);
|
||||
extern void resval_obj_killer(xce_resval_t*);
|
||||
extern void resource_killer(void*);
|
||||
|
|
@ -83,6 +69,7 @@ extern job_t* jobmgr_lockjob(jobmgr_t*, uint64_t, int);
|
|||
extern int32_t jobmgr_add_job(jobmgr_t*, job_t*);
|
||||
extern void jobmgr_del_job(jobmgr_t*, job_t*);
|
||||
extern void job_obj_killer(job_t*);
|
||||
extern void worker_obj_killer(worker_t*);
|
||||
extern int handle_push(struct capn*, cluster_t*, endpoint_t*, struct Request*);
|
||||
extern int do_get_op(cluster_t*, endpoint_t*, xce_request_t*);
|
||||
extern int do_update_op(cluster_t*, endpoint_t*, xce_request_t*);
|
||||
|
|
|
|||
|
|
@ -7,20 +7,6 @@
|
|||
#include "xce/types.h"
|
||||
#include "zarray.h"
|
||||
|
||||
typedef struct {
|
||||
uint64_t jobid;
|
||||
xce_alloc_t alloc;
|
||||
double used;
|
||||
} res_usage_t;
|
||||
|
||||
typedef struct {
|
||||
xce_worker_t host;
|
||||
char hostkey[XCE_MAXKEY_LEN];
|
||||
endpoint_t* ep;
|
||||
int idx;
|
||||
zarray_t usages;
|
||||
} worker_t;
|
||||
|
||||
extern int add_worker(void*, endpoint_t*, const char*, hostattrs_t*);
|
||||
extern int restore_worker(void*, xce_worker_t);
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -1,155 +0,0 @@
|
|||
#include <errno.h>
|
||||
#include <stdarg.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "cluster.h"
|
||||
#include "htab.h"
|
||||
#include "xce/cluster_def.h"
|
||||
#include "xce/errnox.h"
|
||||
#include "xstring.h"
|
||||
|
||||
int jobmgr_init(jobmgr_t* mgr, int nhslots, int delta)
|
||||
{
|
||||
ht_init(&(mgr->htab), nhslots, int_hash_key);
|
||||
zarray_init(&(mgr->jobs), delta, (zarray_item_killer_t)job_obj_killer);
|
||||
mylock_init(&(mgr->lock));
|
||||
return 0;
|
||||
}
|
||||
|
||||
void jobmgr_fini(jobmgr_t* mgr)
|
||||
{
|
||||
ht_fini(&(mgr->htab));
|
||||
zarray_fini(&(mgr->jobs));
|
||||
mylock_fini(&(mgr->lock));
|
||||
}
|
||||
|
||||
job_t* jobmgr_lockjob_(jobmgr_t* mgr, uint64_t jobid, int op)
|
||||
{
|
||||
hent_t* e = NULL;
|
||||
int idx;
|
||||
job_t* job = NULL;
|
||||
|
||||
e = ht_get(&(mgr->htab), (void*)jobid);
|
||||
if (e == NULL) {
|
||||
SET_ERROR(E_XCE_BAD_JOB);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
idx = e->data;
|
||||
|
||||
if (idx < 0) {
|
||||
SET_ERROR(E_XCE_BAD_JOB);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
job = (job_t*)zarray_get(&(mgr->jobs), idx);
|
||||
|
||||
return obj_ref(job, op);
|
||||
}
|
||||
|
||||
job_t* jobmgr_lockjob(jobmgr_t* mgr, uint64_t jobid, int op)
|
||||
{
|
||||
job_t* job = NULL;
|
||||
|
||||
if (mgr == NULL) {
|
||||
SET_ERROR(EINVAL);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* clang-format off */
|
||||
if ((op != OBJREF_NOP) &&
|
||||
(op != OBJREF_READ) &&
|
||||
(op != OBJREF_UPDATE)) {
|
||||
SET_ERROR(EINVAL);
|
||||
return NULL;
|
||||
}
|
||||
/* clang-format on */
|
||||
|
||||
mylock_lock(&(mgr->lock));
|
||||
job = jobmgr_lockjob_(mgr, jobid, op);
|
||||
mylock_unlock(&(mgr->lock));
|
||||
|
||||
return job;
|
||||
}
|
||||
|
||||
static int32_t jobmgr_add_job_(jobmgr_t* mgr, job_t* job)
|
||||
{
|
||||
hent_t* e = NULL;
|
||||
int idx;
|
||||
|
||||
e = ht_get(&(mgr->htab), (void*)job->job.jobid);
|
||||
if (e != NULL) {
|
||||
return -EEXIST;
|
||||
}
|
||||
|
||||
idx = zarray_store(&(mgr->jobs), job);
|
||||
if (idx < 0) {
|
||||
return idx;
|
||||
}
|
||||
|
||||
e = ht_add(&(mgr->htab), (void*)job->job.jobid);
|
||||
if (e == NULL) {
|
||||
zarray_del(&(mgr->jobs), idx);
|
||||
return -errno;
|
||||
}
|
||||
|
||||
e->data = idx;
|
||||
return idx;
|
||||
}
|
||||
|
||||
int32_t jobmgr_add_job(jobmgr_t* mgr, job_t* job)
|
||||
{
|
||||
int32_t idx;
|
||||
|
||||
if ((mgr == NULL) || (job == NULL)) {
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
mylock_lock(&(mgr->lock));
|
||||
idx = jobmgr_add_job_(mgr, job);
|
||||
mylock_unlock(&(mgr->lock));
|
||||
|
||||
return idx;
|
||||
}
|
||||
|
||||
static void jobmgr_del_job_(jobmgr_t* mgr, job_t* job)
|
||||
{
|
||||
hent_t* e = NULL;
|
||||
int idx;
|
||||
|
||||
e = ht_get(&(mgr->htab), (void*)job->job.jobid);
|
||||
if (e == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
idx = e->data;
|
||||
if (idx < 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
zarray_del(&(mgr->jobs), idx);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
void jobmgr_del_job(jobmgr_t* mgr, job_t* job)
|
||||
{
|
||||
if ((mgr == NULL) || (job == NULL)) {
|
||||
return;
|
||||
}
|
||||
mylock_lock(&(mgr->lock));
|
||||
jobmgr_del_job_(mgr, job);
|
||||
mylock_unlock(&(mgr->lock));
|
||||
}
|
||||
|
||||
int jobmgr_iter(jobmgr_t* mgr, xlist_t* l, void* arg)
|
||||
{
|
||||
int rc = 0;
|
||||
|
||||
mylock_lock(&(mgr->lock));
|
||||
rc = zarray_iter_ex(&(mgr->jobs), NULL, l, arg);
|
||||
mylock_unlock(&(mgr->lock));
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
|
@ -2,21 +2,18 @@ controller_src = [
|
|||
'cluster.c',
|
||||
'dataex.c',
|
||||
'job.c',
|
||||
'jobmgr.c',
|
||||
'join.c',
|
||||
'main.c',
|
||||
'misc.c',
|
||||
'myapp.c',
|
||||
'opget.c',
|
||||
'opupd.c',
|
||||
'qmgr.c',
|
||||
'queue.c',
|
||||
'reply.c',
|
||||
'resources.c',
|
||||
'sched.c',
|
||||
'task.c',
|
||||
'worker.c',
|
||||
'workermgr.c',
|
||||
'xceobjs.c',
|
||||
'myconf.c'
|
||||
]
|
||||
|
|
|
|||
|
|
@ -1,156 +0,0 @@
|
|||
#include <errno.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "cluster.h"
|
||||
#include "htab.h"
|
||||
#include "xce/cluster_def.h"
|
||||
#include "xstring.h"
|
||||
|
||||
extern void queue_obj_killer(queue_t*);
|
||||
|
||||
int qmgr_init(qmgr_t* mgr, int nslots, int delta)
|
||||
{
|
||||
mylock_init(&(mgr->lock));
|
||||
ht_init(&(mgr->htab), nslots, string_hash_key);
|
||||
zarray_init(&(mgr->queues), delta, (zarray_item_killer_t)queue_obj_killer);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void qmgr_fini(qmgr_t* mgr)
|
||||
{
|
||||
zarray_fini(&(mgr->queues));
|
||||
ht_fini(&(mgr->htab));
|
||||
mylock_fini(&(mgr->lock));
|
||||
}
|
||||
|
||||
static int qmgr_add_(qmgr_t* mgr, queue_t* q)
|
||||
{
|
||||
hent_t* e = NULL;
|
||||
int idx;
|
||||
|
||||
e = ht_get(&(mgr->htab), (void*)q->queue.queue);
|
||||
if (e != NULL) {
|
||||
return -EEXIST;
|
||||
}
|
||||
|
||||
idx = zarray_store(&(mgr->queues), q);
|
||||
if (idx < 0) {
|
||||
return idx;
|
||||
}
|
||||
|
||||
e = ht_add(&(mgr->htab), (void*)q->queue.queue);
|
||||
if (e == NULL) {
|
||||
zarray_del(&(mgr->queues), idx);
|
||||
return -errno;
|
||||
}
|
||||
|
||||
e->data = idx;
|
||||
return idx;
|
||||
}
|
||||
|
||||
int qmgr_add(qmgr_t* mgr, queue_t* q)
|
||||
{
|
||||
int idx;
|
||||
|
||||
if ((mgr == NULL) || (q == NULL)) {
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
mylock_lock(&(mgr->lock));
|
||||
idx = qmgr_add_(mgr, q);
|
||||
mylock_unlock(&(mgr->lock));
|
||||
|
||||
return idx;
|
||||
}
|
||||
static queue_t* qmgr_lockq_(qmgr_t* mgr, char* name, int op)
|
||||
{
|
||||
hent_t* e = NULL;
|
||||
int idx;
|
||||
queue_t* q = NULL;
|
||||
|
||||
e = ht_get(&(mgr->htab), (void*)name);
|
||||
if (e == NULL) {
|
||||
SET_ERROR(ENOENT);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
idx = e->data;
|
||||
if (idx < 0) {
|
||||
SET_ERROR(ENOENT);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
q = (queue_t*)zarray_get(&(mgr->queues), idx);
|
||||
|
||||
return obj_ref(q, op);
|
||||
}
|
||||
queue_t* qmgr_lockq(qmgr_t* mgr, char* name, int op)
|
||||
{
|
||||
queue_t* q = NULL;
|
||||
|
||||
if (mgr == NULL) {
|
||||
SET_ERROR(EINVAL);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (name == NULL) {
|
||||
SET_ERROR(EINVAL);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* clang-format off */
|
||||
if ((op != OBJREF_NOP) &&
|
||||
(op != OBJREF_READ) &&
|
||||
(op != OBJREF_UPDATE)) {
|
||||
SET_ERROR(EINVAL);
|
||||
return NULL;
|
||||
}
|
||||
/* clang-format on */
|
||||
|
||||
mylock_lock(&(mgr->lock));
|
||||
q = qmgr_lockq_(mgr, name, op);
|
||||
mylock_unlock(&(mgr->lock));
|
||||
|
||||
return q;
|
||||
}
|
||||
|
||||
static void qmgr_delq_(qmgr_t* mgr, queue_t* q)
|
||||
{
|
||||
hent_t* e = NULL;
|
||||
int idx;
|
||||
|
||||
e = ht_get(&(mgr->htab), (void*)q->queue.queue);
|
||||
if (e == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
idx = e->data;
|
||||
if (idx < 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
zarray_del(&(mgr->queues), idx);
|
||||
}
|
||||
|
||||
void qmgr_delq(qmgr_t* mgr, queue_t* q)
|
||||
{
|
||||
if ((mgr == NULL) || (q == NULL)) {
|
||||
return;
|
||||
}
|
||||
|
||||
mylock_lock(&(mgr->lock));
|
||||
qmgr_delq_(mgr, q);
|
||||
mylock_unlock(&(mgr->lock));
|
||||
}
|
||||
|
||||
int qmgr_iter(qmgr_t* mgr, xlist_t* l, void* arg)
|
||||
{
|
||||
int rc = 0;
|
||||
|
||||
mylock_lock(&(mgr->lock));
|
||||
rc = zarray_iter_ex(&(mgr->queues), NULL, l, arg);
|
||||
mylock_unlock(&(mgr->lock));
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
|
@ -1,190 +0,0 @@
|
|||
#include <errno.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "cluster.h"
|
||||
#include "htab.h"
|
||||
#include "mylock.h"
|
||||
#include "xce/cluster_def.h"
|
||||
#include "xce/errnox.h"
|
||||
#include "xstring.h"
|
||||
|
||||
extern void worker_obj_killer(worker_t*);
|
||||
|
||||
int workermgr_init(workermgr_t* mgr, int nslots, int delta)
|
||||
{
|
||||
TRACE("%s nslots %d delta %d", __func__, nslots, delta);
|
||||
|
||||
mylock_init(&(mgr->lock));
|
||||
ht_init(&(mgr->htab), nslots, string_hash_key);
|
||||
zarray_init(&(mgr->workers), delta,
|
||||
(zarray_item_killer_t)worker_obj_killer);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void workermgr_fini(workermgr_t* mgr)
|
||||
{
|
||||
zarray_fini(&(mgr->workers));
|
||||
ht_fini(&(mgr->htab));
|
||||
mylock_fini(&(mgr->lock));
|
||||
}
|
||||
|
||||
static int32_t workermgr_add_(workermgr_t* mgr, worker_t* w)
|
||||
{
|
||||
hent_t* e = NULL;
|
||||
int idx;
|
||||
|
||||
e = ht_get(&(mgr->htab), (void*)w->host.name);
|
||||
if (e != NULL) {
|
||||
return (int)e->data;
|
||||
}
|
||||
|
||||
idx = zarray_store(&(mgr->workers), w);
|
||||
if (idx < 0) {
|
||||
return idx;
|
||||
}
|
||||
|
||||
e = ht_add(&(mgr->htab), (void*)w->host.name);
|
||||
if (e == NULL) {
|
||||
zarray_del(&(mgr->workers), idx);
|
||||
return -errno;
|
||||
}
|
||||
|
||||
e->data = idx;
|
||||
|
||||
return idx;
|
||||
}
|
||||
|
||||
int32_t workermgr_add(workermgr_t* mgr, worker_t* w)
|
||||
{
|
||||
int idx;
|
||||
|
||||
if ((mgr == NULL) || (w == NULL)) {
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
mylock_lock(&(mgr->lock));
|
||||
idx = workermgr_add_(mgr, w);
|
||||
mylock_unlock(&(mgr->lock));
|
||||
|
||||
return idx;
|
||||
}
|
||||
|
||||
static worker_t* workermgr_lock_(workermgr_t* mgr, char* name, int op)
|
||||
{
|
||||
hent_t* e = NULL;
|
||||
int idx;
|
||||
worker_t* w = NULL;
|
||||
|
||||
e = ht_get(&(mgr->htab), (void*)name);
|
||||
if (e == NULL) {
|
||||
SET_ERROR(E_XCE_BAD_WORKER);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
idx = e->data;
|
||||
if (idx < 0) {
|
||||
SET_ERROR(E_XCE_BAD_WORKER);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
w = zarray_get(&(mgr->workers), idx);
|
||||
|
||||
return obj_ref(w, op);
|
||||
}
|
||||
|
||||
worker_t* workermgr_lock(workermgr_t* mgr, char* name, int op)
|
||||
{
|
||||
worker_t* w = NULL;
|
||||
|
||||
if (mgr == NULL) {
|
||||
SET_ERROR(EINVAL);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (name == NULL) {
|
||||
SET_ERROR(EINVAL);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if ((op != OBJREF_NOP) && (op != OBJREF_READ) && (op != OBJREF_UPDATE)) {
|
||||
SET_ERROR(EINVAL);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
mylock_lock(&(mgr->lock));
|
||||
w = workermgr_lock_(mgr, name, op);
|
||||
mylock_unlock(&(mgr->lock));
|
||||
|
||||
return w;
|
||||
}
|
||||
|
||||
worker_t* workermgr_lock_byid(workermgr_t* mgr, int idx, int op)
|
||||
{
|
||||
worker_t* w = NULL;
|
||||
|
||||
if (mgr == NULL) {
|
||||
SET_ERROR(EINVAL);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if ((idx < 0) || (idx >= mgr->workers.caps)) {
|
||||
SET_ERROR(EINVAL);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if ((op != OBJREF_NOP) && (op != OBJREF_READ) && (op != OBJREF_UPDATE)) {
|
||||
SET_ERROR(EINVAL);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
mylock_lock(&(mgr->lock));
|
||||
w = (worker_t*)zarray_get(&(mgr->workers), idx);
|
||||
if (w != NULL) {
|
||||
w = obj_ref(w, op);
|
||||
}
|
||||
mylock_unlock(&(mgr->lock));
|
||||
|
||||
return w;
|
||||
}
|
||||
|
||||
static void workermgr_del_(workermgr_t* mgr, worker_t* w)
|
||||
{
|
||||
hent_t* e = NULL;
|
||||
int idx;
|
||||
|
||||
e = ht_get(&(mgr->htab), (void*)w->host.name);
|
||||
if (e == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
idx = e->data;
|
||||
if (idx < 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
zarray_del(&(mgr->workers), idx);
|
||||
}
|
||||
|
||||
void workermgr_del(workermgr_t* mgr, worker_t* w)
|
||||
{
|
||||
if ((mgr == NULL) || (w == NULL)) {
|
||||
SET_ERROR(EINVAL);
|
||||
return;
|
||||
}
|
||||
|
||||
mylock_lock(&(mgr->lock));
|
||||
workermgr_del_(mgr, w);
|
||||
mylock_unlock(&(mgr->lock));
|
||||
}
|
||||
|
||||
int workermgr_iter(workermgr_t* mgr, xlist_t* l, void* arg)
|
||||
{
|
||||
int rc = 0;
|
||||
|
||||
mylock_lock(&(mgr->lock));
|
||||
rc = zarray_iter_ex(&(mgr->workers), NULL, l, arg);
|
||||
mylock_unlock(&(mgr->lock));
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
|
@ -20,6 +20,18 @@ typedef struct {
|
|||
int nunshared;
|
||||
} resmgr_t;
|
||||
|
||||
typedef struct {
|
||||
kvmgr_t queues;
|
||||
} qmgr_t;
|
||||
|
||||
typedef struct {
|
||||
kvmgr_t jobs;
|
||||
} jobmgr_t;
|
||||
|
||||
typedef struct {
|
||||
kvmgr_t workers;
|
||||
} workermgr_t;
|
||||
|
||||
extern int kvmgr_init(kvmgr_t*, hash_key_fn_t, int, int, zarray_item_killer_t);
|
||||
extern void kvmgr_fini(kvmgr_t*);
|
||||
extern void* kvmgr_lock(kvmgr_t*, void*, int);
|
||||
|
|
@ -35,4 +47,20 @@ extern xce_resource_t* resmgr_lockres(resmgr_t*, char*, int);
|
|||
extern void resmgr_del_res(resmgr_t*, xce_resource_t*);
|
||||
extern int resmgr_iter(resmgr_t*, xlist_t*, void*);
|
||||
|
||||
extern void qmgr_fini(qmgr_t*);
|
||||
extern int qmgr_init(qmgr_t*, int, int, zarray_item_killer_t);
|
||||
extern int qmgr_add(qmgr_t*, queue_t*);
|
||||
extern queue_t* qmgr_lockq(qmgr_t*, char*, int);
|
||||
extern void qmgr_delq(qmgr_t*, queue_t*);
|
||||
extern int qmgr_iter(qmgr_t*, xlist_t*, void*);
|
||||
|
||||
extern int jobmgr_init(jobmgr_t*, int, int, zarray_item_killer_t);
|
||||
extern void jobmgr_fini(jobmgr_t*);
|
||||
extern int workermgr_init(workermgr_t*, int, int, zarray_item_killer_t);
|
||||
extern void workermgr_fini(workermgr_t*);
|
||||
extern int workermgr_add(workermgr_t*, worker_t*);
|
||||
extern worker_t* workermgr_lock(workermgr_t*, char*, int);
|
||||
extern worker_t* workermgr_lock_byid(workermgr_t*, int, int);
|
||||
extern void workermgr_del(workermgr_t*, worker_t*);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -11,12 +11,16 @@
|
|||
|
||||
#include "dataq.h"
|
||||
#include "mylock.h"
|
||||
#include "xce/types.h"
|
||||
|
||||
typedef int (*conn_handler_t)(struct epoll_event*);
|
||||
typedef int (*msg_handler_t)(void*);
|
||||
typedef int (*err_handler_t)(void*);
|
||||
|
||||
typedef struct {
|
||||
char* name;
|
||||
char* key;
|
||||
} xce_peerinfo_t;
|
||||
|
||||
#define IO_MON_INPUT (0x01)
|
||||
#define IO_MON_OUTPUT (0x02)
|
||||
|
||||
|
|
|
|||
|
|
@ -76,32 +76,6 @@ typedef struct {
|
|||
typedef struct {
|
||||
} metrics_t;
|
||||
|
||||
typedef struct {
|
||||
xce_queue_t queue;
|
||||
} queue_t;
|
||||
|
||||
typedef struct {
|
||||
xce_job_t job;
|
||||
} job_t;
|
||||
|
||||
typedef struct {
|
||||
mylock_t lock;
|
||||
htab_t htab;
|
||||
zarray_t jobs;
|
||||
} jobmgr_t;
|
||||
|
||||
typedef struct {
|
||||
mylock_t lock;
|
||||
htab_t htab;
|
||||
zarray_t workers;
|
||||
} workermgr_t;
|
||||
|
||||
typedef struct {
|
||||
mylock_t lock;
|
||||
htab_t htab;
|
||||
zarray_t queues;
|
||||
} qmgr_t;
|
||||
|
||||
typedef struct {
|
||||
mylock_t lock;
|
||||
endpoint_t* ep;
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@
|
|||
|
||||
#include "xlist.h"
|
||||
#include "zarray.h"
|
||||
#include "netio.h"
|
||||
|
||||
#define XCE_VAL_STRING (0)
|
||||
#define XCE_VAL_NUMERIC (1)
|
||||
|
|
@ -96,11 +97,6 @@ typedef struct {
|
|||
char** data;
|
||||
} xce_strlist_t;
|
||||
|
||||
typedef struct {
|
||||
char* name;
|
||||
char* key;
|
||||
} xce_peerinfo_t;
|
||||
|
||||
typedef struct {
|
||||
char* name;
|
||||
char* value;
|
||||
|
|
@ -267,6 +263,21 @@ typedef struct {
|
|||
int64_t duration;
|
||||
} xce_alloc_t;
|
||||
|
||||
typedef struct {
|
||||
uint64_t jobid;
|
||||
xce_alloc_t alloc;
|
||||
double used;
|
||||
} res_usage_t;
|
||||
|
||||
typedef struct {
|
||||
xce_worker_t host;
|
||||
char hostkey[XCE_MAXKEY_LEN];
|
||||
endpoint_t* ep;
|
||||
int idx;
|
||||
zarray_t usages;
|
||||
} worker_t;
|
||||
|
||||
|
||||
typedef struct {
|
||||
char* host;
|
||||
int nallocs;
|
||||
|
|
@ -431,6 +442,11 @@ typedef struct {
|
|||
xce_job_preason_t* pend_reasons;
|
||||
} xce_job_t;
|
||||
|
||||
typedef struct {
|
||||
xce_job_t job;
|
||||
} job_t;
|
||||
|
||||
|
||||
typedef struct {
|
||||
int count;
|
||||
xce_job_t** data;
|
||||
|
|
@ -474,6 +490,10 @@ typedef struct {
|
|||
char* autopscaler;
|
||||
} xce_queue_t;
|
||||
|
||||
typedef struct {
|
||||
xce_queue_t queue;
|
||||
} queue_t;
|
||||
|
||||
typedef struct {
|
||||
int count;
|
||||
xce_queue_t** queues;
|
||||
|
|
|
|||
|
|
@ -246,3 +246,91 @@ int resmgr_iter(resmgr_t* mgr, xlist_t* l, void* arg)
|
|||
{
|
||||
return kvmgr_iter(&(mgr->resdef), NULL, l, arg);
|
||||
}
|
||||
|
||||
int qmgr_init(qmgr_t* mgr, int nslots, int delta, zarray_item_killer_t killer)
|
||||
{
|
||||
return kvmgr_init(&(mgr->queues), string_hash_key, nslots, delta, killer);
|
||||
}
|
||||
|
||||
void qmgr_fini(qmgr_t* mgr) { kvmgr_fini(&(mgr->queues)); }
|
||||
|
||||
int qmgr_add(qmgr_t* mgr, queue_t* q)
|
||||
{
|
||||
return kvmgr_add(&(mgr->queues), (void*)q->queue.queue, q);
|
||||
}
|
||||
|
||||
queue_t* qmgr_lockq(qmgr_t* mgr, char* name, int op)
|
||||
{
|
||||
return (queue_t*)kvmgr_lock(&(mgr->queues), (void*)name, op);
|
||||
}
|
||||
|
||||
void qmgr_delq(qmgr_t* mgr, queue_t* q)
|
||||
{
|
||||
kvmgr_del(&(mgr->queues), (void*)q->queue.queue);
|
||||
}
|
||||
|
||||
int qmgr_iter(qmgr_t* mgr, xlist_t* l, void* arg)
|
||||
{
|
||||
return kvmgr_iter(&(mgr->queues), NULL, l, arg);
|
||||
}
|
||||
|
||||
int workermgr_init(workermgr_t* mgr, int nslots, int delta,
|
||||
zarray_item_killer_t killer)
|
||||
{
|
||||
return kvmgr_init(&(mgr->workers), string_hash_key, nslots, delta, killer);
|
||||
}
|
||||
|
||||
void workermgr_fini(workermgr_t* mgr) { kvmgr_fini(&(mgr->workers)); }
|
||||
|
||||
int workermgr_add(workermgr_t* mgr, worker_t* w)
|
||||
{
|
||||
return kvmgr_add(&(mgr->workers), (void*)w->host.name, w);
|
||||
}
|
||||
|
||||
worker_t* workermgr_lock(workermgr_t* mgr, char* name, int op)
|
||||
{
|
||||
return (worker_t*)kvmgr_lock(&(mgr->workers), (void*)name, op);
|
||||
}
|
||||
|
||||
worker_t* workermgr_lock_byid(workermgr_t* mgr, int idx, int op)
|
||||
{
|
||||
return (worker_t*)kvmgr_lock_byid(&(mgr->workers), idx, op);
|
||||
}
|
||||
|
||||
void workermgr_del(workermgr_t* mgr, worker_t* w)
|
||||
{
|
||||
kvmgr_del(&(mgr->workers), (void*)w->host.name);
|
||||
}
|
||||
|
||||
int workermgr_iter(workermgr_t* mgr, xlist_t* l, void* arg)
|
||||
{
|
||||
return kvmgr_iter(&(mgr->workers), NULL, l, arg);
|
||||
}
|
||||
|
||||
int jobmgr_init(jobmgr_t* mgr, int nslots, int delta,
|
||||
zarray_item_killer_t killer)
|
||||
{
|
||||
return kvmgr_init(&(mgr->jobs), int_hash_key, nslots, delta, killer);
|
||||
}
|
||||
|
||||
void jobmgr_fini(jobmgr_t* mgr) { kvmgr_fini(&(mgr->jobs)); }
|
||||
|
||||
int jobmgr_add_job(jobmgr_t* mgr, job_t* j)
|
||||
{
|
||||
return kvmgr_add(&(mgr->jobs), (void*)j->job.jobid, j);
|
||||
}
|
||||
|
||||
job_t* jobmgr_lockjob(jobmgr_t* mgr, uint64_t jobid, int op)
|
||||
{
|
||||
return (job_t*)kvmgr_lock(&(mgr->jobs), (void*)jobid, op);
|
||||
}
|
||||
|
||||
void jobmgr_del_job(jobmgr_t* mgr, job_t* j)
|
||||
{
|
||||
kvmgr_del(&(mgr->jobs), (void*)j->job.jobid);
|
||||
}
|
||||
|
||||
int jobmgr_iter(jobmgr_t* mgr, xlist_t* l, void* arg)
|
||||
{
|
||||
return kvmgr_iter(&(mgr->jobs), NULL, l, arg);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue