-
Notifications
You must be signed in to change notification settings - Fork 168
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Concurrency problems in specs #239
Comments
@dbil25 just run into the same issue and your solution helped me fix the issue! Thank you very much :) |
I have a similar issue when upgrading Rails from 7.0 to 7.1. When running the full spec suite, rspec eventually stops without exiting (in a model spec). It runs fine with Rails 7.0. The main thread backtrace reports:
# spec/support/apartment.rb
RSpec.configure do |config|
config.before(:each) do |example|
Apartment::Tenant.switch! @tenant_name
end
end # active_support/concurrency/load_interlock_aware_monitor.rb
def mon_enter
@mutex.lock if @owner != Thread.current
# …
end The System configuration
|
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. |
@otagi I run into the same problem and managed to update the patch suggested by @dbil25 : # patch for Rails 7.1
module ApartmentExtension
def exec_query(sql, name = "SQL", binds = [], prepare: false, async: false)
raise unless Rails.env.test? # this patch is for tests only, do not use in dev/prod!
@lock.synchronize do
current_schema_name = get_current_schema
if current_schema_name && current_schema_name != Apartment::Tenant.current
Apartment::Tenant.switch!(Apartment::Tenant.current)
end
super(sql, name, binds, prepare: prepare, async: async)
end
end
def get_current_schema
current_schema
rescue
nil
end
end
class ActiveRecord::ConnectionAdapters::PostgreSQLAdapter
prepend ApartmentExtension
end @mnovelo thanks for the work you are doing on this gem ! Would be great if these patches were included by default in the gem |
I'm finally done with school so I'll have more time to look into this, especially 'cause I've got some major refactoring that I want to continue. In particular, I'm planning to use CurrentAttributes to make Apartment Thread and Fiber safe https://api.rubyonrails.org/classes/ActiveSupport/CurrentAttributes.html |
This has been an ongoing issue for us as well but wasn't addressed in v3.2.0, but I hope to add such support in v4.0.0. Your help would be greatly appreciated! #312 |
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. |
Steps to reproduce
In rspec, especially in feature specs, multiple threads can run concurrently ( for example the test itself and the test server) but they both use the same ActiveRecord database connection. Thats makes it that when a spec changes the schema by doig a
SET search_path TO
, then it can also affects the other threads causing unexpected behaviors. At least thats what i understood after debugging some very flaky behavior in the feature specs.This does not happen in a normal context (development and production), it only happens during specs, especially feature specs.
Is there an existing solution for this kind of bugs? meanwhile, if other people encounter the same problem i have a working fix by adding a monkey-patch in a
spec/support
file:System configuration
Database: postgres 14
Apartment version: 2.11
Apartment config (in
config/initializers/apartment.rb
or so):use_schemas
:true
Rails (or ActiveRecord) version: 7.0.8
Ruby version: 3.2.1
The text was updated successfully, but these errors were encountered: