부모 #950. #970 실환경 RBD UI 검증에서 발견. 우선순위 P1.
재현
32 Mold Plan 51 (7ec74483-8554-415d-ac56-f62f8b17fbd0), 대상 VM 287, 동적 offering 11. Plan에는 대상 CPU 4 / speed 2100 / memory 8192가 저장되어 있지만 VM details에는 cpuNumber/cpuSpeed/memory가 없다. 2026-09-10 FAILOVER Run 415는 엔진 CUTOVER_READY 이후에도 RUNNING/runtime-transfer에 남고, projection 로그에서 ServiceOffering.getCpu() null unboxing NPE가 반복된다.
스택: CapacityManagerImpl.checkIfHostHasCpuCapabilityAndCapacity:1069 → UserVmManagerImpl.startVirtualMachineUnchecked:6180 → DrTargetMaterializationServiceImpl.ensureTargetPoweredOn:195. 새 대상 생성 시 buildTargetVmDetails는 dynamic 값을 넣지만 기존 대상 재사용/power-on에서는 누락 복구가 없다. 회귀 유입 커밋은 미확정.
최소 설계
DR 대상 power-on 직전에 동적 offering에서 필요한 VM detail이 비어 있는지 검사한다. Plan의 저장된 명시적 target CPU/speed/memory만 사용하여 누락된 값만 채우며 기존 대상 값을 덮지 않는다. 원본 실시간 조회/원본 CPU 일치 강제/임의 기본값은 금지한다. 필요한 값이 Plan에도 없으면 TARGET_COMPUTE_SPEC_REQUIRED로 명확하게 거절한다. 모든 필요값을 먼저 검증한 뒤 기록한다. 고정 offering은 영향을 받지 않는다.
완료 기준
기존 대상의 누락 상세 복구와 UI 시작 성공, 기존 대상 독립 사양 보존, Plan 값 부재 시 명확한 실패, source unreachable 상태에서 source RPC 없는 검증. 사용자 사양 선택 기능 #954/#955와 별개로 기존 오류를 먼저 수정한다. #970 검증 차단 해소용 별도 커밋으로 추적한다.
부모 #950. #970 실환경 RBD UI 검증에서 발견. 우선순위 P1.
재현
32 Mold Plan 51 (7ec74483-8554-415d-ac56-f62f8b17fbd0), 대상 VM 287, 동적 offering 11. Plan에는 대상 CPU 4 / speed 2100 / memory 8192가 저장되어 있지만 VM details에는 cpuNumber/cpuSpeed/memory가 없다. 2026-09-10 FAILOVER Run 415는 엔진 CUTOVER_READY 이후에도 RUNNING/runtime-transfer에 남고, projection 로그에서 ServiceOffering.getCpu() null unboxing NPE가 반복된다.
스택: CapacityManagerImpl.checkIfHostHasCpuCapabilityAndCapacity:1069 → UserVmManagerImpl.startVirtualMachineUnchecked:6180 → DrTargetMaterializationServiceImpl.ensureTargetPoweredOn:195. 새 대상 생성 시 buildTargetVmDetails는 dynamic 값을 넣지만 기존 대상 재사용/power-on에서는 누락 복구가 없다. 회귀 유입 커밋은 미확정.
최소 설계
DR 대상 power-on 직전에 동적 offering에서 필요한 VM detail이 비어 있는지 검사한다. Plan의 저장된 명시적 target CPU/speed/memory만 사용하여 누락된 값만 채우며 기존 대상 값을 덮지 않는다. 원본 실시간 조회/원본 CPU 일치 강제/임의 기본값은 금지한다. 필요한 값이 Plan에도 없으면 TARGET_COMPUTE_SPEC_REQUIRED로 명확하게 거절한다. 모든 필요값을 먼저 검증한 뒤 기록한다. 고정 offering은 영향을 받지 않는다.
완료 기준
기존 대상의 누락 상세 복구와 UI 시작 성공, 기존 대상 독립 사양 보존, Plan 값 부재 시 명확한 실패, source unreachable 상태에서 source RPC 없는 검증. 사용자 사양 선택 기능 #954/#955와 별개로 기존 오류를 먼저 수정한다. #970 검증 차단 해소용 별도 커밋으로 추적한다.