Skip to content

Commit 867becd

Browse files
authored
fix: workload list priorityClassName for super-slicing workloads (#1105)
* Fix Priority JSON path * Add fallback to spec.priorityClassName
1 parent 4d317a3 commit 867becd

2 files changed

Lines changed: 52 additions & 4 deletions

File tree

src/xpk/core/workload.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,9 +103,18 @@ def _parse_workload_item(item: dict[str, Any]) -> _WorkloadListRow:
103103
jobset_name = owner_refs[0].get('name', '') or None
104104

105105
created_time = item.get('metadata', {}).get('creationTimestamp', '') or None
106-
priority = item.get('spec', {}).get('priorityClassName', '') or None
107106

108107
pod_sets = item.get('spec', {}).get('podSets') or []
108+
priority = item.get('spec', {}).get('priorityClassName', '') or None
109+
if not priority and pod_sets:
110+
priority = (
111+
pod_sets[0]
112+
.get('template', {})
113+
.get('spec', {})
114+
.get('priorityClassName', '')
115+
or None
116+
)
117+
109118
tpu_vms_needed = _safe_int(pod_sets[0].get('count')) if pod_sets else None
110119

111120
pod_set_assignments = (

src/xpk/core/workload_test.py

Lines changed: 42 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
import json
2121
from pytest_mock import MockerFixture
2222
from xpk.core.testing.commands_tester import CommandsTester
23-
from xpk.core.workload import get_jobsets_list_gcp_link, get_workload_list
23+
from xpk.core.workload import _parse_workload_item, get_jobsets_list_gcp_link, get_workload_list
2424

2525

2626
from dataclasses import dataclass
@@ -61,8 +61,10 @@ def _create_mock_workload_json(data: _MockWorkloadData):
6161
'ownerReferences': [{'name': data.jobset_name}],
6262
},
6363
'spec': {
64-
'priorityClassName': data.priority,
65-
'podSets': [{'count': data.needed}],
64+
'podSets': [{
65+
'count': data.needed,
66+
'template': {'spec': {'priorityClassName': data.priority}},
67+
}]
6668
},
6769
'status': {
6870
'admission': {'podSetAssignments': [{'count': data.running}]},
@@ -286,3 +288,40 @@ def test_get_workload_list_filters(
286288
parsed_table = _parse_workload_table(return_value)
287289
actual_job_names = [row['Jobset Name'] for row in parsed_table]
288290
assert actual_job_names == expected_job_names
291+
292+
293+
def test_parse_workload_item_priority_from_workload_spec():
294+
295+
item = {
296+
'metadata': {'creationTimestamp': '2024-01-01T00:00:00Z'},
297+
'spec': {
298+
'priorityClassName': 'workload-high',
299+
'podSets': [
300+
{'template': {'spec': {'priorityClassName': 'pod-high'}}}
301+
],
302+
},
303+
}
304+
row = _parse_workload_item(item)
305+
assert row.priority == 'workload-high'
306+
307+
308+
def test_parse_workload_item_priority_from_pod_set_fallback():
309+
310+
item = {
311+
'metadata': {'creationTimestamp': '2024-01-01T00:00:00Z'},
312+
'spec': {
313+
'podSets': [{'template': {'spec': {'priorityClassName': 'pod-low'}}}]
314+
},
315+
}
316+
row = _parse_workload_item(item)
317+
assert row.priority == 'pod-low'
318+
319+
320+
def test_parse_workload_item_priority_not_found():
321+
322+
item = {
323+
'metadata': {'creationTimestamp': '2024-01-01T00:00:00Z'},
324+
'spec': {'podSets': [{'template': {'spec': {}}}]},
325+
}
326+
row = _parse_workload_item(item)
327+
assert row.priority is None

0 commit comments

Comments
 (0)