Found by a Codex global repository scan of deepmodeling/dpdispatcher at commit 98a9e08.
Problem
LSF and JH_UniScheduler status parsing assumes a second output line always contains job data. Header-only output with a trailing newline produces an empty second line, then split()[2] raises IndexError.
Relevant code
|
status_out = stdout.read().decode("utf-8").split("\n") |
|
if len(status_out) < 2: |
|
return JobStatus.unknown |
|
else: |
|
status_line = status_out[1] |
|
status_word = status_line.split()[2] |
|
status_out = stdout.read().decode("utf-8").split("\n") |
|
if len(status_out) < 2: |
|
return JobStatus.unknown |
|
else: |
|
status_line = status_out[1] |
|
status_word = status_line.split()[2] |
Impact
Polling can crash when a scheduler returns only headers for a completed, expired, or missing job instead of falling back to finish-tag logic.
Suggested fix
Strip empty lines, require a data row before indexing, and if no data row exists check the finish tag and otherwise return a terminal/unknown state intentionally.
Found by a Codex global repository scan of deepmodeling/dpdispatcher at commit 98a9e08.
Problem
LSF and JH_UniScheduler status parsing assumes a second output line always contains job data. Header-only output with a trailing newline produces an empty second line, then
split()[2]raisesIndexError.Relevant code
dpdispatcher/dpdispatcher/machines/lsf.py
Lines 131 to 136 in 98a9e08
dpdispatcher/dpdispatcher/machines/JH_UniScheduler.py
Lines 107 to 112 in 98a9e08
Impact
Polling can crash when a scheduler returns only headers for a completed, expired, or missing job instead of falling back to finish-tag logic.
Suggested fix
Strip empty lines, require a data row before indexing, and if no data row exists check the finish tag and otherwise return a terminal/unknown state intentionally.