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.class와e.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.rbline 14의 에러 로그에e.class와e.message가 포함됨 -
refinementable.rb의run_refinement_postprocessor내_job.running_state!호출이 rescue 블록으로 감싸져 있음 - rescue 블록에서 에러 클래스, 메시지, backtrace를 로깅함
- 기존 정상 경로(에러 없는 경우)의 동작이 변경되지 않음
Tests#
- 기존 테스트:
spec/workers/job_callback_worker_spec.rb(존재 시) - 신규 테스트: 없음 (rescue 블록 추가는 기존 테스트와 호환)