qertoip / transaction_retry

Retries database transaction on deadlock and transaction serialization errors. Supports MySQL, PostgreSQL and SQLite.
MIT License
116 stars 42 forks source link

Rails "6.1", Ruby "3.0.2", mysql2 "0.5.3".. looks like it is doing nothing #13

Open fguillen opened 2 years ago

fguillen commented 2 years ago

I still see Deadlocks and I don't see the gem is capturing any of the mysql2 requests:

  ActsAsTaggableOn::Tagging Create (15.0ms)  INSERT INTO `taggings` (`tag_id`, `taggable_type`, `taggable_id`, `context`, `created_at`) VALUES (8, 'LogBook::Event', '967', 'tags', '2021-12-02 09:18:23')
  ↳ app/controllers/api/tester/play_sessions_controller.rb:23:in `event'
  ↳ app/controllers/api/tester/play_sessions_controller.rb:23:in `event'
  ActsAsTaggableOn::Tag Update All (2.4ms)  UPDATE `tags` SET `tags`.`taggings_count` = COALESCE(`tags`.`taggings_count`, 0) + 1 WHERE `tags`.`id` = 8
  ↳ app/controllers/api/tester/play_sessions_controller.rb:23:in `event'
  ActsAsTaggableOn::Tag Update All (2.7ms)  UPDATE `tags` SET `tags`.`taggings_count` = COALESCE(`tags`.`taggings_count`, 0) + 1 WHERE `tags`.`id` = 8
  ActsAsTaggableOn::Tag Load (0.5ms)  SELECT `tags`.* FROM `tags` WHERE `tags`.`id` = 13 LIMIT 1
  ↳ app/controllers/api/tester/play_sessions_controller.rb:23:in `event'
  ↳ app/controllers/api/tester/play_sessions_controller.rb:23:in `event'
  TRANSACTION (1.1ms)  ROLLBACK
  ↳ app/controllers/api/tester/play_sessions_controller.rb:23:in `event'
Exception Occurred Transaction isolation conflict detected: Deadlock found when trying to get lock; try restarting transaction. Message: Transaction isolation conflict detected: Deadlock found when trying to get lock; try restarting transaction. Backtrace:  
 /Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:131:in `_query'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:131:in `block in query'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:130:in `handle_interrupt'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:130:in `query'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:206:in `block (2 levels) in execute'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activesupport-6.1.4.1/lib/active_support/dependencies/interlock.rb:48:in `block in permit_concurrent_loads'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activesupport-6.1.4.1/lib/active_support/concurrency/share_lock.rb:187:in `yield_shares'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activesupport-6.1.4.1/lib/active_support/dependencies/interlock.rb:47:in `permit_concurrent_loads'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:205:in `block in execute'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/abstract_adapter.rb:696:in `block (2 levels) in log'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activesupport-6.1.4.1/lib/active_support/concurrency/load_interlock_aware_monitor.rb:26:in `block (2 levels) in synchronize'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activesupport-6.1.4.1/lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `handle_interrupt'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activesupport-6.1.4.1/lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `block in synchronize'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activesupport-6.1.4.1/lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `handle_interrupt'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activesupport-6.1.4.1/lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `synchronize'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/abstract_adapter.rb:695:in `block in log'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activesupport-6.1.4.1/lib/active_support/notifications/instrumenter.rb:24:in `instrument'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/abstract_adapter.rb:687:in `log'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:204:in `execute'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/mysql/database_statements.rb:50:in `execute'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:215:in `execute_and_free'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/mysql/database_statements.rb:76:in `block in exec_delete'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activesupport-6.1.4.1/lib/active_support/concurrency/load_interlock_aware_monitor.rb:26:in `block (2 levels) in synchronize'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activesupport-6.1.4.1/lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `handle_interrupt'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activesupport-6.1.4.1/lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `block in synchronize'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activesupport-6.1.4.1/lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `handle_interrupt'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activesupport-6.1.4.1/lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `synchronize'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/mysql/database_statements.rb:75:in `exec_delete'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/abstract/database_statements.rb:179:in `update'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/abstract/query_cache.rb:22:in `update'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activerecord-6.1.4.1/lib/active_record/relation.rb:466:in `update_all'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activerecord-6.1.4.1/lib/active_record/relation.rb:506:in `update_counters'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activerecord-6.1.4.1/lib/active_record/counter_cache.rb:108:in `update_counters'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activerecord-6.1.4.1/lib/active_record/locking/optimistic.rb:175:in `update_counters'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activerecord-6.1.4.1/lib/active_record/persistence.rb:705:in `increment!'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activerecord-6.1.4.1/lib/active_record/locking/optimistic.rb:64:in `increment!'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activerecord-6.1.4.1/lib/active_record/callbacks.rb:452:in `increment!'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activerecord-6.1.4.1/lib/active_record/associations/belongs_to_association.rb:90:in `update_counters'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activerecord-6.1.4.1/lib/active_record/associations/belongs_to_association.rb:53:in `increment_counters'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activerecord-6.1.4.1/lib/active_record/counter_cache.rb:169:in `block in _create_record'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activerecord-6.1.4.1/lib/active_record/counter_cache.rb:192:in `block in each_counter_cached_associations'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activerecord-6.1.4.1/lib/active_record/counter_cache.rb:191:in `each'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activerecord-6.1.4.1/lib/active_record/counter_cache.rb:191:in `each_counter_cached_associations'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activerecord-6.1.4.1/lib/active_record/counter_cache.rb:168:in `_create_record'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activerecord-6.1.4.1/lib/active_record/locking/optimistic.rb:79:in `_create_record'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activerecord-6.1.4.1/lib/active_record/attribute_methods/dirty.rb:201:in `_create_record'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activerecord-6.1.4.1/lib/active_record/callbacks.rb:461:in `block in _create_record'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activesupport-6.1.4.1/lib/active_support/callbacks.rb:98:in `run_callbacks'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activesupport-6.1.4.1/lib/active_support/callbacks.rb:824:in `_run_create_callbacks'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activerecord-6.1.4.1/lib/active_record/callbacks.rb:461:in `_create_record'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activerecord-6.1.4.1/lib/active_record/timestamp.rb:108:in `_create_record'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activerecord-6.1.4.1/lib/active_record/persistence.rb:900:in `create_or_update'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activerecord-6.1.4.1/lib/active_record/callbacks.rb:457:in `block in create_or_update'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activesupport-6.1.4.1/lib/active_support/callbacks.rb:106:in `run_callbacks'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activesupport-6.1.4.1/lib/active_support/callbacks.rb:824:in `_run_save_callbacks'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activerecord-6.1.4.1/lib/active_record/callbacks.rb:457:in `create_or_update'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activerecord-6.1.4.1/lib/active_record/timestamp.rb:126:in `create_or_update'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activerecord-6.1.4.1/lib/active_record/persistence.rb:507:in `save!'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activerecord-6.1.4.1/lib/active_record/validations.rb:53:in `save!'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activerecord-6.1.4.1/lib/active_record/transactions.rb:302:in `block in save!'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activerecord-6.1.4.1/lib/active_record/transactions.rb:354:in `block in with_transaction_returning_status'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/abstract/database_statements.rb:318:in `transaction'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activerecord-6.1.4.1/lib/active_record/transactions.rb:350:in `with_transaction_returning_status'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activerecord-6.1.4.1/lib/active_record/transactions.rb:302:in `save!'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activerecord-6.1.4.1/lib/active_record/suppressor.rb:48:in `save!'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activerecord-6.1.4.1/lib/active_record/associations/collection_association.rb:373:in `insert_record'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activerecord-6.1.4.1/lib/active_record/associations/has_many_association.rb:58:in `insert_record'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activerecord-6.1.4.1/lib/active_record/associations/collection_association.rb:360:in `block (2 levels) in _create_record'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activerecord-6.1.4.1/lib/active_record/associations/collection_association.rb:460:in `replace_on_target'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activerecord-6.1.4.1/lib/active_record/associations/collection_association.rb:285:in `add_to_target'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activerecord-6.1.4.1/lib/active_record/associations/collection_association.rb:359:in `block in _create_record'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activerecord-6.1.4.1/lib/active_record/associations/collection_association.rb:135:in `block in transaction'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activerecord-6.1.4.1/lib/active_record/connection_adapters/abstract/database_statements.rb:318:in `transaction'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activerecord-6.1.4.1/lib/active_record/transactions.rb:209:in `transaction'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/transaction_retry-1.0.3/lib/transaction_retry/active_record/base.rb:32:in `transaction_with_retry'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activerecord-6.1.4.1/lib/active_record/associations/collection_association.rb:134:in `transaction'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activerecord-6.1.4.1/lib/active_record/associations/collection_association.rb:357:in `_create_record'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activerecord-6.1.4.1/lib/active_record/associations/has_many_association.rb:137:in `_create_record'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activerecord-6.1.4.1/lib/active_record/associations/association.rb:209:in `create!'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activerecord-6.1.4.1/lib/active_record/associations/collection_proxy.rb:364:in `create!'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/acts-as-taggable-on-8.1.0/lib/acts_as_taggable_on/taggable/core.rb:284:in `block (2 levels) in save_tags'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/acts-as-taggable-on-8.1.0/lib/acts_as_taggable_on/taggable/core.rb:280:in `each'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/acts-as-taggable-on-8.1.0/lib/acts_as_taggable_on/taggable/core.rb:280:in `block in save_tags'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/acts-as-taggable-on-8.1.0/lib/acts_as_taggable_on/taggable/core.rb:239:in `each'
/Users/fernando.guillen/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/acts-as-taggable-on-8.1.0/lib/acts_as_taggable_on/taggable/core.rb:239:in `save_tags'