Skip to content

hangctl 라이브 마이그레이션 보호 로직 개선#35

Merged
dhslove merged 1 commit into
ablecloud-team:mainfrom
dhslove:codex/hangctl-migration-protection-design
Jun 16, 2026
Merged

hangctl 라이브 마이그레이션 보호 로직 개선#35
dhslove merged 1 commit into
ablecloud-team:mainfrom
dhslove:codex/hangctl-migration-protection-design

Conversation

@dhslove

@dhslove dhslove commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

개요

hangctl이 장시간 라이브 마이그레이션 중인 VM을 일반 hang 상태로 오판해 virsh destroy 경로로 진입할 수 있는 문제를 방지합니다.

기존 로직은 domstate --reason 문자열에 migration이 포함되는 경우만 마이그레이션으로 강하게 인식했고, HANGCTL_MIGRATION_PROGRESS_CHECK_SEC 설정은 실제 zombie 판정에 사용되지 않았습니다. 이 PR은 domjobinfo 기반 분류와 진행률 추적을 추가해, 진행 중인 마이그레이션은 보호하고 실제로 진행이 멈춘 마이그레이션만 확인된 zombie로 처리하도록 개선합니다.

주요 변경사항

  • domjobinfoOperation, Job type, memory/data progress 필드를 사용해 migration job과 backup/block job을 분리합니다.
  • Data processed, Memory processed, Memory remaining 값을 bytes로 정규화해 진행률을 비교합니다.
  • HANGCTL_MIGRATION_PROGRESS_CHECK_SEC를 실제 no-progress grace window로 사용합니다.
  • 진행률 파싱 실패 시 active migration이면 destructive action 대신 보호 상태로 처리합니다.
  • migration progress cache를 key-value 형식으로 확장하고, 기존 단일 숫자 cache도 읽을 수 있게 했습니다.
  • 구현 설계 문서와 libvirt 없이 실행 가능한 smoke test를 추가했습니다.
  • 테스트 릴리즈 태그 재정의를 위해 VERSION0.9.2로 맞췄습니다.

검증

로컬 WSL 환경에서 아래 검증을 완료했습니다.

bash -n bin/ablestack_vm_hangctl.sh lib/hangctl/*.sh tests/hangctl_migration_protection_smoke.sh
bash tests/hangctl_migration_protection_smoke.sh
git diff --check
make hangctl-rpm

GitHub Actions 테스트 릴리즈도 완료했습니다.

영향 범위

  • 변경 범위는 hangctl 감지/상태 캐시/테스트/문서에 한정됩니다.
  • non-migration hang에 대한 기존 조치 경로는 유지합니다.
  • active migration job은 진행률 확인 실패 시에도 fail-open으로 보호합니다.

@dhslove dhslove marked this pull request as ready for review June 16, 2026 04:57
@dhslove dhslove merged commit f737e85 into ablecloud-team:main Jun 16, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant