ES /docs

job 1035726 job_stopped_callback error - /var/app/current/vendor/bundle/ruby/3.3.0/gems/mysql2-0.5.4

Fix Plan: job_stopped_callback MySQL2 query error

Changes#

tesla: app/workers/job_callback_worker.rb#

  • What: 에러 로깅에 e.classe.message를 포함하도록 수정. 현재 line 14에서 e.backtrace.join("\n")만 기록하고 있어 MySQL 에러 유형(Lock wait timeout 등)을 파악할 수 없다. e.class: e.message 형태를 backtrace 앞에 추가한다.
  • Why: RCA에서 MySQL exception message가 로그에 누락되어 정확한 에러 유형 확인이 불가능했음. 향후 동일 문제 발생 시 즉시 진단 가능하게 함.
  • Lines: 14

tesla: app/models/concerns/refinementable.rb#

  • What: run_refinement_postprocessor 메서드 내 _job.running_state! 호출(line 140)을 rescue 블록으로 감싸서, 중첩 state machine 트랜잭션에서 발생하는 MySQL lock wait timeout 등의 에러가 전체 job_stopped_callback 체인을 중단하지 않도록 방어. rescue에서 에러를 로깅하고 return하여 postprocessor 실행을 gracefully skip한다.
  • Why: 현재 _job.running_state!가 외부 트랜잭션(Job stopped 전이) 내에서 실행되면서 동일 row에 대한 lock 경합이 발생. 에러가 전파되면 전체 콜백 체인이 실패한다. rescue로 감싸면 postprocessor 재실행 실패를 격리하면서 나머지 콜백은 정상 진행된다.
  • Lines: 140-141

Acceptance Criteria#

  • job_callback_worker.rb line 14의 에러 로그에 e.classe.message가 포함됨
  • refinementable.rbrun_refinement_postprocessor_job.running_state! 호출이 rescue 블록으로 감싸져 있음
  • rescue 블록에서 에러 클래스, 메시지, backtrace를 로깅함
  • 기존 정상 경로(에러 없는 경우)의 동작이 변경되지 않음

Tests#

  • 기존 테스트: spec/workers/job_callback_worker_spec.rb (존재 시)
  • 신규 테스트: 없음 (rescue 블록 추가는 기존 테스트와 호환)