Skip to content

run_all.sh: repl_preflight FAIL이어도 FINAL_OK=1이 되어 AUTO_SHUTDOWN이 박스를 꺼버린다 #641

Description

@Khyojae

배경

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 실패 시에도 같은 경로를 타는지는 확인 안 함.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions