Skip to content

[DR 통합] 복제·복구 오류 수정과 운영자 복구 경로 개선 - #1022

Merged
dhslove merged 67 commits into
ablecloud-team:ablestack-europafrom
dhslove:codex/fix-1012-1013-dr-recovery
Sep 12, 2026
Merged

[DR 통합] 복제·복구 오류 수정과 운영자 복구 경로 개선#1022
dhslove merged 67 commits into
ablecloud-team:ablestack-europafrom
dhslove:codex/fix-1012-1013-dr-recovery

Conversation

@dhslove

@dhslove dhslove commented Sep 10, 2026

Copy link
Copy Markdown

최종 병합·이슈 관리 상태

병합 완료: Cloud #1022 → ablestack-europa (4c42a079caf8), qemu #56 → main (9184ecd8ef16). 기존 오류 수정과 강제 삭제/수동 정리 핵심 구현을 포함한다.

사용자 요청에 따라 연결 개별 완료 이슈는 종료하고, 아래 잔여 범위는 별도 열린 이슈로 관리한다. 본문 아래의 과거 ‘Draft/충돌/병합 대기/이슈 OPEN 유지’ 설명은 당시 작업 이력이며 현재 상태가 아니다.

검증은 각 문서에 명시된 모듈/UI/실환경 범위로 한정한다. 이슈 종료가 미실행 전체 릴리즈 시험의 PASS를 의미하지 않는다.

구현·검증 및 병합 과정의 상세 이력

#1020 핵심 구현·배포·UI 검증 완료 — 2026-09-11

기존 #1021/#1018까지 보존한 양쪽 codex/fix-1020-reverse-progress에서 구현하고 통합 브랜치 codex/fix-1012-1013-dr-recovery에 fast-forward 반영했습니다. Cloud f492aa3317e27f331190f217b34721bdf1337030(구현377c17835e3), qemu fe490da675e5a0d128eb0dda49e96799a5ae84b9(구현687cff4). 강제 푸시·upstream 병합은 하지 않았습니다.

  • 부모 Run/Plan/checkpoint sequence와 KVM_TO_VMWARE/effective mode를 실제 역복제 진행 자료에 전달하고 Cloud 저장·API·UI까지 보존합니다. 자식 artifact Run 이름은 유지합니다.
  • 다른 Run/과거 checkpoint/정방향/무식별 역복제 진행 및 완료 주기 대체값이 현재 전송을 덮지 못하게 했습니다. 다중 디스크 실제 총량과 누적 readback bytes를 사용합니다.
  • 전송100%를 원본 복구 완료로 해석하지 않습니다. VERIFY100%에는 전체 작업이 계속 RUNNING이며, 실제 protection-resuming 단계에서만 원본 복구 완료 및 보호 재개 대기 안내를 표시합니다.
  • WSL ext4 DR 변경 모듈 473 tests/Checkstyle/package PASS, UI 26 tests/lint/production build PASS, qemu lifecycle 71 cases, release tombstone 및 checkpoint/full·delta/readback 회귀 PASS. 전체 Cloud 빌드 및 qemu RPM 생성 없음.
  • 13/22/31/32 compute12대에 shell/Python 직접 배포, 31/32 관리 클래스/UI 적용. 설치 SHA256, 백업, WEB-INF/META-INF/config.json symlink 보존, HTTP200 및 서비스 상태 확인.
  • 실제 32 UI planned Failover → Failback → 자동 보호 재개 PASS. Failover 21878e31-6fc0-4e7c-9012-5a21527b589a, Failback 945af7c9-cb5c-4a95-b79d-6b94ffb4676e. 19:42:52 KST UI/DB 모두 SUCCEEDED/completed/100%, 오류 없음. 수동 Resume/DB 수리 없이 후속 durable checkpoint315(요구186)를 확인했고 READY/ENABLED/RUNNING/HEALTHY로 복귀했습니다.
  • UI1%→35%→74%→VERIFY100%에서 FULL_REVERSE_SEED/100GiB 분모 확인. 복사/검증 중 조기 원본 완료 안내 없음. 19:34:57 실제 원본 복구 이후에만 안내. 현재 작업 취소/기존 DR 계획 삭제 메뉴 활성 확인.
  • 선택 출처184, reverse baseline185, 실제 107374182400B REVERSE_READBACK PASS. 원본 POWERED_ON/대상 POWERED_OFF, VMware 양단 QGA 제외 유지.
  • RBD/qcow2 전용64MiB fixture full/incremental 데이터 비교 및 progress identity/mode/bytes PASS, fixture 정리 완료. 기존31 qcow2 및22 RBD 지속 복제 확인. qcow2 readback false/0 계약 보존.

코드 수준 설계 · 실행·검증 범위와 배포 근거

실제 qcow2 전체 UI failback 및 모든 물리 장애·migration·OS 조합을 이번에 새로 검증한 것으로 계산하지 않습니다. Cloud PR #1022의 기존 충돌은 별도 병합 작업으로 남깁니다. 이슈는 upstream 병합 완료와 구분하여 열어 둡니다.

Nutanix 제외 잔여 개발/보완 18건(Cloud17+qemu1), 핵심 구현·명시 범위 시험 완료/병합·잔여 검증 37건입니다. 다음 DR P2 #962 확장 + #1006(기존 최소 강제 삭제 재개발 없이 수동·잔여 자원 정리/보존 정책). 이후 #951#952#953, #1001#986, #973#966#1019, #1028#1027, #1033+#978+#1010+qemu#55, P3#955. Diplo #1029는 별도 P1입니다.


#1021 + #1018 핵심 구현·배포·UI 검증 완료 — 2026-09-11

기존 #954까지 보존한 양쪽 codex/fix-1021-1018-recovery-evidence에서 구현하고 통합 브랜치 codex/fix-1012-1013-dr-recovery로 fast-forward 반영했습니다. Cloud b822ca532da(구현 5cf94b79cd1), qemu f379fe2(구현 e5c6a0a).

  • [DR][P2] 반복 전환 후 reverse baseline의 체크포인트 출처 번호 불일치 조사 #1021: 실제 선택한 로컬 복구 지점의 plan/run/ref/sequence 및 manifest/checkpoint SHA256을 baseline에 기록하고 역복제 commit 후에도 보존합니다. 이전 Run 번호를 선택된 복구 지점으로 오인하지 않습니다.
  • [DR][P2] qcow2 역복제 완료 지표와 실제 readback 검증 증거 분리 #1018: QEMU_BACKUP_COMPLETION과 실제 REVERSE_READBACK을 분리했습니다. qcow2 완료만으로 verifiedBytes를 만들지 않으며 false/0을 Cloud 저장·UI까지 보존합니다. 과거 증거 없음도 명시합니다.
  • WSL ext4 DR 모듈 471 tests/package PASS, UI lint/production build PASS. qemu lifecycle 71 cases, tombstone 및 선택/기준점/쓰기 실패·readback 불일치/진행률 회귀 PASS. qemu RPM과 전체 Cloud 빌드는 수행하지 않았습니다.
  • 13/22/31/32 compute12대에 변경 shell/Python 직접 배포, 설치 SHA256 확인. 31/32 관리 클래스와 UI 배포, 백업·WEB-INF·HTTP200 확인.
  • 실제 32 UI planned failover → failback → 자동 보호 재개 PASS. Failover Run 2fd79125-1598-4498-86d7-7811fecaf701, Failback Run 93a89a1c-5be7-411a-a80a-d8fd6b39b49e 모두 UI/DB SUCCEEDED. 18:31:26 KST 최종 완료.
  • 선택 출처 183/ref/SHA 보존, reverse baseline 184, 실제 100GiB(107374182400B) readback PASS. UI에서 증거 필드를 확인했습니다. 수동 Resume/DB 수리 없이 후속 durable checkpoint 304, READY/ENABLED/RUNNING. 원본 POWERED_ON/대상 POWERED_OFF. VMware 양단 QGA 제외 유지.
  • RBD/qcow2 disposable64MiB fixture의 full/incremental 데이터 비교 PASS. qcow2 자체는 readback false/0이며 별도 시험 검증기의 비교를 mover 증거로 가장하지 않습니다. 기존 qcow2/RBD 복제 지속 확인.

상세 설계 · 검증 범위와 결과

qcow2 전체 UI failback 체인 및 모든 물리 장애/배치/OS 조합을 이번에 새로 완료했다고 주장하지 않습니다. 시험 중 오래된 역복제 진행률/조기 완료 안내를 재현하여 기존 #1020에 증거를 추가했습니다. 해당 UI 오류는 별도 후속이며 이번 기능 PASS와 구분합니다. upstream 병합은 아직 하지 않았고 Cloud PR #1022의 기존 충돌은 별도 통합 검증 대상으로 남깁니다.

Nutanix 제외 잔여 개발/보완 19건(Cloud18+qemu1), 핵심 구현·시험 완료/병합·잔여 검증 36건. 다음 DR P2 #1020#962 확장 + #1006, Diplo #1029 별도 P1입니다.


#980 구현·배포·UI 검증 완료 — 2026-09-11

  • 안전 브랜치 codex/fix-980-cleanup-resume-idempotency, 기준 [DR][P1] 전체 재동기화 Run이 요청 FULL_RESEED 영속화 전에 성공하는 경합 수정 #967 43330d38e3 → 구현 65d5f3798a → 검증 기록 c117226bc8. 기존 변경을 보존하여 통합 브랜치/PR #1022로 fast-forward 반영했다.
  • cleanup Run별 export 준비 세대와 drained ACK를 영속화하여 RESUME/START 응답 유실 시 기존 STOP을 반복하지 않는다. live worker 재해석 및 최신 PAUSE/RELEASE/FAILOVER 의도 검증 유지.
  • WSL ext4 변경 모듈 빌드: DR 465, schema 390 tests PASS. qemu lifecycle 71, checkpoint 13, tombstone PASS. qemu 운영 소스/패키지 변경 없음.
  • 31 qcow2: UI 테스트/정리 성공, 실제 RESUME 처리 후 응답 유실 10회, export 651 유지. PENDING 중 관리 서버 재시작 뒤 수동 Resume/DB 수리 없이 RESTORED, checkpoint1937→1943.
  • 32 RBD: UI 테스트/정리 성공, 응답 유실 4회, export 197 유지, RESTORED, checkpoint4696→4699. 두 UI 최종 RUNNING/HEALTHY/RESUMED 확인. 시험 래퍼는 원본 해시 검증 후 복원했다.
  • 31/32 복원 서비스 클래스 배포·설치 해시·HTTP200·WEB-INF 검증. 13/22 원본 중계 JAR 유지, schema만 적용. 역할별 preflight 사례를 #1033에 기록했다.
  • 정상 checkpoint idle flush의 PID 교체는 허용된다. 이번 검증은 세대 유지 및 복제 지속/자동 복원을 입증하며, 모든 경로 물리 호스트 장애·migration·failback 체인을 새로 통과했다는 뜻은 아니다. VMware 양단 QGA 제외.

코드 수준 설계 · 실행 Run/증거/제한 상세

upstream 병합은 아직 하지 않았다. 다음 P1은 #954, Diplo #1029는 별도 트랙. Nutanix 제외 잔여 개발/보완22건, 구현·핵심 검증/병합·잔여 시험33건으로 Epic #950을 갱신한다.


최신 반영: #1034 + #962 최소 잔여 (2026-09-11)

손상된 과거 completed evidence가 새 체크포인트 승인까지 막던 경로를 보완했다. Agent의 제한된 후보 보존, broker의 실패 전달/오래된 호스트 fallback 방지, Cloud CONFLICT boundary 및 target COMMITTED/동일 identity/digest 확인 후 ACK를 포함한다. 레거시 소스의 빈 active_side를 호환하며 Cloud SOURCE 권한과 TARGET/lifecycle 경계는 유지한다.

  • Cloud 16b3e03b34, qemu fb6df9b. 안전 브랜치 codex/fix-1034-962-ui-recovery; 기존 PR HEAD에서 fast-forward만 수행했다.
  • Cloud 변경 모듈 package: KVM 730(3 skipped), FTCTL 84, DR 457 tests, 실패/오류 0. qemu lifecycle 71, tombstone, checkpoint 13 tests PASS. qemu는 문서 변경만 있어 셸/패키지 재배포 없음.
  • 관리 서버 4대·Agent 12대 선택 클래스 배포, 설치 해시/서비스/UI HTTP 200/WEB-INF 보존 확인.
  • qcow2 손상 주입 후 UI Run 10d7d270-0c5b-4be1-8b2a-36cc7340eb23 SUCCEEDED, 새 FULL_SEED checkpoint 1924(디스크 2개 COMMITTED proof 검증), 후속 증분 1925 자동 완료. 최종 요청 뒤 서비스 재시작/상태 보정/DB repair/수동 ACK 없음.
  • [DR][P2] 실패·잔여 계획의 강제 정리/삭제 및 원격 단절 시 등록 해제 지원 #962 기존 동일 삭제창에서 일반 삭제 거절 → 강제 등록 해제 성공(job 4080→4081), 실패 이력/runtime 보존 및 VM/볼륨 수 불변. 전체 orphan 관리 확장은 P2 잔여.
  • RBD/VMware 정상 증분 및 UI 회귀 확인. 실제 손상→UI 복구 시험은 qcow2에서 수행했으며 물리 장애/전체 전환 행렬을 새로 모두 반복하지 않았다. VMware 양단 QGA 제외.
  • 초기 실패 시험은 완료로 합산하지 않았다. Agent 배포 중지 경합은 #1010에 추가 기록했다.

상세: 설계, 검증 기록.

남은 우선순위: P1 #967#980#954, 별도 Diplo #1029. #962 확장 및 증거/보존/자원 경계/운영 지원은 P2, #955 P3. Nutanix 제외 관리 대기열은 잔여 24건 / 구현·핵심 시험 완료 및 병합·잔여 검증 31건. 기존 PR 충돌 해소와 최종 병합 검증은 별도이며 이번에 병합하지 않았다.


연동 PR: ablecloud-team/ablestack-qemu-exec-tools#56

현재 GitHub 병합 판정: CONFLICTING. 최신 ablestack-europa와 충돌이 확인됐으며, 기존 검증 HEAD를 보존한 상태에서 충돌 해결과 회귀 검증을 다음 통합 작업으로 수행해야 합니다.

저장소별 변경

Cloud 변경: 기존 100파일/39커밋에 이번 설계·검증 문서 2파일/1커밋을 추가했습니다. 비교 시 upstream 전용 95개 커밋이 있어 아직 최신 upstream 통합 전입니다. PR #983 NIC 드라이버 수정은 기존 브랜치에 통합되어 중복 구현하지 않았습니다. 관리/Agent/UI/schema 변경이 포함되며 관리 webapp 배포는 WEB-INF 보존 원칙을 따릅니다.

목적과 관리 범위

DR 계획의 설정·복제·테스트·재해 전환·페일백에서 발견한 오류 수정과 검증 기록을 누적 관리합니다. 원본 단절 중에도 대상의 유효 체크포인트로 복구할 수 있고, 실패 후 사용자가 정리·강제 등록 삭제를 수행할 수 있도록 개선합니다.

에픽: #950. 현재 검증 브랜치 codex/fix-1012-1013-dr-recovery를 그대로 PR head로 사용하며 이후 관련 후속 변경과 검증 결과를 이 PR에서 추적합니다. 이 PR은 초안이며 이슈를 자동 종료하지 않습니다.

진행 상황

위 체크는 구현 및 각 문서에 명시된 시험 범위의 완료이며 모든 경로 또는 이슈 전체 수용 조건 완료를 뜻하지 않습니다. 특히 #962의 원격 orphan 추적·정리 전체는 미완료입니다.

검증 근거

  • Cloud DR 모듈 WSL ext4 Maven test/package: 451 tests, 실패/오류 0. 전체 Cloud 빌드는 실행하지 않았습니다.
  • qemu 집중 회귀 24, lifecycle 71, release tombstone, shell syntax PASS.
  • 13/22/31/32 각 3대, 총 12개 호스트에 최종 shell 4개 직접 배포하고 SHA256 확인. 이번 최종 qemu 변경은 RPM 빌드 없이 파일 배포했습니다.
  • 32번 UI: 전체 재동기화483, 테스트485, 정리486, 재해 페일오버487, 페일백488 SUCCEEDED. 원본 vCenter 단절 상태에서 테스트/정리/재해 전환 성공.
  • 페일백488: 100GiB 전체 역복제 쓰기/readback, 원본 부팅·XFS rw·파일 해시, source-only 변경 제거 확인. 후속 정방향 checkpoint184 자동 확정, READY / SOURCE / RUNNING / HEALTHY.
  • 별도 64MiB 실제 fixture에서 RBD/qcow2 전체 역복제와 후속 delta 데이터 비교 PASS. 이 결과를 qcow2 전체 UI 전환 체인으로 확대하지 않습니다.
  • VMware 원본과 대상 모두 QGA 검증 대상에서 제외합니다. 레거시 DR Cluster 활성화 금지와 원본 단절 재해 전환 계약을 유지합니다.

상세: docs/ftctl/issue-1012-1013-validation.md 및 각 이슈별 설계·검증 문서. 과거 배포 중 보정/재시작이 필요했던 시도와 최종 무보정 성공을 문서에서 구분했습니다. 현재 PR 생성은 최신 upstream 통합 후 재검증이나 새 CI 성공을 의미하지 않습니다.

후속 작업 대기열 — 2026-09-11 갱신

최신 전체 상태/우선순위는 Cloud 에픽 #950 본문을 따른다. 다음은 #1034 + #962 최소 복구 출구 → #967#980(P1 상향) → #954(P1 상향). 이미 구현된 #1023/#1030~#1032는 재개발하지 않는다. Diplo #1029와 PR 충돌 해소·최종 병합 검증은 별도 트랙이다. Nutanix #956~#959는 이번 대기열에서 제외한다.

#1007 / #972 통합 반영 (2026-09-11)

  • 기존 PR HEAD를 조상으로 유지한 codex/fix-1007-972-scheduler-resume 브랜치 생성, force 없이 기존 PR 브랜치에 fast-forward 반영
  • scheduler 시작 시 기존 PAUSE/STOP/RUN과 generation 보존, 최초 초기화 경합 보호
  • pause/resume Run에 유효한 durable checkpoint 승계, 기존 provider baseline 검증 유지
  • Cloud DR 모듈 451 tests/package, qemu 집중 23 tests, lifecycle 71, maintenance/tombstone/syntax PASS
  • 13/22/31/32 compute 총 12대에 shell 2개 백업·직접 배포 및 해시 확인 (Cloud JAR/UI 변경 없음)
  • RBD/VMware/qcow2 PAUSED 재시작 보존 및 worker 소실 후 UI Resume 증분 성공: 4623 / 189 / 1546
  • 세 경로 RUNNING worker 재시작 후 별도 Resume 없이 다음 증분 확정: 4624 / 191 / 1547, READY/RUNNING/HEALTHY 및 UI 사용 가능

Cloud commit 1269c4066b, qemu commit 091a8da. 상세 설계·검증: docs/ftctl/issue-1007-972-design.md, docs/ftctl/issue-1007-972-validation.md.

원본 13 관리 서버 DB pool 고갈로 첫 qcow2 Pause가 실패한 별도 문제는 P1 #1023으로 등록했습니다. 관리 서비스 임시 복구 후 본 변경을 시험했으며, 그 수동 복구를 무개입 장애 복원 PASS로 계산하지 않습니다. 기존 상태 표시 #973도 후속 관리합니다.

이번 PASS는 프로세스 재시작/소실과 UI 제어·체크포인트 증분에 대한 결과입니다. 장시간 물리 host reboot, management/Agent 각각의 장애 주입, 새 게스트 변경 데이터 해시 비교 및 전체 재해 전환 UI 체인은 이번에 추가 실행하지 않았습니다. 기존 lifecycle 계약 회귀를 통과했으며 VMware 양단 QGA 제외를 유지합니다. 잔여 수용 조건과 최신 upstream 통합 검증 때문에 이슈 자동 종료 및 PR 병합은 수행하지 않습니다.

#1023 공통 DB 연결 누수 수정 (2026-09-11)

codex/fix-1023-db-connection-lifecycle에서 기존 HEAD 1269c4066b를 보존하고 c558c69f02를 fast-forward 반영했습니다. qemu 변경은 없습니다.

  • 13 관리 JVM에서 분당 연결 누적과 HA 결과 처리의 장기 점유 스택 3회 연속 확보
  • BaseHATask 외부 결과 처리 및 내부 검사 thread 각각의 DB context 반환 구현
  • 추가 [DB][P2] Guest OS 중복 조회에서 JDBC 연결과 결과 리소스 미반환 #1026 Guest OS standalone JDBC 연결/statement/resultset 누수 수정
  • 신규 HA4/GuestOS5 테스트: 기존 코드 모두 실패, 수정본 통과
  • server 3125 tests(실패0/오류0/기존skip5), schema390, DR451 모듈 package PASS
  • 13/22/31/32 관리 서버에 수정 클래스3개만 배포; 원본 JAR 백업, 다른 모든 항목 byte 동일, active/HTTP200/WEB-INF 및 클래스 SHA256 확인
  • 13번6분7회 pool active 2→2→1→3→1→1→1, 대기0. HA 검사는 계속 실행됨
  • 31 UI pause/resume SUCCEEDED 및 재로그인·작업 이력 확인

설계/검증: docs/ftctl/issue-1023-design.md, docs/ftctl/issue-1023-validation.md. API 로컬 의존 버전을 맞춘 후 변경 모듈을 빌드했으며 전체 Cloud 빌드는 실행하지 않았습니다. DB pool 크기나 HA 판정/펜싱 정책을 바꾸지 않았습니다.

추가 감사: #1027 통합 JAR Hikari NOPLogger, #1028 invalid connection 참조 유실은 별도 후속입니다. 사용자 요청으로 Diplo P1 #1029를 등록했고 최신 Diplo에도 동일 HA 경로를 확인했습니다. Diplo에는 아직 적용·배포하지 않았습니다.

UI 검증 중 별도 P1 #1030을 발견했습니다. qcow2의 살아 있는 worker에서 Resume 후 다음 candidate producer Run이 불일치해 재시작을 반복합니다. 첫 전체 재동기화 Run의 SUCCEEDED도 실제 복제 복구를 의미하지 않았습니다. 기존 durable1554는 보존됐으며 해당 scheduler만 종료한 뒤 새 UI 전체 재동기화로 운영자 복구를 진행했습니다. 이 결과를 #1023 DB 반환 PASS와 분리해 기록합니다. source-unreachable 재해 전환 및 VMware 양단 QGA 제외 정책은 변경하지 않았습니다.

#1030 복구 결과 및 검증 한계

해당 scheduler만 수동 종료하고 UI 전체 재동기화 Run 562a81d3-1ce4-4e6c-a0a1-90d64a6fb751를 실행한 결과 checkpoint1557이 FULL_SEED / READY로 확정됐다. UI 동기화 이력에서 원본 시각09:40:44, 대상 준비09:42:02, 읽기/쓰기/전송150GiB를 확인했고 runtime도 READY / HEALTHY / IDLE, pending 없음으로 확인했다. 증거는 qcow2-recovery.json이다. 이는 운영자 복구 성공이며 #1030 수정 완료 또는 무개입 자동 복원 PASS가 아니다.

반복 오류의 원인은 기존 worker의 producerRunUuid와 새 Resume가 기록한 profile Run의 수명이 다른데 candidate 생성에서 이를 혼용하는 경로다. 이전 #1007/#972의 worker 소실 후 Resume 시험은 새 worker와 profile ID가 일치하므로 이 결함을 검출하지 못했다. 살아 있는 worker의 Pause/Resume 후 다음 변경 체크포인트까지의 검증이 누락됐다. 후속 #1030에서는 제어 작업 ID와 복제 생산자 ID를 분리하고, 기존 worker 유지/소실 각각에서 변경 데이터 확정 및 실패 후 UI 복구를 수용 기준으로 검증해야 한다. 작업 이력 SUCCEEDED만으로 복제 완료를 판단하지 않는다.

2026-09-11: #1030/#1031/#1032 메뉴 및 호스트 이동 복구 보완

Pause/Resume의 제어 Run이 실제 체크포인트 producer를 덮어쓰거나, 정상 단일 LIVE scheduler를 미정리 작업으로 판정해 메뉴를 차단하는 문제를 수정했습니다. 원본 VM 이동 후에는 현재 배치를 다시 확인하며, 이전 호스트의 원본 부재 상태보다 정상 작업자를 선택합니다. VM migration 제한은 추가하지 않았습니다.

  • 잘못된 pending candidate의 무한 재시작을 막고 거절 증거를 보존합니다.
  • 내부 target-suppressed STOP만 새 source/coordinator 역할에서 해제합니다. 사용자 Pause/Stop과 재해 전환 권한은 유지합니다.
  • RECOVER_SYNC 체크포인트 승인, 비밀이 아닌 cycle 식별자 보존, imported checkpoint의 NBD 검증 과장 방지, 원본 부재 rc110의 안정적인 재시도를 반영했습니다.
  • WSL 변경 모듈 Maven: DR 456, FTCTL service 82 tests PASS. qemu producer/resume/checkpoint, lifecycle 71, release tombstone, maintenance 및 relocation 회귀 PASS. 전체 빌드/RPM 빌드는 하지 않았습니다.
  • 13/22/31/32 관리 서버와 compute 12대에 적용했습니다. qemu는 shell 파일 직접 배포, Cloud는 변경 클래스 및 필요한 기존 의존성을 선택 적용했습니다. WEB-INF와 무관한 JAR entry를 보존했습니다.
  • UI: qcow2/RBD/VMware Pause/Resume 및 worker 소실 복원 검증. qcow2 VM 13.2→13.1 실제 UI live migration 이후 수동 DR 명령 없이 현재 디스크 655360 bytes 전송, producer 42e7c5fd의 checkpoint 1638 대상 영속화(11:38:17 KST), HEALTHY/RESUMED 확인. 앞선 13.1→13.2 복구는 배포 재시작 이후 worker 08bb25f0 / checkpoint 1897 완료를 별도로 기록했습니다.
  • VMware 원본과 대상에 QGA를 사용하지 않았습니다. 모든 경로의 실제 live migration/재해 전체 시나리오를 이번 결과로 PASS 처리하지 않습니다.

기존 손상된 completed snapshot은 시험 중 수동으로 실제 증거를 복원해야 했습니다. 이를 UI-only 성공으로 계산하지 않으며 #1034(P1)에서 처리합니다. 기존 관리 패키지의 누락 의존성과 배포 사전 점검은 #1033(P2)입니다. 상세 설계와 실패/성공 기록: docs/ftctl/issue-1030-design.md, docs/ftctl/issue-1030-validation.md.

#967 전체 재동기화 조기 성공 수정

대상 VM 준비 완료 callback이 새 FULL_RESEED의 실제 완료를 우회하여 Run을 성공 처리하던 경로를 제거했다. 요청별 checkpoint 검증은 기존 #1013/#1030 구현을 재사용한다.

  • 안전 브랜치 codex/fix-967-full-reseed-completion, 구현 281f4a96a7.

  • 수정 전 callback 재현 실패, 수정 후 DR 모듈 461 tests PASS. qemu lifecycle 71 / tombstone / checkpoint 13 PASS.

  • 관리 서버 13/22/31/32에 변경 클래스 배포 및 해시·HTTP·서비스 확인.

  • UI qcow2 요청 checkpoint 1931: durable 14:11:58 → Run 성공 14:12:47. RBD checkpoint 4689: durable 14:14:26 → Run 성공 14:14:59. 전송 중 ACCEPTED 유지 및 target COMMITTED proof 확인.

  • qemu/Agent/UI 코드 변경 없음. VMware 양단 QGA 제외 유지.

  • 설계, 검증 기록과 범위.

  • [DR][P1] 전체 재동기화 Run이 요청 FULL_RESEED 영속화 전에 성공하는 경합 수정 #967 최종 자동 복귀: 수동 재개 없이 qcow2 1932 / RBD 4690 / VMware 258 CBT_INCREMENTAL, 모두 READY·HEALTHY·IDLE 및 동일 scheduler PID 확인.

#954 핵심 구현·배포·UI 검증 완료 — 2026-09-11

기존 #980까지 보존한 codex/fix-954-target-compute-sizing에서 구현 c740c03069, 부분 편집 보존 수정 6717ea73d7, 검증 기록 2e3d3168643을 통합 브랜치/PR #1022로 fast-forward 반영했습니다. qemu 운영 소스 변경은 없습니다.

  • WSL ext4 DR 변경 모듈 470 tests/package PASS, UI 16 tests/lint/production build PASS, qemu guestprep3/boot hardware smoke PASS.
  • 31/32 관리 클래스4개와 UI static 배포. 클래스 해시, mold active, HTTP200, WEB-INF 및 config.json symlink 보존 확인.
  • 실제 32 UI: 정지 VMware 원본2CPU/4GiB보다 작은1CPU/2000MHz/2GiB 계획 생성 → 재조회 →4CPU/8GiB 편집 → 다시 편집에서 값 보존 PASS. CPU속도·offering·디스크·네트워크 보존 확인.
  • 고정 offering4/2000/8192 전환·저장·재조회 모두 readonly. 31 부분 고정은 CPU/메모리 편집 가능, 속도2000만 readonly 및 기존 값 보존 확인(저장은 변경하지 않음).
  • 빈 속도/소수 CPU UI 거절, 명시 offering 전환의 초기값 처리 확인. 시험 초안은 기존 UI 삭제 메뉴로 정리했고 새 VM/볼륨을 만들지 않았습니다.
  • 첫 UI 시험에서 발견한 부분 수정 시 기존 mapping/policy 유실은 실패로 기록하고 [DR][P1] Plan 생성 시 대상 오퍼링·CPU·메모리 독립 설정 #954 안에서 수정했습니다. 최종 새 Plan55 재검증을 통과했으며 DB 수리로 성공을 만들지 않았습니다.
  • 기존 qcow2/RBD/VMware READY·HEALTHY와 증분 진행 확인. VMware 양단 QGA 제외 유지.

코드 수준 설계 · UI 단계·해시·검증 범위

실제 기존 대상 VM resize/실행별 override는 #955입니다. 권한·quota 모든 조합 및 전체 failover/failback 체인을 이번에 새로 검증한 것으로 계산하지 않습니다. upstream 병합은 하지 않았으며 PR #1022의 기존 충돌은 별도 통합 작업으로 남아 있습니다.

Nutanix 제외 잔여 개발/보완 21건(Cloud20+qemu1), 핵심 구현·시험 완료/병합·잔여 검증 34건. 다음 DR P2 #1021#1018, Diplo #1029 별도 P1입니다.

#962 확장 + #1006 수동 정리 핵심 구현 완료 (2026-09-11)

과거 불변 체크포인트를 사용자가 선택해 정리하고, 최신·참조·clone 사용 세트를 보존한다. 정책 저장은 자동 삭제를 시작하지 않는다. 강제 등록 해제 후에는 별도 독립 자원 기록을 UI에서 확인할 수 있다.

  • 후속 브랜치: 양쪽 codex/fix-962-1006-checkpoint-cleanup; 기존 통합 head가 조상임을 확인하고 fast-forward 반영. 이전 개선 누락/강제 push 없음.
  • Cloud head bd5eba6905f, qemu head c9997b2; Cloud DR 모듈 477 tests, UI 5 tests/production build, qemu 정리 14 tests/DR lifecycle 71 cases/release tombstone/기존 checkpoint 13 tests PASS.
  • 12 worker에는 qemu 파일 6개 직접 배포, 31/32에는 변경 DR class/context와 UI 정적 파일 배포. 전체 Cloud/qemu 패키지 빌드 없음. WEB-INF 보존, HTTP200 및 파일 hash 확인.
  • 실제 UI PASS: 31 qcow2 CLOUDSTACK-8663: Fixed various issues to allow VM snapshots and volume apache/cloudstack#1941 두 디스크 선택 정리, 32 VMware→RBD Automation Service - Controller Template 생성 기능 개발 #170 선택 정리. DELETED/EXPIRED 수렴 및 실제 artifact 부재, mutable/최신 자료 보존 확인.
  • 정리 후 최신 checkpoint로 Test Failover → Test Cleanup 성공, 별도 재개 조작 없이 RUNNING 복원 및 새 2017 / 329 READY 확인. VMware 양단 QGA 사용 안 함. VMware guest console 부팅 로그인은 이번 차수에서 반복하지 않았다.
  • 31 disposable 오류 계획의 기존 삭제 메뉴/강제 옵션→등록 해제→독립 미정리 자원 UI 조회 PASS. 실제 VM/볼륨 없는 fixture이며 원격 실제 잔여 자원 전체 삭제 PASS를 뜻하지 않는다.
  • FILE preview 건강 검사 timeout, 실제 API 중첩 응답 처리, Ceph 경로 뒤 큰 JSON nonblocking stdout 부분 출력 오류를 이번 이슈 안에서 수정하고 재시험했다. 삭제 후 오류였던 RBD 첫 시도는 PASS로 세지 않고 동일 요청 재시도 수렴을 확인했다.
  • 잔여: [DR][P2] 실패·잔여 계획의 강제 정리/삭제 및 원격 단절 시 등록 해제 지원 #962 원격 자원 재정리/수동 처리 완료 추적, [DR][P2] 불변 체크포인트 보존 정책·사용 중 세트 보호·수동 정리 및 qcow2 복사 비용 개선 #1006 자동 GC 계약 및 qcow2 COW/복사 비용 개선. 전체 이슈는 닫지 않는다. 이번 차수는 핵심 수동 복구 흐름 완료이며 전체 릴리즈/전체 migration·단절·failback 조합 검증은 아니다.

Cloud 검증 기록 · qemu 검증 기록

기존 오류 수정·강제 삭제 범위 통합 병합 검증 (2026-09-12)

  • 검증 대상 head: da0d571. 이전 DR 통합 bd5eba6905f와 최신 Europa 63b410f4c19를 모두 조상으로 보존.
  • 충돌 해결: schema-42210to42300.sql의 DR 테이블과 OAuth/Quota/ISO 등 Europa 추가를 모두 유지. en/ko_KR 번역은 중복 키 없이 양측 추가를 보존하고 DR NIC 비활성화 문구를 유지. 자동 병합된 DR 활성화 및 HA DB 연결 반환 코드도 검토.
  • 별도 안전 브랜치 codex/merge-dr-integration-europa-20260912. force push 없이 기존 PR head를 fast-forward 갱신.
  • 최신 Maven 4.23.0.0 기준 DR 및 필요한 의존 모듈 35개 install BUILD SUCCESS. 전체 Cloud 빌드는 로컬에서 실행하지 않음.
  • DR 모듈 477 tests / HA DB 연결 반환 회귀 4 tests / DR UI 5 tests PASS.
  • CI가 발견한 라이선스 35개 보완 후 clean tracked-source RAT 검사: Unapproved 0, BUILD SUCCESS. HA 테스트 wildcard import도 명시 import로 수정. 문서 issue 표기/공백 보완.
  • qemu PR #56은 CI SUCCESS head c9997b2를 main에 병합 완료: 9184ecd8ef16eb5c4b4d315e3648e6869caf0e1f.

CI 상태와 제한

전체 pre-commit은 기존 upstream과 동일 blob/mode인 broken symlink, 실행 비트, noVNC 파일 및 문서 오류를 포함한다. #1044에 재현/비교 증거를 등록했다. 모든 lint 실패가 기존 문제라는 뜻은 아니며 이번 DR 문서·license/import 문제는 현재 PR에서 보완했다.
fork 토큰이 충돌 해소 라벨을 제거하지 못해 triage가 실패한 것은 #1043에 등록했다. 실제 merge conflict는 해결했고 stale 라벨을 제거했다.
PR push로 자동 시작되는 전체 Build/UI/RPM CI는 모듈 검증과 별도다. 그 완료를 전체 릴리즈 검증 PASS로 선행 주장하지 않는다. 이번 병합 작업 중 테스트 클러스터 재배포·UI 전체 체인은 반복하지 않았으며 기존 배포/UI 증거는 #962/#1006 검증 기록을 따른다.

잔여 범위

원격 잔여 자원 재정리/완료 추적(#962), 자동 GC 및 qcow2 복사 비용(#1006)은 여전히 미완료다. 신규 #1043/#1044는 CI P2 후속으로 관리. 다음 DR 구현 순서는 #951#952#953, 별도 P1은 Diplo #1029.

dhslove and others added 30 commits September 9, 2026 22:01
검증 근거와 제한 시간을 DB에 보존하고 KVM guest-ping 응답 이후에만 테스트를 성공 처리한다.
QGA 미응답 실패와 정리 경합을 처리하고 검증 모드 및 결과를 UI에 표시한다.

Refs: ablecloud-team#963
This was referenced Sep 12, 2026
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