Skip to content

Commit fcb1018

Browse files
committed
fix(pod-monitor): balance restart and creation ordering
1 parent 9229283 commit fcb1018

File tree

2 files changed

+55
-5
lines changed

2 files changed

+55
-5
lines changed

kubernetes_monitoring.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -388,9 +388,9 @@ def _prioritize_pods_for_creation_monitor(
388388
)
389389
priorities.sort(
390390
key=lambda entry: (
391-
entry.restart_flag,
392391
entry.activity_timestamp,
393392
entry.summary.restarts,
393+
entry.created_at or UTC_MIN,
394394
entry.namespace,
395395
entry.pod_name,
396396
),

tests/test_kubernetes_monitoring.py

Lines changed: 54 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -176,8 +176,8 @@ def test_summarize_pod_containers_last_restart_time():
176176
assert summary.last_restart_at == expected
177177

178178

179-
def test_prioritize_pods_for_creation_monitor_prefers_restarts():
180-
"""재시작된 Pod가 최신 생성 Pod보다 우선 정렬된다."""
179+
def test_prioritize_pods_for_creation_monitor_orders_by_activity():
180+
"""재시작 시각이 최신인 Pod가 먼저 노출된다."""
181181
restarted_pod = kubernetes_monitoring._wrap_kubectl_value(
182182
{
183183
"metadata": {
@@ -194,7 +194,7 @@ def test_prioritize_pods_for_creation_monitor_prefers_restarts():
194194
"ready": True,
195195
"restartCount": 3,
196196
"lastState": {
197-
"terminated": {"finishedAt": "2024-05-01T03:00:00Z"}
197+
"terminated": {"finishedAt": "2024-06-05T03:00:00Z"}
198198
},
199199
}
200200
],
@@ -223,11 +223,61 @@ def test_prioritize_pods_for_creation_monitor_prefers_restarts():
223223
[fresh_pod, restarted_pod]
224224
)
225225
assert [entry.pod_name for entry in prioritized] == ["restarted", "fresh"]
226-
expected_activity = kubernetes_monitoring._ensure_datetime("2024-05-01T03:00:00Z")
226+
expected_activity = kubernetes_monitoring._ensure_datetime("2024-06-05T03:00:00Z")
227227
assert prioritized[0].activity_timestamp == expected_activity
228228
assert prioritized[0].summary.restarts == 3
229229

230230

231+
def test_prioritize_pods_for_creation_monitor_respects_creation_order():
232+
"""재시작이 오래된 Pod보다 새로 생성된 Pod가 우선한다."""
233+
restarted_pod = kubernetes_monitoring._wrap_kubectl_value(
234+
{
235+
"metadata": {
236+
"name": "old-restarted",
237+
"namespace": "default",
238+
"creationTimestamp": "2024-01-01T00:00:00Z",
239+
},
240+
"status": {
241+
"phase": "Running",
242+
"podIP": "10.0.0.1",
243+
"containerStatuses": [
244+
{
245+
"name": "app",
246+
"ready": True,
247+
"restartCount": 3,
248+
"lastState": {
249+
"terminated": {"finishedAt": "2024-02-01T00:00:00Z"}
250+
},
251+
}
252+
],
253+
},
254+
"spec": {"containers": [{"name": "app"}], "nodeName": "node-a"},
255+
}
256+
)
257+
fresh_pod = kubernetes_monitoring._wrap_kubectl_value(
258+
{
259+
"metadata": {
260+
"name": "fresh",
261+
"namespace": "default",
262+
"creationTimestamp": "2024-06-01T00:00:00Z",
263+
},
264+
"status": {
265+
"phase": "Running",
266+
"podIP": "10.0.0.2",
267+
"containerStatuses": [
268+
{"name": "app", "ready": True, "restartCount": 0}
269+
],
270+
},
271+
"spec": {"containers": [{"name": "app"}], "nodeName": "node-b"},
272+
}
273+
)
274+
prioritized = kubernetes_monitoring._prioritize_pods_for_creation_monitor(
275+
[restarted_pod, fresh_pod]
276+
)
277+
assert [entry.pod_name for entry in prioritized] == ["fresh", "old-restarted"]
278+
assert prioritized[0].summary.restarts == 0
279+
280+
231281
def test_extract_node_label_infos():
232282
"""선택한 라벨 키 기준으로 노드 목록을 요약한다."""
233283
nodes_payload = [

0 commit comments

Comments
 (0)