ES /docs

Failed to create event: Failed to open TCP connection to kinesis.eu-central-1.amazonaws.com:443 (exe

Fix Plan: Kinesis TCP connect timeout — rescue 필터 확장

Changes#

tesla: lib/cupix/event_service.rb#

  • What: publish_event 하단의 rescue RestClient::Exception => e 절 앞에 rescue Aws::Errors::ServiceError, Seahorse::Client::NetworkingError => e 절을 추가하여 AWS Ruby SDK가 던지는 네트워크/서비스 예외까지 Cupix::Errors::System(code: 'SYS20000', ...) 로 일관되게 변환한다. 기존 RestClient::Exception rescue 절은 그대로 유지 (호환성).
  • Why: RCA H1 (Confirmed) — 현재 rescue RestClient::Exception만으로는 aws-sdk-kinesis의 Seahorse 스택이 던지는 Seahorse::Client::NetworkingError(Net::OpenTimeout 래핑) / Aws::Kinesis::Errors::ServiceError가 잡히지 않아 원시 네트워크 예외가 상위 Eventable::Events::Base.create_event로 그대로 전파된다. 팀 표준 에러 매핑을 적용해 로깅/모니터링/알림 일관성을 회복한다. 기존 코드베이스에도 Aws::Errors::ServiceError 패턴은 이미 사용됨 (app/factories/base_factory.rb:134, lib/cupix/migrate/{mask,coverable}.rb).
  • Lines: 50-54 부근 (기존 rescue RestClient::Exception 위에 새 rescue 절 추가)

tesla: spec/lib/cupix/event_service_spec.rb (신규)#

  • What: publish_event가 (a) Seahorse::Client::NetworkingError, (b) Aws::Kinesis::Errors::ServiceError 를 각각 Cupix::Errors::System(code: SYS20000) 으로 변환하고, 기존 RestClient::Exception 매핑도 그대로 유지되는지 검증하는 스펙 추가.
  • Why: 신규 rescue 절에 대한 회귀 방지. spec/lib/cupix/event_service_spec.rb가 현재 존재하지 않으므로 최소 골격을 함께 작성한다.
  • Lines: 신규 파일 (약 60~80 라인)

Acceptance Criteria#

  • lib/cupix/event_service.rbrescue Aws::Errors::ServiceError, Seahorse::Client::NetworkingError 절이 존재하며 Cupix::Errors::System(code: 'SYS20000', ...) 로 변환한다.
  • 기존 rescue RestClient::Exception 경로가 그대로 유지된다 (backward compatible).
  • ruby -c lib/cupix/event_service.rb 통과.
  • 신규 스펙 파일이 세 개의 예외 타입(Seahorse networking, Aws service error, RestClient) 각각에 대해 Cupix::Errors::System 재발생을 검증한다.

Tests#

  • 기존 테스트: spec/lib/cupix/aws/kinesis_spec.rb (변경 없음, 통과 유지)
  • 신규 테스트: spec/lib/cupix/event_service_spec.rb — Seahorse::Client::NetworkingError / Aws::Kinesis::Errors::ServiceError / RestClient::Exception 각각 → Cupix::Errors::System(code: 'SYS20000') 변환 검증

Out of Scope (별도 트랙)#

  • app/models/concerns/eventable/events/base.rb:19-21raise e 제거: RCA가 "이벤트 소비자 요구사항 확인이 필요하므로 팀 조율 대상"으로 명시. 트랜잭션 경계 재설계는 outbox 패턴 또는 after_commit + 재시도 큐로 이관이 필요하며 도메인 계약 검토가 선행되어야 하므로 별도 티켓으로 분리.
  • lib/cupix/aws/kinesis.rb의 SDK timeout/retry 옵션 지정: 단기 개선 항목이며 이번 PR 범위에서 제외.