Skip to content

Ensure when accessing Rails, we really get ::Rails (and not Sidekiq::Rails)

What does this MR do?

This MR addresses an exception that occurs when seeding the DB of a new dev setup. This MR only addresses the NoMethodError: undefined method 'env' for Sidekiq::Rails:Class exception raised within ./config/initializers/forbid_sidekiq_in_transactions.rb.

The Use an after_commit hook, or include AfterCommitQueue and use a run_after_commit block instead error will be handled in https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/18732.

Are there points in the code the reviewer needs to double check?

N/A

Why was this MR needed?

Without the patch, the follow exception occurs:

== Seed from /Users/ash/src/gdk/gdk-ee/gitlab/db/fixtures/development/20_burndown.rb
.
.
rake aborted!
NoMethodError: undefined method `env' for Sidekiq::Rails:Class
/Users/ash/src/gdk/gdk-ee/gitlab/config/initializers/forbid_sidekiq_in_transactions.rb:30:in `rescue in block (2 levels) in <module:NoEnqueueingFromTransactions>'
/Users/ash/src/gdk/gdk-ee/gitlab/config/initializers/forbid_sidekiq_in_transactions.rb:21:in `block (2 levels) in <module:NoEnqueueingFromTransactions>'
/Users/ash/src/gdk/gdk-ee/gitlab/app/workers/mail_scheduler/notification_service_worker.rb:16:in `perform_async'
/Users/ash/src/gdk/gdk-ee/gitlab/app/services/notification_service.rb:30:in `method_missing'
/Users/ash/src/gdk/gdk-ee/gitlab/app/services/issues/close_service.rb:29:in `close_issue'
/Users/ash/src/gdk/gdk-ee/gitlab/app/services/issues/close_service.rb:7:in `execute'
(eval):69:in `block (2 levels) in close_issues'
(eval):68:in `each'
(eval):68:in `block in close_issues'
(eval):61:in `upto'
(eval):61:in `close_issues'
(eval):19:in `block in seed!'
(eval):12:in `seed!'
(eval):91:in `block (4 levels) in run_file'
(eval):89:in `block (3 levels) in run_file'
/Users/ash/src/gdk/gdk-ee/gitlab/lib/gitlab/seeder.rb:21:in `quiet'
(eval):83:in `block (2 levels) in run_file'
/Users/ash/src/gdk/gdk-ee/gitlab/lib/tasks/gitlab/setup.rake:31:in `setup_db'
/Users/ash/src/gdk/gdk-ee/gitlab/lib/tasks/gitlab/setup.rake:5:in `block (2 levels) in <top (required)>'
/Users/ash/src/gdk/gdk-ee/gitlab/lib/tasks/dev.rake:7:in `block (2 levels) in <top (required)>'
/Users/ash/.rbenv/versions/2.3.7/bin/bundle:22:in `load'
/Users/ash/.rbenv/versions/2.3.7/bin/bundle:22:in `<main>'

Caused by:
Sidekiq::Worker::EnqueueFromTransactionError: `MailScheduler::NotificationServiceWorker.perform_async` cannot be called inside a transaction as this can lead to
race conditions when the worker runs before the transaction is committed and
tries to access a model that has not been saved yet.

Use an `after_commit` hook, or include `AfterCommitQueue` and use a `run_after_commit` block instead.
/Users/ash/src/gdk/gdk-ee/gitlab/config/initializers/forbid_sidekiq_in_transactions.rb:22:in `block (2 levels) in <module:NoEnqueueingFromTransactions>'
/Users/ash/src/gdk/gdk-ee/gitlab/app/workers/mail_scheduler/notification_service_worker.rb:16:in `perform_async'
/Users/ash/src/gdk/gdk-ee/gitlab/app/services/notification_service.rb:30:in `method_missing'
/Users/ash/src/gdk/gdk-ee/gitlab/app/services/issues/close_service.rb:29:in `close_issue'
/Users/ash/src/gdk/gdk-ee/gitlab/app/services/issues/close_service.rb:7:in `execute'
(eval):69:in `block (2 levels) in close_issues'
(eval):68:in `each'
(eval):68:in `block in close_issues'
(eval):61:in `upto'
(eval):61:in `close_issues'
(eval):19:in `block in seed!'
(eval):12:in `seed!'
(eval):91:in `block (4 levels) in run_file'
(eval):89:in `block (3 levels) in run_file'
/Users/ash/src/gdk/gdk-ee/gitlab/lib/gitlab/seeder.rb:21:in `quiet'
(eval):83:in `block (2 levels) in run_file'
/Users/ash/src/gdk/gdk-ee/gitlab/lib/tasks/gitlab/setup.rake:31:in `setup_db'
/Users/ash/src/gdk/gdk-ee/gitlab/lib/tasks/gitlab/setup.rake:5:in `block (2 levels) in <top (required)>'
/Users/ash/src/gdk/gdk-ee/gitlab/lib/tasks/dev.rake:7:in `block (2 levels) in <top (required)>'
/Users/ash/.rbenv/versions/2.3.7/bin/bundle:22:in `load'
/Users/ash/.rbenv/versions/2.3.7/bin/bundle:22:in `<main>'
Tasks: TOP => db:seed_fu
(See full trace by running task with --trace)
./support/bootstrap-rails failed

Screenshots (if relevant)

N/A

Does this MR meet the acceptance criteria?

What are the relevant issue numbers?

https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/18732

Edited by Ash McKenzie

Merge request reports