merge job rusage and pending reason support
This commit is contained in:
parent
30824ae5ea
commit
cb0c7fe9e7
82 changed files with 4280 additions and 2561 deletions
151
src/lib/preason.c
Normal file
151
src/lib/preason.c
Normal file
|
|
@ -0,0 +1,151 @@
|
|||
#include <errno.h>
|
||||
|
||||
#include "preason.h"
|
||||
#include "utils.h"
|
||||
|
||||
void erase_job_preason(xce_job_preason_t* reasons)
|
||||
{
|
||||
if (reasons == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (reasons->host_based_reasons != NULL) {
|
||||
int i;
|
||||
|
||||
for (i = 0; i < reasons->nhost_reasons; i++) {
|
||||
if (reasons->host_based_reasons[i] != NULL) {
|
||||
FREEUP(reasons->host_based_reasons[i]->host);
|
||||
FREEUP(reasons->host_based_reasons[i]);
|
||||
}
|
||||
}
|
||||
|
||||
FREEUP(reasons->host_based_reasons);
|
||||
reasons->nhost_reasons = 0;
|
||||
}
|
||||
|
||||
if (reasons->res_based_reasons != NULL) {
|
||||
int i;
|
||||
|
||||
for (i = 0; i < reasons->nres_reasons; i++) {
|
||||
if (reasons->res_based_reasons[i] == NULL) {
|
||||
continue;
|
||||
}
|
||||
|
||||
FREEUP(reasons->res_based_reasons[i]->resource);
|
||||
FREEUP(reasons->res_based_reasons[i]->host);
|
||||
FREEUP(reasons->res_based_reasons[i]);
|
||||
}
|
||||
|
||||
FREEUP(reasons->res_based_reasons);
|
||||
reasons->nres_reasons = 0;
|
||||
}
|
||||
|
||||
reasons->main_reason = 0;
|
||||
}
|
||||
|
||||
static int add_host_preason(xce_job_preason_t* reasons, int code, char* host)
|
||||
{
|
||||
xce_host_reason_t** p;
|
||||
xce_host_reason_t* p1;
|
||||
char* h;
|
||||
int count;
|
||||
|
||||
if ((reasons == NULL) || (host == NULL)) {
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
h = strdup(host);
|
||||
if (h == NULL) {
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
p1 = (xce_host_reason_t*)calloc(1, sizeof(*p1));
|
||||
if (p1 == NULL) {
|
||||
FREEUP(h);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
p1->reason = code;
|
||||
p1->host = h;
|
||||
|
||||
count = reasons->nhost_reasons;
|
||||
p = (xce_host_reason_t**)realloc(reasons->host_based_reasons,
|
||||
(count + 1) * sizeof(xce_host_reason_t*));
|
||||
if (p == NULL) {
|
||||
FREEUP(h);
|
||||
FREEUP(p1);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
reasons->host_based_reasons = p;
|
||||
reasons->host_based_reasons[count] = p1;
|
||||
reasons->nhost_reasons++;
|
||||
|
||||
return reasons->nhost_reasons;
|
||||
}
|
||||
|
||||
static int add_res_preason(xce_job_preason_t* reasons, int code, char* host,
|
||||
char* res)
|
||||
{
|
||||
xce_res_reason_t** p;
|
||||
char* h;
|
||||
char* r;
|
||||
int count;
|
||||
xce_res_reason_t* p1;
|
||||
|
||||
if ((reasons == NULL) || (host == NULL) || (res == NULL)) {
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
h = strdup(host);
|
||||
r = strdup(res);
|
||||
p1 = (xce_res_reason_t*)calloc(1, sizeof(*p1));
|
||||
|
||||
if ((h == NULL) || (r == NULL) || (p1 == NULL)) {
|
||||
FREEUP(h);
|
||||
FREEUP(r);
|
||||
FREEUP(p1);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
p1->host = h;
|
||||
p1->resource = r;
|
||||
p1->reason = code;
|
||||
|
||||
count = reasons->nres_reasons;
|
||||
p = (xce_res_reason_t**)realloc(reasons->res_based_reasons,
|
||||
(count + 1) * sizeof(*p));
|
||||
if (p == NULL) {
|
||||
FREEUP(h);
|
||||
FREEUP(r);
|
||||
FREEUP(p1);
|
||||
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
reasons->res_based_reasons = p;
|
||||
reasons->res_based_reasons[count] = p1;
|
||||
|
||||
reasons->nres_reasons++;
|
||||
|
||||
return reasons->nres_reasons;
|
||||
}
|
||||
|
||||
int add_job_preason(xce_job_preason_t* reasons, int code, char* host, char* res)
|
||||
{
|
||||
int rc = 0;
|
||||
|
||||
if ((host == NULL) && (res == NULL)) {
|
||||
/* set main reason */
|
||||
erase_job_preason(reasons);
|
||||
reasons->main_reason = code;
|
||||
} else if (res == NULL) {
|
||||
/* set host reason */
|
||||
rc = add_host_preason(reasons, code, host);
|
||||
} else {
|
||||
/* set resource reason */
|
||||
rc = add_res_preason(reasons, code, host, res);
|
||||
}
|
||||
|
||||
return rc;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue