Skip to content

[Test] Embedding Circuit 장애·Probe 복구 경로 통합 검증 - #414

Merged
Gimini-3 merged 9 commits into
developfrom
feature/413
Oct 3, 2026
Merged

Gimini-3 merged 9 commits into
developfrom
feature/413

Conversation

@Gimini-3

@Gimini-3 Gimini-3 commented Oct 3, 2026

Copy link
Copy Markdown
Contributor

🔍️ 작업 내용

실제 Spring Backend·PostgreSQL·Valkey·BGE-M3·Prometheus·Alertmanager를 연결해 하나의 Embedding Job이 Provider 장애에서 복구되는 전체 경로를 자동 검증합니다.

Provider stop
→ Worker 연속 실패 3회
→ Circuit OPEN
→ HALF_OPEN Probe 실패·재OPEN
→ Circuit 경보 firing·Alertmanager 억제
→ Provider restart
→ 성공 Probe·Circuit CLOSED
→ Job INDEXED·Embedding 저장
→ delayed Retry 0·경보 해제

✨ 상세 설명

실제 Circuit 복구 Drill

  • circuit-recovery 명령과 all 실행 순서에 새 시나리오를 추가했습니다.
  • 실제 로그인·multipart 업로드 API로 PENDING Job을 만들고 실제 Worker가 처리합니다.
  • Provider host port를 실행별로 고정하고 docker stop/start로 장애와 복구를 주입합니다.
  • Circuit OPEN·HALF_OPEN·CLOSED 전환, 실패·성공 Probe, delayed Retry Metric을 /actuator/prometheus에서 직접 확인합니다.
  • 운영 Prometheus 규칙의 for: 1m과 Alertmanager inhibition을 실제로 통과시킵니다.
  • Circuit warning이 firing이어도 Provider critical 경보가 활성화된 동안 webhook 전달은 0건인지 확인합니다.
  • Provider 복구 뒤 Job INDEXED, Embedding 저장, open=0, probe_failed=0, delayed_retry_jobs=0까지 기다립니다.

Drill이 발견한 Embedding HTTP 계약 결함 수정

Content-Type이 없던 RestClient 요청은 classpath의 XML Converter를 선택했습니다.

수정 전: EmbedBatchRequest → XML → FastAPI HTTP 422 → Job terminal FAILED
수정 후: application/json 명시 → FastAPI HTTP 200 → 성공 Probe → Job INDEXED

단건 /embed와 Batch /embed/batch 모두 application/json을 명시했습니다. 운영과 같은 JDK HttpClient + Spring RestClient 조합으로 수정 전 422와 수정 후 200을 각각 재현했습니다.

증거 보존

  • Webhook Receiver가 기록 전에 Prometheus·Alertmanager 내부 URL을 [internal URL omitted]으로 치환합니다.
  • 최종 Run의 구조화 JSON과 비식별 firing/resolved webhook JSONL을 docs/test-results/evidence/issue-413/에 보존했습니다.
  • 실행 절차, 실패 Run, 원인 분석, 측정값과 한계는 docs/test-results/gimin-#413-embedding-circuit-recovery.md에 기록했습니다.

최종 실측

경계 결과
Provider 중단 → Circuit OPEN 38.370초
Provider 중단 → 실패 Probe 78.577초
실패 Probe → Circuit 경보 firing 75.299초
Provider 복구 → ready 4.282초
ready → 성공 Probe 4.148초
Provider 복구 → Job INDEXED 8.509초
Circuit warning firing webhook 0건
최종 상태 INDEXED, Embedding 1건, delayed Retry 0건

✅ 검증

  • python3 -m unittest monitoring/drills/test_run_drill.py monitoring/drills/test_webhook_receiver.py -v
    • 4건 성공
  • 실제 Java EmbeddingClient → BGE-M3 계약 테스트
    • 수정 전 HTTP 422(XML body)
    • 수정 후 HTTP 200, 응답 2건
  • ./monitoring/drills/run.sh circuit-recovery --output-dir <결과 디렉터리>
    • 최종 Run PASS
  • ./backend/gradlew -p backend test --no-daemon --rerun-tasks
    • 1,315개 중 1,313개 성공
    • 실패·오류 0개
    • 전용 다중 앱 환경 조건부 테스트 2개 skip
  • ./monitoring/verify.sh --e2e
    • Prometheus·Alertmanager 설정, rule test, Compose, 실제 firing/resolved 전달 통과
  • 모든 시험 Compose project, container, network, PostgreSQL volume 정리 확인

🛠️ 추후 리팩토링 및 고도화 계획

  • 운영 외부 Slack·Discord 채널 응답 검증은 포함하지 않았습니다.
  • Retry Jitter 분포 측정과 다중 JVM Circuit 공유는 별도 범위입니다.
  • 테스트 group_interval은 실행 시간을 제한하기 위해 30초이며 운영값은 5분입니다.

📸 스크린샷 (선택)

해당 없음. 구조화 JSON과 webhook JSONL을 증거로 첨부했습니다.

💬 리뷰 요구사항

  • 실패 Probe 뒤 대상 Job만 원자적으로 10분 지연시키는 경보 검증 경계가 적절한지 확인해 주세요.
  • Provider port 고정 후 stop/start하는 장애 주입이 기존 Drill과 함께 안전하게 격리되는지 확인해 주세요.
  • 단건·Batch 요청의 JSON Content-Type 고정이 FastAPI 계약 경계를 충분히 명시하는지 확인해 주세요.

@coderabbitai

coderabbitai Bot commented Oct 3, 2026

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

⚙️ Run configuration
  • Configuration used: Repository: DocGrid/docgrid/.coderabbit.yaml
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: e80d6bad-d2a8-4c23-a9a3-a4cd12010d44
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@Gimini-3 Gimini-3 added the 🧪 Test 테스트 label Oct 3, 2026
@Gimini-3
Gimini-3 merged commit 4eccb88 into develop Oct 3, 2026
2 checks passed
@Gimini-3 Gimini-3 self-assigned this Oct 4, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

🧪 Test 테스트

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Test] Embedding Circuit 장애·Probe 복구 경로 통합 검증

1 participant