배경
P4 cross-AZ 복제 라운드를 EC2에서 실행하다가, repl_preflight 단계가 2초 만에 FAIL했는데도 소스·리플리카 두 인스턴스가 몇 분 안에 terminated로 전환됐다. 디버깅에 필요한 /root/run_all_smoke.log도 루트 볼륨과 함께 사라져 실패 원인을 알 수 없게 됐다.
현상 (근거, file:line)
loadtest/aws/run_all.sh:1734-1738 — repl_preflight 실패 시 break로 phase 루프만 빠져나오고, 스크립트는 계속 실행돼 뒤쪽 매니페스트·업로드·종료 블록으로 흐른다.
loadtest/aws/run_all.sh:1824-1828 — FINAL_OK은 오직 sync_s3(S3 업로드) 성공 여부만 본다. 측정 단계가 하나도 안 돈 채로 실패 로그만 올라가도 업로드 자체는 성공하므로 FINAL_OK=1이 된다.
loadtest/aws/run_all.sh:1835-1848 — AUTO_SHUTDOWN=1(기본값) + FINAL_OK=1이면 소스·리플리카 둘 다 SHUTDOWN_DELAY_MIN(기본 5)분 뒤 shutdown -h를 건다.
- 실제 재현: S3
s3://shadowfit-measure-055447613012/shadowfit/ec2-20260902-042111/phases.tsv에 repl_preflight FAIL(1) 2초만 있고 이후 단계는 아예 없는데, 두 인스턴스(i-04c7ccf33038ca3f1, i-03e3b602b605690bf)는 몇 분 뒤 terminated로 확인됨(aws ec2 describe-instances).
영향
aws/README.md:33-51의 규칙("올릴 곳이 없으면 자동 종료를 켜지 않는다")은 업로드 실패 경로만 방어하고 있고, 측정 자체가 실패했는데 업로드는 성공하는 이 경로는 방어되지 않는다.
- 결과적으로
repl_preflight/repl_gate 같은 사전 게이트가 막 걸린 라운드는 원인 로그를 볼 새도 없이 박스가 사라져, 실패할 때마다 처음부터(부트스트랩 포함) 재기동해야 한다 — 비용·시간 낭비.
FINAL_OK을 "모든 실행된 phase가 FAIL 없이 끝났는가"까지 포함하도록 고치거나, 최소한 repl_preflight/게이트류 FAIL 시엔 AUTO_SHUTDOWN을 무시하고 박스를 남기는 처리가 필요해 보인다. 미검증 — 다른 라운드(DDL/backup)의 preflight 실패 시에도 같은 경로를 타는지는 확인 안 함.
배경
P4 cross-AZ 복제 라운드를 EC2에서 실행하다가,
repl_preflight단계가 2초 만에 FAIL했는데도 소스·리플리카 두 인스턴스가 몇 분 안에terminated로 전환됐다. 디버깅에 필요한/root/run_all_smoke.log도 루트 볼륨과 함께 사라져 실패 원인을 알 수 없게 됐다.현상 (근거, file:line)
loadtest/aws/run_all.sh:1734-1738—repl_preflight실패 시break로 phase 루프만 빠져나오고, 스크립트는 계속 실행돼 뒤쪽 매니페스트·업로드·종료 블록으로 흐른다.loadtest/aws/run_all.sh:1824-1828—FINAL_OK은 오직sync_s3(S3 업로드) 성공 여부만 본다. 측정 단계가 하나도 안 돈 채로 실패 로그만 올라가도 업로드 자체는 성공하므로FINAL_OK=1이 된다.loadtest/aws/run_all.sh:1835-1848—AUTO_SHUTDOWN=1(기본값) +FINAL_OK=1이면 소스·리플리카 둘 다SHUTDOWN_DELAY_MIN(기본 5)분 뒤shutdown -h를 건다.s3://shadowfit-measure-055447613012/shadowfit/ec2-20260902-042111/phases.tsv에repl_preflight FAIL(1) 2초만 있고 이후 단계는 아예 없는데, 두 인스턴스(i-04c7ccf33038ca3f1,i-03e3b602b605690bf)는 몇 분 뒤terminated로 확인됨(aws ec2 describe-instances).영향
aws/README.md:33-51의 규칙("올릴 곳이 없으면 자동 종료를 켜지 않는다")은 업로드 실패 경로만 방어하고 있고, 측정 자체가 실패했는데 업로드는 성공하는 이 경로는 방어되지 않는다.repl_preflight/repl_gate같은 사전 게이트가 막 걸린 라운드는 원인 로그를 볼 새도 없이 박스가 사라져, 실패할 때마다 처음부터(부트스트랩 포함) 재기동해야 한다 — 비용·시간 낭비.FINAL_OK을 "모든 실행된 phase가 FAIL 없이 끝났는가"까지 포함하도록 고치거나, 최소한repl_preflight/게이트류 FAIL 시엔AUTO_SHUTDOWN을 무시하고 박스를 남기는 처리가 필요해 보인다. 미검증 — 다른 라운드(DDL/backup)의 preflight 실패 시에도 같은 경로를 타는지는 확인 안 함.