makandra / active_type

Make any Ruby object quack like ActiveRecord
MIT License
1.09k stars 74 forks source link

Rails 7.1: "Called finish on a transaction that hasn't started" #180

Closed mattbrictson closed 11 months ago

mattbrictson commented 11 months ago

Apologies, I don't have reproduction steps for this error, but I thought I should report it in case other people using active_type are also running into this problem.

After upgrading to Rails 7.1, I am sporadically seeing this error in production:

ActiveRecord::ConnectionAdapters::TransactionInstrumenter::InstrumentationNotStartedError: Called finish on a transaction that hasn't started

The error is triggered by calling save! on a subclass of ActiveType::Object. Stack trace:

gems/activerecord-7.1.1/lib/active_record/connection_adapters/abstract/transaction.rb, line 98, in finish
gems/activerecord-7.1.1/lib/active_record/connection_adapters/abstract/transaction.rb, line 402, in commit
gems/activerecord-7.1.1/lib/active_record/connection_adapters/abstract/transaction.rb, line 514, in block in commit_transaction
gems/activesupport-7.1.1/lib/active_support/concurrency/null_lock.rb, line 9, in synchronize
gems/activerecord-7.1.1/lib/active_record/connection_adapters/abstract/transaction.rb, line 503, in commit_transaction
gems/activerecord-7.1.1/lib/active_record/connection_adapters/abstract/transaction.rb, line 565, in block in within_new_transaction
gems/activesupport-7.1.1/lib/active_support/concurrency/null_lock.rb, line 9, in synchronize
gems/activerecord-7.1.1/lib/active_record/connection_adapters/abstract/transaction.rb, line 532, in within_new_transaction
gems/activerecord-7.1.1/lib/active_record/connection_adapters/abstract/database_statements.rb, line 342, in transaction
gems/activerecord-7.1.1/lib/active_record/transactions.rb, line 361, in with_transaction_returning_status
gems/activerecord-7.1.1/lib/active_record/transactions.rb, line 313, in save!
gems/activerecord-7.1.1/lib/active_record/suppressor.rb, line 56, in save!

This error occurs within a sidekiq job, and only rarely, so it could be a threading/race condition issue.

Any thoughts on what might trigger the "Called finish on a transaction that hasn't started" error? If I discover more details I will add to this thread.

mattbrictson commented 11 months ago

It looks like I won't have an opportunity to troubleshoot this further, so I'll close the issue for now.