forked from lei.chen/myxce
controller will pass resource <name, value> pair than <idx, value> pair
This commit is contained in:
parent
9f6741c2c4
commit
d47b3375e7
16 changed files with 183 additions and 86 deletions
|
|
@ -19,57 +19,66 @@ int check_controller(void* arg)
|
|||
return 1;
|
||||
}
|
||||
|
||||
static int collect_resval_with_idx_(zarray_t* array, xlist_t* l)
|
||||
int collect_resval(var resmgr, zarray_t* array, xlist_t* l)
|
||||
{
|
||||
int i;
|
||||
iterator_t it;
|
||||
int rc;
|
||||
|
||||
for (i = 0; i < array->caps; i++) {
|
||||
xce_val_with_idx_t* val;
|
||||
xce_val_t* src = array->data[i];
|
||||
lock(resmgr, RTTI_LOCK_READ);
|
||||
rc = iter_make(&it, resmgr);
|
||||
if (rc < 0) {
|
||||
unlock(resmgr);
|
||||
return rc;
|
||||
}
|
||||
|
||||
if (array->data[i] == NULL) {
|
||||
for (;;) {
|
||||
xce_resource_t* r = NULL;
|
||||
xce_val_t* src = NULL;
|
||||
xce_name_val_t* nv = NULL;
|
||||
|
||||
rc = iter_next(&it, (void**)&r);
|
||||
if ((rc < 0) || (rc == RTTI_ITER_NO_DATA)) {
|
||||
break;
|
||||
}
|
||||
|
||||
if (r == NULL) {
|
||||
continue;
|
||||
}
|
||||
|
||||
val = (xce_val_with_idx_t*)calloc(1, sizeof(*val));
|
||||
if (val == NULL) {
|
||||
return -ENOMEM;
|
||||
src = (xce_val_t*)zarray_get(array, r->idx);
|
||||
if (src == NULL) {
|
||||
continue;
|
||||
}
|
||||
|
||||
val->idx = i;
|
||||
val->val = (xce_val_t*)calloc(1, sizeof(xce_val_t));
|
||||
if (val->val == NULL) {
|
||||
return -ENOMEM;
|
||||
nv = (xce_name_val_t*)calloc(1, sizeof(*nv));
|
||||
if (nv == NULL) {
|
||||
rc = -ENOMEM;
|
||||
break;
|
||||
}
|
||||
|
||||
nv->name = strdup(r->name);
|
||||
nv->val = (xce_val_t*)calloc(1, sizeof(xce_val_t));
|
||||
if (nv->val == NULL) {
|
||||
FREEUP(nv->name);
|
||||
FREEUP(nv);
|
||||
rc = -ENOMEM;
|
||||
break;
|
||||
}
|
||||
|
||||
if (src->which == Value_u_svalue) {
|
||||
val->val->which = Value_u_svalue;
|
||||
if (src->u.svalue != NULL) {
|
||||
val->val->u.svalue = strdup(src->u.svalue);
|
||||
} else {
|
||||
val->val->u.svalue = strdup("-");
|
||||
}
|
||||
nv->val->which = Value_u_svalue;
|
||||
nv->val->u.svalue = strdup(src->u.svalue ? src->u.svalue : "-");
|
||||
} else {
|
||||
memcpy(val->val, array->data[i], sizeof(xce_val_t));
|
||||
memcpy(nv->val, src, sizeof(xce_val_t));
|
||||
}
|
||||
|
||||
xlist_store(l, val);
|
||||
xlist_store(l, nv);
|
||||
}
|
||||
|
||||
return l->count;
|
||||
}
|
||||
iter_destroy(&it);
|
||||
unlock(resmgr);
|
||||
|
||||
int collect_resval_with_idx(zarray_t* array, xlist_t* l)
|
||||
{
|
||||
int rc = 0;
|
||||
|
||||
mylock_lock(&(array->lock));
|
||||
|
||||
rc = collect_resval_with_idx_(array, l);
|
||||
|
||||
mylock_unlock(&(array->lock));
|
||||
|
||||
return rc;
|
||||
return (rc == RTTI_ITER_NO_DATA || rc == 0) ? l->count : rc;
|
||||
}
|
||||
|
||||
static void lock_objs(xlist_t* l, int op)
|
||||
|
|
@ -138,7 +147,7 @@ static void lock_collect_jobs(xlist_t* l, int op)
|
|||
}
|
||||
}
|
||||
|
||||
static void collect_resvals_workers(xlist_t* l)
|
||||
static void collect_resvals_workers(var resmgr, xlist_t* l)
|
||||
{
|
||||
int i;
|
||||
|
||||
|
|
@ -153,11 +162,11 @@ static void collect_resvals_workers(xlist_t* l)
|
|||
|
||||
xlist_init(&lst, 128);
|
||||
|
||||
collect_resval_with_idx(&(w->resvals), &lst);
|
||||
collect_resval(resmgr, &(w->resvals), &lst);
|
||||
|
||||
w->nresvals_to_sched = lst.count;
|
||||
MOVE_PTR(p, lst.data);
|
||||
w->resvals_to_sched = (xce_val_with_idx_t**)p;
|
||||
w->resvals_to_sched = (xce_name_val_t**)p;
|
||||
|
||||
xlist_fini(&lst);
|
||||
}
|
||||
|
|
@ -352,17 +361,14 @@ void collect_workers(cluster_t* c, collect_check_fn_t fn, xlist_t* l)
|
|||
|
||||
lock_collect_workers(l, RTTI_LOCK_WRITE);
|
||||
|
||||
collect_resvals_workers(l);
|
||||
collect_resvals_workers(c->resmgr, l);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
void collect_shared_resvals(cluster_t* c, collect_check_fn_t fn, xlist_t* l)
|
||||
{
|
||||
|
||||
collect_resval_with_idx(&(c->sharedinst), l);
|
||||
|
||||
return;
|
||||
collect_resval(c->resmgr, &(c->sharedinst), l);
|
||||
}
|
||||
|
||||
int notify(cluster_t* c, endpoint_t* ep, xce_notify_data_t* data)
|
||||
|
|
@ -401,7 +407,7 @@ void unlock_collect_workers(xlist_t* l)
|
|||
continue;
|
||||
}
|
||||
|
||||
free_resval_with_idx_list(&(w->resvals_to_sched), w->nresvals_to_sched);
|
||||
free_name_val_list(&(w->resvals_to_sched), w->nresvals_to_sched);
|
||||
|
||||
w1 = CONTAINER_OF(w, worker_t, host);
|
||||
unlock(w1);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue