190 lines
5.6 KiB
JSON
190 lines
5.6 KiB
JSON
{
|
|
"version": "1.1",
|
|
"id": "ghost-row-cleanup-order",
|
|
"title": "유령 행을 지운 쪽과 그 시각",
|
|
"question": "SIGKILL 로 끊긴 노드의 JGROUPS_PING 행은 누가, 언제 지우는가",
|
|
"type": "sequence",
|
|
"direction": "LR",
|
|
"audience": [
|
|
"Keycloak 클러스터를 쿠버네티스에 올리는 엔지니어"
|
|
],
|
|
"summary": "행을 지운 화살표는 죽은 노드가 아니라 남아 있는 코디네이터에서 나오고, 클러스터 뷰가 바뀐 초와 같은 초에 찍힌다.",
|
|
"alt": "kubectl 이 강제 종료한 Keycloak 노드가 클러스터에서 빠지고, 남은 노드가 JGROUPS_PING 의 행을 지운 뒤 다른 이름의 새 노드가 합류하는 시간 순서.",
|
|
"long_description": "왼쪽부터 kubectl, keycloak-0-60375, keycloak-1-36736, JGROUPS_PING, keycloak-0-16105 다섯 참여자가 생명선으로 선다. 1번 메시지에서 kubectl 이 keycloak-0-60375 를 --grace-period=0 --force 로 끊는다. 2번에서 07:40:28 에 남은 노드 keycloak-1-36736 의 뷰에서 그 노드가 빠진다. 3번이 이 그림의 중심이다 — 같은 07:40:28 에 JGROUPS_PING 의 행을 지우는 화살표가 keycloak-1-36736 에서 나온다. 강제 종료로 이미 끊긴 keycloak-0-60375 의 생명선에서는 테이블로 가는 화살표가 없다. 4번에서 20초 뒤 07:40:48 에 keycloak-0-16105 가 합류한다. 돌아온 노드의 이름은 접두사 keycloak-0 만 같고 접미사가 다르다.",
|
|
"source_context": {
|
|
"document": "docs/keycloak-session-store/final/document.md",
|
|
"document_sha256": "28aef96a2bbb94fbb10ade26a71238fee62a5a4d9fa6e7749ae98cfd0a65e560",
|
|
"anchor": {
|
|
"kind": "heading",
|
|
"value": "관측 (observed)",
|
|
"line": 2963
|
|
}
|
|
},
|
|
"composition": {
|
|
"profile": "sequence",
|
|
"diagram_only": true,
|
|
"reference_ids": [
|
|
"payment-approval-sequence"
|
|
],
|
|
"rationale": "지배적 질문이 「누가 언제 지웠나」라 참여자 사이의 시간 순서가 논지다. 정적 구성도로 그리면 행을 지운 주체가 어느 생명선에서 나오는지가 사라진다.",
|
|
"focus_node": "coordinator"
|
|
},
|
|
"groups": [],
|
|
"nodes": [
|
|
{
|
|
"id": "kubectl",
|
|
"label": "kubectl",
|
|
"kind": "participant",
|
|
"role": "participant",
|
|
"description": "파드를 정상 종료와 강제 종료로 끊는 쪽.",
|
|
"evidence": [
|
|
{
|
|
"start_line": 2957,
|
|
"end_line": 2959
|
|
}
|
|
],
|
|
"assumption": false
|
|
},
|
|
{
|
|
"id": "dying",
|
|
"label": "keycloak-0-60375",
|
|
"kind": "participant",
|
|
"role": "participant",
|
|
"details": [
|
|
"SIGKILL"
|
|
],
|
|
"emphasis": "warning",
|
|
"description": "강제 종료로 끊긴 노드. 자기 행을 지우고 나갈 틈이 없다.",
|
|
"evidence": [
|
|
{
|
|
"start_line": 2969,
|
|
"end_line": 2972
|
|
}
|
|
],
|
|
"assumption": false
|
|
},
|
|
{
|
|
"id": "coordinator",
|
|
"label": "keycloak-1-36736",
|
|
"kind": "participant",
|
|
"role": "participant",
|
|
"details": [
|
|
"코디네이터"
|
|
],
|
|
"emphasis": "primary",
|
|
"description": "남아 있는 코디네이터. 정리 주체다.",
|
|
"evidence": [
|
|
{
|
|
"start_line": 2985,
|
|
"end_line": 2987
|
|
}
|
|
],
|
|
"assumption": false
|
|
},
|
|
{
|
|
"id": "pingtable",
|
|
"label": "JGROUPS_PING",
|
|
"kind": "participant",
|
|
"role": "participant",
|
|
"description": "노드 행이 등록되는 발견 테이블.",
|
|
"evidence": [
|
|
{
|
|
"start_line": 2959,
|
|
"end_line": 2959
|
|
}
|
|
],
|
|
"assumption": false
|
|
},
|
|
{
|
|
"id": "rejoined",
|
|
"label": "keycloak-0-16105",
|
|
"kind": "participant",
|
|
"role": "participant",
|
|
"details": [
|
|
"새 접미사"
|
|
],
|
|
"description": "복구 뒤 올라온 노드. 접두사만 같다.",
|
|
"evidence": [
|
|
{
|
|
"start_line": 2989,
|
|
"end_line": 2991
|
|
}
|
|
],
|
|
"assumption": false
|
|
}
|
|
],
|
|
"edges": [
|
|
{
|
|
"id": "m1",
|
|
"from": "kubectl",
|
|
"to": "dying",
|
|
"label": "delete pod --force",
|
|
"kind": "request",
|
|
"order": 1,
|
|
"evidence": [
|
|
{
|
|
"start_line": 2957,
|
|
"end_line": 2959
|
|
}
|
|
],
|
|
"assumption": false
|
|
},
|
|
{
|
|
"id": "m2",
|
|
"from": "dying",
|
|
"to": "coordinator",
|
|
"label": "이탈 07:40:28",
|
|
"kind": "event",
|
|
"style": "dashed",
|
|
"order": 2,
|
|
"evidence": [
|
|
{
|
|
"start_line": 2977,
|
|
"end_line": 2978
|
|
}
|
|
],
|
|
"assumption": false
|
|
},
|
|
{
|
|
"id": "m3",
|
|
"from": "coordinator",
|
|
"to": "pingtable",
|
|
"label": "행 삭제 07:40:28",
|
|
"kind": "data",
|
|
"emphasis": "primary",
|
|
"order": 3,
|
|
"evidence": [
|
|
{
|
|
"start_line": 2968,
|
|
"end_line": 2969
|
|
},
|
|
{
|
|
"start_line": 2985,
|
|
"end_line": 2987
|
|
}
|
|
],
|
|
"assumption": false
|
|
},
|
|
{
|
|
"id": "m4",
|
|
"from": "rejoined",
|
|
"to": "coordinator",
|
|
"label": "합류 07:40:48",
|
|
"kind": "event",
|
|
"style": "dashed",
|
|
"order": 4,
|
|
"evidence": [
|
|
{
|
|
"start_line": 2979,
|
|
"end_line": 2980
|
|
}
|
|
],
|
|
"assumption": false
|
|
}
|
|
],
|
|
"legend": [],
|
|
"metadata": {
|
|
"rationale": "코디네이터 로그는 뷰 변경만 보여 주고 JGROUPS_PING 의 행이 어느 생명선에서 지워지는지는 보여 주지 않는다. 그 화살표 하나를 자리로 세우려고 sequence 를 골랐다."
|
|
}
|
|
}
|