mirror of
https://github.com/opf/openproject.git
synced 2026-06-14 03:30:14 +00:00
dcc3428f51
`OpenProject::JobStatus::EventListener.register!` is called in a `config.to_prepare` block, meaning it's called after each reload in development mode and events are subscribed to multiple times. This is for instance visible in logs with the same job-related message being logged multiple times: ``` I, [2025-11-21T10:02:13.993101 #51789] INFO -- : [ActiveJob] Enqueued Journals::CompletedJob (Job ID: 85e5a6cf-e394-4d44-87c7-177aa4535a65) to GoodJob(default) at 2025-11-21 09:07:13 UTC I, [2025-11-21T10:02:13.993971 #51789] INFO -- : [ActiveJob] ↳ app/workers/journals/completed_job.rb:39:in 'Journals::CompletedJob.schedule' D, [2025-11-21T10:02:13.994114 #51789] DEBUG -- : [ActiveJob] Enqueuing background job #<Journals::CompletedJob:0x00000003d59def80 @arguments=[81, 2025-11-21 09:00:52.603688000 UTC +00:00, true], @job_id="85e5a6cf-e394-4d44-87c7-177aa4535a65", @queue_name="default", @scheduled_at=2025-11-21 09:07:13.984857000 UTC +00:00, @priority=5, @executions=0, @exception_executions={}, @timezone="Etc/UTC", @successfully_enqueued=true, @provider_job_id="85e5a6cf-e394-4d44-87c7-177aa4535a65", @_halted_callback_hook_called=nil> D, [2025-11-21T10:02:13.994153 #51789] DEBUG -- : [ActiveJob] Enqueuing background job #<Journals::CompletedJob:0x00000003d59def80 @arguments=[81, 2025-11-21 09:00:52.603688000 UTC +00:00, true], @job_id="85e5a6cf-e394-4d44-87c7-177aa4535a65", @queue_name="default", @scheduled_at=2025-11-21 09:07:13.984857000 UTC +00:00, @priority=5, @executions=0, @exception_executions={}, @timezone="Etc/UTC", @successfully_enqueued=true, @provider_job_id="85e5a6cf-e394-4d44-87c7-177aa4535a65", @_halted_callback_hook_called=nil> D, [2025-11-21T10:02:13.994178 #51789] DEBUG -- : [ActiveJob] Enqueuing background job #<Journals::CompletedJob:0x00000003d59def80 @arguments=[81, 2025-11-21 09:00:52.603688000 UTC +00:00, true], @job_id="85e5a6cf-e394-4d44-87c7-177aa4535a65", @queue_name="default", @scheduled_at=2025-11-21 09:07:13.984857000 UTC +00:00, @priority=5, @executions=0, @exception_executions={}, @timezone="Etc/UTC", @successfully_enqueued=true, @provider_job_id="85e5a6cf-e394-4d44-87c7-177aa4535a65", @_halted_callback_hook_called=nil> D, [2025-11-21T10:02:13.994203 #51789] DEBUG -- : [ActiveJob] Enqueuing background job #<Journals::CompletedJob:0x00000003d59def80 @arguments=[81, 2025-11-21 09:00:52.603688000 UTC +00:00, true], @job_id="85e5a6cf-e394-4d44-87c7-177aa4535a65", @queue_name="default", @scheduled_at=2025-11-21 09:07:13.984857000 UTC +00:00, @priority=5, @executions=0, @exception_executions={}, @timezone="Etc/UTC", @successfully_enqueued=true, @provider_job_id="85e5a6cf-e394-4d44-87c7-177aa4535a65", @_halted_callback_hook_called=nil> D, [2025-11-21T10:02:13.994229 #51789] DEBUG -- : [ActiveJob] Enqueuing background job #<Journals::CompletedJob:0x00000003d59def80 @arguments=[81, 2025-11-21 09:00:52.603688000 UTC +00:00, true], @job_id="85e5a6cf-e394-4d44-87c7-177aa4535a65", @queue_name="default", @scheduled_at=2025-11-21 09:07:13.984857000 UTC +00:00, @priority=5, @executions=0, @exception_executions={}, @timezone="Etc/UTC", @successfully_enqueued=true, @provider_job_id="85e5a6cf-e394-4d44-87c7-177aa4535a65", @_halted_callback_hook_called=nil> D, [2025-11-21T10:02:13.994254 #51789] DEBUG -- : [ActiveJob] Enqueuing background job #<Journals::CompletedJob:0x00000003d59def80 @arguments=[81, 2025-11-21 09:00:52.603688000 UTC +00:00, true], @job_id="85e5a6cf-e394-4d44-87c7-177aa4535a65", @queue_name="default", @scheduled_at=2025-11-21 09:07:13.984857000 UTC +00:00, @priority=5, @executions=0, @exception_executions={}, @timezone="Etc/UTC", @successfully_enqueued=true, @provider_job_id="85e5a6cf-e394-4d44-87c7-177aa4535a65", @_halted_callback_hook_called=nil> D, [2025-11-21T10:02:13.994278 #51789] DEBUG -- : [ActiveJob] Enqueuing background job #<Journals::CompletedJob:0x00000003d59def80 @arguments=[81, 2025-11-21 09:00:52.603688000 UTC +00:00, true], @job_id="85e5a6cf-e394-4d44-87c7-177aa4535a65", @queue_name="default", @scheduled_at=2025-11-21 09:07:13.984857000 UTC +00:00, @priority=5, @executions=0, @exception_executions={}, @timezone="Etc/UTC", @successfully_enqueued=true, @provider_job_id="85e5a6cf-e394-4d44-87c7-177aa4535a65", @_halted_callback_hook_called=nil> ... ``` Fix it by unsubscribing them all when the class is unloaded.