bensheldon / good_job

Multithreaded, Postgres-based, Active Job backend for Ruby on Rails.
https://goodjob-demo.herokuapp.com/
MIT License
2.67k stars 199 forks source link

NoMethodError: private method `_good_job_concurrency_key' if key is nil #835

Closed Earlopain closed 1 year ago

Earlopain commented 1 year ago

As the title says. I presume this commit is at fault: https://github.com/bensheldon/good_job/commit/21993d4cd3aa65db73cb8c8e6d02a88d015e88f8. This is also the case if you simple don't specify good_job_control_concurrency_with, which is how I stumbled across this.

Repro job:

class TestJob < ActiveJob::Base
  include GoodJob::ActiveJobExtensions::Concurrency
  good_job_control_concurrency_with(total_limit: 1, key: { nil })

  def perform
  end
end
Stacktrace ``` NoMethodError: private method `_good_job_concurrency_key' called for # /usr/local/bundle/gems/good_job-3.12.0/lib/good_job/active_job_extensions/concurrency.rb:99:in `good_job_enqueue_concurrency_check' /usr/local/bundle/gems/good_job-3.12.0/lib/good_job/active_job_extensions/concurrency.rb:30:in `block (2 levels) in ' /usr/local/bundle/gems/activesupport-7.0.4.2/lib/active_support/callbacks.rb:467:in `instance_exec' /usr/local/bundle/gems/activesupport-7.0.4.2/lib/active_support/callbacks.rb:467:in `block in make_lambda' /usr/local/bundle/gems/activesupport-7.0.4.2/lib/active_support/callbacks.rb:199:in `block (2 levels) in halting' /usr/local/bundle/gems/activesupport-7.0.4.2/lib/active_support/callbacks.rb:687:in `block (2 levels) in default_terminator' /usr/local/bundle/gems/activesupport-7.0.4.2/lib/active_support/callbacks.rb:686:in `catch' /usr/local/bundle/gems/activesupport-7.0.4.2/lib/active_support/callbacks.rb:686:in `block in default_terminator' /usr/local/bundle/gems/activesupport-7.0.4.2/lib/active_support/callbacks.rb:200:in `block in halting' /usr/local/bundle/gems/activesupport-7.0.4.2/lib/active_support/callbacks.rb:595:in `block in invoke_before' /usr/local/bundle/gems/activesupport-7.0.4.2/lib/active_support/callbacks.rb:595:in `each' /usr/local/bundle/gems/activesupport-7.0.4.2/lib/active_support/callbacks.rb:595:in `invoke_before' /usr/local/bundle/gems/activesupport-7.0.4.2/lib/active_support/callbacks.rb:116:in `block in run_callbacks' /usr/local/bundle/gems/activejob-7.0.4.2/lib/active_job/instrumentation.rb:25:in `block in instrument' /usr/local/bundle/gems/activesupport-7.0.4.2/lib/active_support/notifications.rb:206:in `block in instrument' /usr/local/bundle/gems/activesupport-7.0.4.2/lib/active_support/notifications/instrumenter.rb:24:in `instrument' /usr/local/bundle/gems/activesupport-7.0.4.2/lib/active_support/notifications.rb:206:in `instrument' /usr/local/bundle/gems/activejob-7.0.4.2/lib/active_job/instrumentation.rb:35:in `instrument' /usr/local/bundle/gems/activejob-7.0.4.2/lib/active_job/instrumentation.rb:9:in `block (2 levels) in ' /usr/local/bundle/gems/activesupport-7.0.4.2/lib/active_support/callbacks.rb:127:in `instance_exec' /usr/local/bundle/gems/activesupport-7.0.4.2/lib/active_support/callbacks.rb:127:in `block in run_callbacks' /usr/local/bundle/gems/activejob-7.0.4.2/lib/active_job/logging.rb:27:in `tag_logger' /usr/local/bundle/gems/activejob-7.0.4.2/lib/active_job/logging.rb:14:in `block (2 levels) in ' /usr/local/bundle/gems/activesupport-7.0.4.2/lib/active_support/callbacks.rb:127:in `instance_exec' /usr/local/bundle/gems/activesupport-7.0.4.2/lib/active_support/callbacks.rb:127:in `block in run_callbacks' /usr/local/bundle/gems/activesupport-7.0.4.2/lib/active_support/callbacks.rb:138:in `run_callbacks' /usr/local/bundle/gems/activejob-7.0.4.2/lib/active_job/enqueuing.rb:63:in `enqueue' /usr/local/bundle/gems/activejob-7.0.4.2/lib/active_job/enqueuing.rb:30:in `perform_later' /app/app/models/submission_file.rb:123:in `update_variants_and_iqdb' /usr/local/bundle/gems/activesupport-7.0.4.2/lib/active_support/callbacks.rb:400:in `block in make_lambda' /usr/local/bundle/gems/activesupport-7.0.4.2/lib/active_support/callbacks.rb:261:in `block in conditional' /usr/local/bundle/gems/activesupport-7.0.4.2/lib/active_support/callbacks.rb:599:in `block in invoke_after' /usr/local/bundle/gems/activesupport-7.0.4.2/lib/active_support/callbacks.rb:599:in `each' /usr/local/bundle/gems/activesupport-7.0.4.2/lib/active_support/callbacks.rb:599:in `invoke_after' /usr/local/bundle/gems/activesupport-7.0.4.2/lib/active_support/callbacks.rb:108:in `run_callbacks' /usr/local/bundle/gems/activesupport-7.0.4.2/lib/active_support/callbacks.rb:929:in `_run_commit_callbacks' /usr/local/bundle/gems/activerecord-7.0.4.2/lib/active_record/transactions.rb:321:in `committed!' /usr/local/bundle/gems/activerecord-7.0.4.2/lib/active_record/connection_adapters/abstract/transaction.rb:155:in `commit_records' /usr/local/bundle/gems/activerecord-7.0.4.2/lib/active_record/connection_adapters/abstract/transaction.rb:304:in `block in commit_transaction' /usr/local/bundle/gems/activesupport-7.0.4.2/lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `handle_interrupt' /usr/local/bundle/gems/activesupport-7.0.4.2/lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `block in synchronize' /usr/local/bundle/gems/activesupport-7.0.4.2/lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `handle_interrupt' /usr/local/bundle/gems/activesupport-7.0.4.2/lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `synchronize' /usr/local/bundle/gems/activerecord-7.0.4.2/lib/active_record/connection_adapters/abstract/transaction.rb:294:in `commit_transaction' /usr/local/bundle/gems/activerecord-7.0.4.2/lib/active_record/connection_adapters/abstract/transaction.rb:345:in `block in within_new_transaction' /usr/local/bundle/gems/activesupport-7.0.4.2/lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `handle_interrupt' /usr/local/bundle/gems/activesupport-7.0.4.2/lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `block in synchronize' /usr/local/bundle/gems/activesupport-7.0.4.2/lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `handle_interrupt' /usr/local/bundle/gems/activesupport-7.0.4.2/lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `synchronize' /usr/local/bundle/gems/activerecord-7.0.4.2/lib/active_record/connection_adapters/abstract/transaction.rb:317:in `within_new_transaction' /usr/local/bundle/gems/activerecord-7.0.4.2/lib/active_record/connection_adapters/abstract/database_statements.rb:316:in `transaction' /usr/local/bundle/gems/activerecord-7.0.4.2/lib/active_record/transactions.rb:350:in `with_transaction_returning_status' /usr/local/bundle/gems/activerecord-7.0.4.2/lib/active_record/transactions.rb:302:in `save!' /usr/local/bundle/gems/activerecord-7.0.4.2/lib/active_record/suppressor.rb:54:in `save!' /app/app/models/submission_file.rb:105:in `attach_original_from_blob!' /app/app/models/submission_file.rb:85:in `attach_original_from_file!' /app/test/factories/submission_file_factory.rb:24:in `block (4 levels) in ' /usr/local/bundle/gems/factory_bot-6.2.1/lib/factory_bot/callback.rb:13:in `instance_exec' /usr/local/bundle/gems/factory_bot-6.2.1/lib/factory_bot/callback.rb:13:in `run' /usr/local/bundle/gems/factory_bot-6.2.1/lib/factory_bot/callbacks_observer.rb:11:in `block in update' /usr/local/bundle/gems/factory_bot-6.2.1/lib/factory_bot/callbacks_observer.rb:10:in `each' /usr/local/bundle/gems/factory_bot-6.2.1/lib/factory_bot/callbacks_observer.rb:10:in `update' /usr/local/lib/ruby/3.2.0/observer.rb:222:in `block in notify_observers' /usr/local/lib/ruby/3.2.0/observer.rb:221:in `each' /usr/local/lib/ruby/3.2.0/observer.rb:221:in `notify_observers' /usr/local/bundle/gems/factory_bot-6.2.1/lib/factory_bot/evaluation.rb:24:in `notify' /usr/local/bundle/gems/factory_bot-6.2.1/lib/factory_bot/strategy/create.rb:11:in `block in result' :90:in `tap' /usr/local/bundle/gems/factory_bot-6.2.1/lib/factory_bot/strategy/create.rb:9:in `result' /usr/local/bundle/gems/factory_bot-6.2.1/lib/factory_bot/factory.rb:43:in `run' /usr/local/bundle/gems/factory_bot-6.2.1/lib/factory_bot/factory_runner.rb:29:in `block in run' /usr/local/bundle/gems/activesupport-7.0.4.2/lib/active_support/notifications.rb:208:in `instrument' /usr/local/bundle/gems/factory_bot-6.2.1/lib/factory_bot/factory_runner.rb:28:in `run' /usr/local/bundle/gems/factory_bot-6.2.1/lib/factory_bot/strategy_syntax_method_registrar.rb:28:in `block in define_singular_strategy_method' /app/test/model/submission_file_test.rb:13:in `block (2 levels) in ' ```
bensheldon commented 1 year ago

@Earlopain thank you! I have a PR staging for that: https://github.com/bensheldon/good_job/pull/836

I'll get the fix out today 🙇🏻

bensheldon commented 1 year ago

Released in https://github.com/bensheldon/good_job/releases/tag/v3.12.1

Earlopain commented 1 year ago

Thanks!