Skip to content

[Test] OpenSQL 지정형 동기와 quorum의 장애 대응 비교 - #541

Merged
Gimini-3 merged 7 commits into
developfrom
feature/538
Oct 16, 2026
Merged

Gimini-3 merged 7 commits into
developfrom
feature/538

Conversation

@Gimini-3

Copy link
Copy Markdown
Contributor

변경 목적

Closes #538

같은 권한 회수 코드와 부하에서 OpenSQL 지정형 동기와 quorum의 성공 응답 보존·결과 불명 재확정·자동 장애 전환을 비교했습니다. 공개 클러스터의 동기 정책은 바꾸지 않았습니다.

변경 내용

  • 격리 OpenSQL·OpenProxy용 수동 permissionHaTest 작업과 실제 MVC/JPA/Hikari 회수 부하 추가
  • DB 밖의 실제 응답 JSONL 원장, 같은 키 재시도, 현재 Primary에서의 실제 요청 키 대조
  • 독립 JDBC 원장 감사 도구와 실행별 준비·실패·장애·재개·자원 정리 증거
  • 원본 OpenProxy의 동기 역할 parser 결함은 #540으로 별도 수정·기록했으며 이번 성공 회차는 읽기 전용 역할 호환 어댑터를 경유

실제 결과

모든 회차는 동일 코드 bb3c73521155a64e9675a28a32c9f673f9a47e0f, strict=true, 동기 ACK 1대, synchronous_commit=on, 48개 합성 권한, 동시성 2입니다.

회차 최초 204 최초 503 같은 키 재시도 후 최종 키 종료 확인→쓰기 재개
지정형 Standby 상실 48/48 0 48/48 3.527초
quorum Standby 상실 48/48 0 48/48 3.474초
지정형 Primary 상실 39/48 9 48/48 26.067초
quorum Primary 상실 39/48 9 48/48 25.902초
  • 최초 204 키 174/174 보존, 결과 불명 18개는 같은 키 WAL 재주장으로 확정, 최종 요청 키 192개
  • 최종 회수 대상 권한 행 0개, 최종 인가 허용 0건. 장애 중 별도 인가 조회 불가 4건은 허용으로 추정하지 않음
  • 준비 실패 및 부분 응답·검증기 실패 회차는 별도 로그로 보존하고 성공 집계에서 제외

결과·원시 증거·시간 정의: docs/test-results/opensql-sync-quorum-20261017/README.md

검증 범위와 판단

  • 로컬 실제 MVC/JPA/Hikari → IAP → 실제 격리 OpenSQL·OpenProxy 경로. 공개 로그인·브라우저·LB·Ollama·GCS E2E는 포함하지 않습니다.
  • GCP 최종 인가 카운터는 실제 문서 본문 반환량 계측이 아닙니다. 네 조회 API의 차단은 #537의 로컬 MVC 시험과 구분합니다.
  • 조건별 1회 관측이므로 quorum의 성능 우위, 전역 RPO=0, 공개 서비스 전체 RTO를 주장하지 않습니다.
  • 원본 OpenProxy는 sync_standby/quorum_standby 모두 시작 실패했습니다. 공급사 공식 지원을 증명한 것이 아니며 공개 동기/quorum 전환은 보류, 동기 확정 기능 기본값 false를 유지합니다.
  • 후보 지정 수동 전환·네트워크 분할·동기 후보 전체 상실·GCP에서 커밋 후 HTTP 응답만 차단하는 회차는 미실행입니다. Patroni #3310 핵심 패치 부재를 해결했다고 주장하지 않습니다.

자원 정리

  • 격리 GCP 컨테이너·전용 데이터·확인된 시험 이미지 각 3개, 전용 DCS 키 제거
  • 로컬 fixture 컨테이너 3개·네트워크 1개 제거
  • 임시 OS Login 키 부재 재확인, 로컬 개인키·비밀 파일 제거, 시험 SSH 연결 종료
  • 공개 클러스터 최종 leader 1대·streaming replica 2대, 기존 설정 hash 유지, 기존 VM 계속 실행
  • 생성 경위가 불확실한 이미지 캐시는 임의 삭제하지 않았습니다. 초기 Docker 이미지 캡처 1회 pause 사용 때의 공개 HTTP 영향은 계측하지 않았습니다.

인프라 식별자·비밀값·라이선스 파일은 포함하지 않았습니다. 자동 CI와 별도 수동 diff 검토 뒤 병합합니다.

@Gimini-3
Gimini-3 requested a review from kangcheolung October 16, 2026 22:03
@coderabbitai

coderabbitai Bot commented Oct 16, 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: 29c67102-2a80-4355-8215-fc49e19d75f8
  • Autofix · 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 left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

수동 검토 결과

현재 HEAD 86fedc651c2fee5884e4d011832c75106e2b5af6의 코드·실행 원장·집계·정리 기록을 대조했습니다.

  • 4개 성공 회차의 실제 최초 응답 각 48개, 재시도 0/0/9/9개와 집계가 일치합니다. 독립 JDBC 감사의 최초 204 키 보존과 최종 48개 키·권한 행 0개도 각 원본 로그와 일치합니다.
  • 초기 실패·부분 10개 응답·최종 검증기 실패 회차는 삭제하거나 성공으로 바꾸지 않았습니다.
  • permission-ha는 기본 CI 시험에서 제외되고 수동 Task에서만 실행됩니다. 검토 중 Flyway migration 주소와 원장 디렉터리 재사용 제한을 보완했습니다. 의도한 사전 차단 2건은 DB 접속 전에 예상 오류로 종료됐고 원장은 변하지 않았습니다.
  • 성공 HA 회차의 실제 실행 리비전은 bb3c735입니다. 사전 실행 제한과 integration 태그 추가 뒤 같은 GCP 회차를 재실행했다고 표현하지 않았습니다.
  • 원본 OpenProxy의 두 동기 역할 parser 결함, 어댑터 경유 범위, 단일 반복, 최종 인가 조회 불가 4건, 초기 Docker pause의 공개 HTTP 영향 미계측을 명시했습니다. 공개 동기/quorum 전환 보류가 결과와 일치합니다.
  • 변경 파일 54개를 대상으로 비공개 인프라 식별자·내부 주소·로컬 절대 경로·개인키 포함 여부를 재확인했으며 발견 0개입니다. 라이선스·비밀 접속 프로필은 포함하지 않았습니다.
  • 격리 자원만 제거했고 공개 클러스터의 leader 1대·streaming replica 2대·기존 설정 유지가 최종 정리 원장과 일치합니다. 불확실한 이미지 캐시를 전부 삭제했다고 주장하지 않습니다.

자동 CI가 최종 HEAD에서 통과하면 병합할 수 있습니다. CodeRabbit 자동 검토 건너뜀을 사람의 승인으로 간주하지 않았습니다.

@Gimini-3
Gimini-3 merged commit 8dc166a into develop Oct 16, 2026
3 checks passed
@Gimini-3

Copy link
Copy Markdown
Contributor Author

최종 CI 및 병합 확인

  • 실행 ID: 38973617998, 검증 리비전: 86fedc651c2fee5884e4d011832c75106e2b5af6
  • 위치: GitHub Actions
  • backend: ./backend/gradlew -p backend build --no-daemon, XML 251개에서 1,501개 중 1,496개 통과·5개 skipped·실패 0개·오류 0개, 작업 시간 5분 8초
  • frontend: lint 및 npm --prefix frontend test(production build 포함), 49개 통과·실패 0개, 작업 시간 42초
  • 별도 격리 HA 수동 회차 4개와 실행 제한 검사 2개는 이 기본 CI 집계에 섞지 않았습니다.
  • 최초 PR 커밋의 CI 38973430192는 후속 커밋으로 GitHub concurrency 정책에 따라 cancelled됐습니다. 최종 판정에는 위 성공 실행만 사용했습니다.
  • 검토한 정확한 HEAD를 병합했으며 merge commit은 8dc166a37904035678eb0a691d5e996a6322fa6e입니다.

최종 CI 원본·시험 보고서

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.

[Test] OpenSQL 지정형 동기와 quorum의 장애 대응 비교

1 participant