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
|
|
@ -80,8 +80,9 @@ func cJobToModel(job *C.xce_job_t) *models.JobInfo {
|
|||
|
||||
// cWorkerToModel extracts C xce_worker_t fields into a rawWorkerData and maps it to HostInfo.
|
||||
func cWorkerToModel(worker *C.xce_worker_t) *models.HostInfo {
|
||||
workerName := goString(worker.name)
|
||||
r := rawWorkerData{
|
||||
name: goString(worker.name),
|
||||
name: workerName,
|
||||
status: int(worker.status),
|
||||
}
|
||||
if worker.attrs != nil {
|
||||
|
|
@ -96,6 +97,16 @@ func cWorkerToModel(worker *C.xce_worker_t) *models.HostInfo {
|
|||
r.maxTmp = int(a.maxtmp)
|
||||
r.nDisks = int(a.ndisks)
|
||||
}
|
||||
n := int(worker.nresvals_to_sched)
|
||||
if n > 0 {
|
||||
entries := unsafe.Slice(worker.resvals_to_sched, n)
|
||||
r.resvals = make([]models.ResourceDistributionInfo, 0, n)
|
||||
for _, nv := range entries {
|
||||
if rd := cNameValToWorkerResval(workerName, nv); rd != nil {
|
||||
r.resvals = append(r.resvals, *rd)
|
||||
}
|
||||
}
|
||||
}
|
||||
return rawWorkerToModel(r)
|
||||
}
|
||||
|
||||
|
|
@ -267,6 +278,55 @@ func freeJobSubmit(js *C.xce_job_submit_t, sd *C.job_submit_data_t, si *C.job_st
|
|||
}
|
||||
}
|
||||
|
||||
// cNameValToWorkerResval converts a C xce_name_val_t pointer to a ResourceDistributionInfo.
|
||||
// workerName is set as Location. Returns nil if nv or nv.val is nil.
|
||||
func cNameValToWorkerResval(workerName string, nv *C.xce_name_val_t) *models.ResourceDistributionInfo {
|
||||
if nv == nil {
|
||||
return nil
|
||||
}
|
||||
rd := &models.ResourceDistributionInfo{
|
||||
ResourceName: C.GoString(nv.name),
|
||||
Location: workerName,
|
||||
IsDynamic: true,
|
||||
}
|
||||
if nv.val == nil {
|
||||
logger.Warn("worker resval with nil value, skipping",
|
||||
zap.String("resource", rd.ResourceName),
|
||||
zap.String("host", workerName))
|
||||
return nil
|
||||
}
|
||||
switch C.xce_val_which(nv.val) {
|
||||
case C.Value_u_ivalue32:
|
||||
rd.ValueType = int(models.NUMERIC)
|
||||
rd.NumericValue = float64(C.xce_val_i32(nv.val))
|
||||
case C.Value_u_ivalue64:
|
||||
rd.ValueType = int(models.NUMERIC)
|
||||
rd.NumericValue = float64(C.xce_val_i64(nv.val))
|
||||
case C.Value_u_uvalue32:
|
||||
rd.ValueType = int(models.NUMERIC)
|
||||
rd.NumericValue = float64(C.xce_val_u32(nv.val))
|
||||
case C.Value_u_uvalue64:
|
||||
rd.ValueType = int(models.NUMERIC)
|
||||
rd.NumericValue = float64(C.xce_val_u64(nv.val))
|
||||
case C.Value_u_fvalue:
|
||||
rd.ValueType = int(models.NUMERIC)
|
||||
rd.NumericValue = float64(C.xce_val_fval(nv.val))
|
||||
case C.Value_u_svalue:
|
||||
rd.ValueType = int(models.STRING)
|
||||
rd.StringValue = C.GoString(C.xce_val_str(nv.val))
|
||||
case C.Value_u_bvalue:
|
||||
rd.ValueType = int(models.BOOLEAN)
|
||||
rd.BooleanValue = C.xce_val_bool(nv.val) != 0
|
||||
default:
|
||||
logger.Warn("unknown xce_val_t discriminant in worker resval, skipping",
|
||||
zap.Int("which", int(C.xce_val_which(nv.val))),
|
||||
zap.String("resource", rd.ResourceName),
|
||||
zap.String("host", workerName))
|
||||
return nil
|
||||
}
|
||||
return rd
|
||||
}
|
||||
|
||||
// cResvalToDistribution converts a C xce_resval_t pointer to a Go ResourceDistributionInfo.
|
||||
// Returns nil if vp.val is NULL (nil guard prevents CGO panic).
|
||||
// vp.val is a *C.xce_val_t pointer field — pass directly, no &.
|
||||
|
|
|
|||
|
|
@ -126,6 +126,7 @@ type rawWorkerData struct {
|
|||
maxSwap int
|
||||
maxTmp int
|
||||
nDisks int
|
||||
resvals []models.ResourceDistributionInfo
|
||||
}
|
||||
|
||||
// rawQueueData mirrors the C xce_queue_t fields used by the Go model.
|
||||
|
|
@ -204,8 +205,9 @@ func rawJobToModel(r rawJobData) *models.JobInfo {
|
|||
// rawWorkerToModel maps a rawWorkerData to a models.HostInfo.
|
||||
func rawWorkerToModel(r rawWorkerData) *models.HostInfo {
|
||||
info := &models.HostInfo{
|
||||
HostName: r.name,
|
||||
HostStatus: r.status,
|
||||
HostName: r.name,
|
||||
HostStatus: r.status,
|
||||
ResourceValues: r.resvals,
|
||||
}
|
||||
if r.hasAttrs {
|
||||
info.HostType = r.hostType
|
||||
|
|
|
|||
|
|
@ -86,8 +86,9 @@ type HostInfo struct {
|
|||
NumUSusp int `json:"num_ususp"`
|
||||
//NumRsv int `json:"num_rsv"`
|
||||
NumDone int `json:"num_done"`
|
||||
Topology string `json:"topology"` // JSONB
|
||||
SchedStop string `json:"sched_stop"` // JSONB
|
||||
Topology string `json:"topology"` // JSONB
|
||||
SchedStop string `json:"sched_stop"` // JSONB
|
||||
ResourceValues []ResourceDistributionInfo `json:"resource_values"` // per-worker resource values
|
||||
//RealLoad string `json:"real_load"` // JSONB
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue