feat: P2.5-7a map JOB_STAT_TRANSIENT (0x400) to TRANSIENT in job status API

This commit is contained in:
Rongsong Shen 2026-05-08 02:03:19 +00:00
parent 2e8ed8cb4e
commit b94ff9eb01
2 changed files with 40 additions and 25 deletions

View file

@ -61,18 +61,19 @@ var JobSignalMapTable = map[string]int{
} }
var JOBSTAT = map[string]int{ var JOBSTAT = map[string]int{
"PEND": 0x01, "PEND": 0x01,
"RUN": 0x02, "RUN": 0x02,
"EXIT": 0x04, "EXIT": 0x04,
"DONE": 0x08, "DONE": 0x08,
"PSUSP": 0x10, "PSUSP": 0x10,
"USUSP": 0x20, "USUSP": 0x20,
"SSUSP": 0x40, "SSUSP": 0x40,
"PDONE": 0x80, "PDONE": 0x80,
"PERR": 0x100, "PERR": 0x100,
"WAIT": 0x200, "WAIT": 0x200,
"RUNKWN": 0x8000, "TRANSIENT": 0x400, // C JOB_STAT_TRANSIENT: job state uncertain after failover
"UNKNOWN": 0x10000, // C JOB_STAT_UNKWN: worker lost contact with controller "RUNKWN": 0x8000,
"UNKNOWN": 0x10000, // C JOB_STAT_UNKWN: worker lost contact with controller
} }
var LAUNCHTYPE = map[string]int{ var LAUNCHTYPE = map[string]int{
@ -81,7 +82,10 @@ var LAUNCHTYPE = map[string]int{
} }
func JobStateStr(state int) string { func JobStateStr(state int) string {
if (state & JOBSTAT["PEND"]) != 0 { // Check TRANSIENT first — it takes priority after failover
if (state & JOBSTAT["TRANSIENT"]) != 0 {
return "TRANSIENT"
} else if (state & JOBSTAT["PEND"]) != 0 {
if (state & JOBSTAT["PSUSP"]) != 0 { if (state & JOBSTAT["PSUSP"]) != 0 {
return "PSUSP" return "PSUSP"
} }

View file

@ -58,6 +58,16 @@ func TestJobStateStr(t *testing.T) {
state: 0, state: 0,
want: "ERR", want: "ERR",
}, },
{
name: "TRANSIENT (0x400 — job uncertain after failover)",
state: 0x400,
want: "TRANSIENT",
},
{
name: "TRANSIENT with other bits set",
state: 0x400 | 0x01, // TRANSIENT + PEND
want: "TRANSIENT",
},
} }
for _, tt := range tests { for _, tt := range tests {
@ -73,18 +83,19 @@ func TestJobStateStr(t *testing.T) {
func TestJobStatMapValues(t *testing.T) { func TestJobStatMapValues(t *testing.T) {
// Verify bitmask values match C JOB_STAT_* defines in src/include/xce/types.h. // Verify bitmask values match C JOB_STAT_* defines in src/include/xce/types.h.
expected := map[string]int{ expected := map[string]int{
"PEND": 0x01, "PEND": 0x01,
"RUN": 0x02, "RUN": 0x02,
"EXIT": 0x04, "EXIT": 0x04,
"DONE": 0x08, "DONE": 0x08,
"PSUSP": 0x10, "PSUSP": 0x10,
"USUSP": 0x20, "USUSP": 0x20,
"SSUSP": 0x40, "SSUSP": 0x40,
"PDONE": 0x80, "PDONE": 0x80,
"PERR": 0x100, "PERR": 0x100,
"WAIT": 0x200, "WAIT": 0x200,
"RUNKWN": 0x8000, "TRANSIENT": 0x400,
"UNKNOWN": 0x10000, "RUNKWN": 0x8000,
"UNKNOWN": 0x10000,
} }
for key, want := range expected { for key, want := range expected {
got, ok := JOBSTAT[key] got, ok := JOBSTAT[key]