- save tmp works

- save works
This commit is contained in:
Rongsong Shen 2026-02-06 17:30:50 +08:00
parent cd4f3953b2
commit 12dcc2a60d
14 changed files with 386 additions and 110 deletions

View file

@ -3,12 +3,15 @@
#include <stdlib.h>
#include <string.h>
#include "kvmgr.h"
#include "objmgr.h"
#include "resreq.h"
#include "rusage.h"
#include "section.h"
#include "utils.h"
#include "xce_resreq.h"
#include "xlist.h"
#include "xvec.h"
static int get_parse_errmsg(char** errmsg, const char* data, int pos)
{
@ -431,3 +434,107 @@ int format_resreq(char** buf, xce_resreq_t* resreq)
return rc;
}
int calc_wanted_global_resvals(xvec_idval_t* resvals, resmgr_t* resmgr,
xlist_t* rusages, rusage_per_type_t perflag,
int nhosts, int nslots)
{
int i;
for (i = 0; i < rusages->count; i++) {
rusage_value_t* v = (rusage_value_t*)xlist_get(rusages, i);
xce_resource_t* r = NULL;
float val;
rusage_per_type_t perflag1;
if (v == NULL) {
continue;
}
r = resmgr_lockres(resmgr, v->res, OBJREF_NOP);
if (r == NULL) {
continue;
}
if ((r->flags & XCE_RESF_GLOBAL) == 0) {
continue;
}
perflag1 = v->per_flag;
if (perflag1 == PER_DEFAULT) {
perflag1 = perflag;
}
switch (perflag1) {
case PER_TASK:
val = v->value * nslots;
break;
case PER_JOB:
val = v->value;
break;
case PER_HOST:
val = v->value * nhosts;
break;
default:
/* something wrong */
val = 0.0;
break;
}
xvec_idval_store(resvals, r->idx, val);
}
return 0;
}
int calc_wanted_host_resvals(xvec_idval_t* resvals, resmgr_t* resmgr,
xlist_t* rusages, rusage_per_type_t perfflag,
int nhosts, int nslots)
{
int i;
for (i = 0; i < rusages->count; i++) {
rusage_value_t* v = (rusage_value_t*)xlist_get(rusages, i);
xce_resource_t* r = NULL;
float val;
rusage_per_type_t perflag1;
if (v == NULL) {
continue;
}
r = resmgr_lockres(resmgr, v->res, OBJREF_NOP);
if (r == NULL) {
continue;
}
if ((r->flags & XCE_RESF_GLOBAL) != 0) {
continue;
}
perflag1 = v->per_flag;
if (perflag1 == PER_DEFAULT) {
perflag1 = perflag;
}
if (perflag1 == PER_JOB) {
/* FIXME: PER_JOB should be global? */
continue;
}
switch (perflag1) {
case PER_TASK:
val = v->value * nslots;
break;
case PER_HOST:
val = v->value;
break;
default:
/* something wrong */
val = 0.0;
break;
}
xvec_idval_store(resvals, r->idx, val);
}
return 0;
}