activerecord-cockroachdb-adapter icon indicating copy to clipboard operation
activerecord-cockroachdb-adapter copied to clipboard

[ActiveRecord 5.2 Test Failure] test/cases/adapters/postgresql/transaction_test.rb

Open alimi opened this issue 5 years ago • 2 comments
trafficstars

Failure:
ActiveRecord::PostgresqlTransactionTest#test_raises_LockWaitTimeout_when_lock_wait_timeout_exceeded [/Users/alimi/repos/rails/activerecord/test/cases/adapters/postgresql/transaction_test.rb:98]:
[ActiveRecord::LockWaitTimeout] exception expected, not
Class: <ActiveRecord::StatementInvalid>
Message: <"PG::InvalidParameterValue: ERROR:  invalid value for parameter \"lock_timeout\": \"1\"\nDETAIL:  this parameter is currently recognized only for compatibility and has no effect in CockroachDB.\nHINT:  Available values: 0\n: SET lock_timeout = 1">
---Backtrace---
/Users/alimi/repos/rails/activerecord/lib/active_record/connection_adapters/postgresql/database_statements.rb:75:in `exec'
/Users/alimi/repos/rails/activerecord/lib/active_record/connection_adapters/postgresql/database_statements.rb:75:in `block (2 levels) in execute'
/Users/alimi/repos/rails/activesupport/lib/active_support/dependencies/interlock.rb:48:in `block in permit_concurrent_loads'
/Users/alimi/repos/rails/activesupport/lib/active_support/concurrency/share_lock.rb:187:in `yield_shares'
/Users/alimi/repos/rails/activesupport/lib/active_support/dependencies/interlock.rb:47:in `permit_concurrent_loads'
/Users/alimi/repos/rails/activerecord/lib/active_record/connection_adapters/postgresql/database_statements.rb:74:in `block in execute'
/Users/alimi/repos/rails/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb:581:in `block (2 levels) in log'
/Users/alimi/.rvm/rubies/ruby-2.5.3/lib/ruby/2.5.0/monitor.rb:226:in `mon_synchronize'
/Users/alimi/repos/rails/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb:580:in `block in log'
/Users/alimi/repos/rails/activesupport/lib/active_support/notifications/instrumenter.rb:23:in `instrument'
/Users/alimi/repos/rails/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb:571:in `log'
/Users/alimi/repos/rails/activerecord/lib/active_record/connection_adapters/postgresql/database_statements.rb:73:in `execute'
/Users/alimi/repos/rails/activerecord/test/cases/adapters/postgresql/transaction_test.rb:114:in `block (3 levels) in <class:PostgresqlTransactionTest>'
/Users/alimi/repos/rails/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb:267:in `block in transaction'
/Users/alimi/repos/rails/activerecord/lib/active_record/connection_adapters/abstract/transaction.rb:239:in `block in within_new_transaction'
/Users/alimi/.rvm/rubies/ruby-2.5.3/lib/ruby/2.5.0/monitor.rb:226:in `mon_synchronize'
/Users/alimi/repos/rails/activerecord/lib/active_record/connection_adapters/abstract/transaction.rb:236:in `within_new_transaction'
/Users/alimi/repos/activerecord-cockroachdb-adapter/lib/active_record/connection_adapters/cockroachdb/transaction_manager.rb:13:in `within_new_transaction'
/Users/alimi/repos/rails/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb:267:in `transaction'
/Users/alimi/repos/rails/activerecord/lib/active_record/transactions.rb:212:in `transaction'
/Users/alimi/repos/rails/activerecord/test/cases/adapters/postgresql/transaction_test.rb:112:in `block (2 levels) in <class:PostgresqlTransactionTest>'
---------------

bin/rails test Users/alimi/repos/rails/activerecord/test/cases/adapters/postgresql/transaction_test.rb:96

Failure:
ActiveRecord::PostgresqlTransactionTest#test_raises_QueryCanceled_when_canceling_statement_due_to_user_request [/Users/alimi/repos/rails/activerecord/test/cases/adapters/postgresql/transaction_test.rb:154]:
[ActiveRecord::QueryCanceled] exception expected, not
Class: <ActiveRecord::StatementInvalid>
Message: <"PG::UndefinedFunction: ERROR:  unknown function: pg_cancel_backend()\n: SELECT pg_cancel_backend()">
---Backtrace---
/Users/alimi/repos/rails/activerecord/lib/active_record/connection_adapters/postgresql/database_statements.rb:75:in `exec'
/Users/alimi/repos/rails/activerecord/lib/active_record/connection_adapters/postgresql/database_statements.rb:75:in `block (2 levels) in execute'
/Users/alimi/repos/rails/activesupport/lib/active_support/dependencies/interlock.rb:48:in `block in permit_concurrent_loads'
/Users/alimi/repos/rails/activesupport/lib/active_support/concurrency/share_lock.rb:187:in `yield_shares'
/Users/alimi/repos/rails/activesupport/lib/active_support/dependencies/interlock.rb:47:in `permit_concurrent_loads'
/Users/alimi/repos/rails/activerecord/lib/active_record/connection_adapters/postgresql/database_statements.rb:74:in `block in execute'
/Users/alimi/repos/rails/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb:581:in `block (2 levels) in log'
/Users/alimi/.rvm/rubies/ruby-2.5.3/lib/ruby/2.5.0/monitor.rb:226:in `mon_synchronize'
/Users/alimi/repos/rails/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb:580:in `block in log'
/Users/alimi/repos/rails/activesupport/lib/active_support/notifications/instrumenter.rb:23:in `instrument'
/Users/alimi/repos/rails/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb:571:in `log'
/Users/alimi/repos/rails/activerecord/lib/active_record/connection_adapters/postgresql/database_statements.rb:73:in `execute'
/Users/alimi/repos/rails/activerecord/test/cases/adapters/postgresql/transaction_test.rb:165:in `block (4 levels) in <class:PostgresqlTransactionTest>'
/Users/alimi/repos/rails/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb:267:in `block in transaction'
/Users/alimi/repos/rails/activerecord/lib/active_record/connection_adapters/abstract/transaction.rb:239:in `block in within_new_transaction'
/Users/alimi/.rvm/rubies/ruby-2.5.3/lib/ruby/2.5.0/monitor.rb:226:in `mon_synchronize'
/Users/alimi/repos/rails/activerecord/lib/active_record/connection_adapters/abstract/transaction.rb:236:in `within_new_transaction'
/Users/alimi/repos/activerecord-cockroachdb-adapter/lib/active_record/connection_adapters/cockroachdb/transaction_manager.rb:13:in `within_new_transaction'
/Users/alimi/repos/rails/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb:267:in `transaction'
/Users/alimi/repos/rails/activerecord/lib/active_record/transactions.rb:212:in `transaction'
/Users/alimi/repos/rails/activerecord/test/cases/adapters/postgresql/transaction_test.rb:159:in `block (3 levels) in <class:PostgresqlTransactionTest>'
---------------

bin/rails test Users/alimi/repos/rails/activerecord/test/cases/adapters/postgresql/transaction_test.rb:153

Failure:
ActiveRecord::PostgresqlTransactionTest#test_raises_Deadlocked_when_a_deadlock_is_encountered [/Users/alimi/repos/rails/activerecord/test/cases/adapters/postgresql/transaction_test.rb:69]:
[ActiveRecord::Deadlocked] exception expected, not
Class: <ActiveRecord::StatementInvalid>
Message: <"PG::InternalError: ERROR:  there is no transaction in progress\n: ROLLBACK">
---Backtrace---
/Users/alimi/repos/rails/activerecord/lib/active_record/connection_adapters/postgresql/database_statements.rb:75:in `exec'
/Users/alimi/repos/rails/activerecord/lib/active_record/connection_adapters/postgresql/database_statements.rb:75:in `block (2 levels) in execute'
/Users/alimi/repos/rails/activesupport/lib/active_support/dependencies/interlock.rb:48:in `block in permit_concurrent_loads'
/Users/alimi/repos/rails/activesupport/lib/active_support/concurrency/share_lock.rb:187:in `yield_shares'
/Users/alimi/repos/rails/activesupport/lib/active_support/dependencies/interlock.rb:47:in `permit_concurrent_loads'
/Users/alimi/repos/rails/activerecord/lib/active_record/connection_adapters/postgresql/database_statements.rb:74:in `block in execute'
/Users/alimi/repos/rails/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb:581:in `block (2 levels) in log'
/Users/alimi/.rvm/rubies/ruby-2.5.3/lib/ruby/2.5.0/monitor.rb:226:in `mon_synchronize'
/Users/alimi/repos/rails/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb:580:in `block in log'
/Users/alimi/repos/rails/activesupport/lib/active_support/notifications/instrumenter.rb:23:in `instrument'
/Users/alimi/repos/rails/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb:571:in `log'
/Users/alimi/repos/rails/activerecord/lib/active_record/connection_adapters/postgresql/database_statements.rb:73:in `execute'
/Users/alimi/repos/rails/activerecord/lib/active_record/connection_adapters/postgresql/database_statements.rb:148:in `exec_rollback_db_transaction'
/Users/alimi/repos/rails/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb:320:in `rollback_db_transaction'
/Users/alimi/repos/rails/activerecord/lib/active_record/connection_adapters/abstract/query_cache.rb:21:in `rollback_db_transaction'
/Users/alimi/repos/rails/activerecord/lib/active_record/connection_adapters/abstract/transaction.rb:180:in `rollback'
/Users/alimi/repos/rails/activerecord/lib/active_record/connection_adapters/abstract/transaction.rb:230:in `block in rollback_transaction'
/Users/alimi/.rvm/rubies/ruby-2.5.3/lib/ruby/2.5.0/monitor.rb:226:in `mon_synchronize'
/Users/alimi/repos/rails/activerecord/lib/active_record/connection_adapters/abstract/transaction.rb:228:in `rollback_transaction'
/Users/alimi/repos/rails/activerecord/lib/active_record/connection_adapters/abstract/transaction.rb:254:in `rescue in block in within_new_transaction'
/Users/alimi/repos/rails/activerecord/lib/active_record/connection_adapters/abstract/transaction.rb:251:in `block in within_new_transaction'
/Users/alimi/.rvm/rubies/ruby-2.5.3/lib/ruby/2.5.0/monitor.rb:226:in `mon_synchronize'
/Users/alimi/repos/rails/activerecord/lib/active_record/connection_adapters/abstract/transaction.rb:236:in `within_new_transaction'
/Users/alimi/repos/activerecord-cockroachdb-adapter/lib/active_record/connection_adapters/cockroachdb/transaction_manager.rb:13:in `within_new_transaction'
/Users/alimi/repos/rails/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb:267:in `transaction'
/Users/alimi/repos/rails/activerecord/lib/active_record/transactions.rb:212:in `transaction'
/Users/alimi/repos/rails/activerecord/test/cases/adapters/postgresql/transaction_test.rb:84:in `block (3 levels) in <class:PostgresqlTransactionTest>'
---------------

bin/rails test Users/alimi/repos/rails/activerecord/test/cases/adapters/postgresql/transaction_test.rb:67

Failure:
ActiveRecord::PostgresqlTransactionTest#test_raises_SerializationFailure_when_a_serialization_failure_occurs [/Users/alimi/repos/rails/activerecord/test/cases/adapters/postgresql/transaction_test.rb:39]:
[ActiveRecord::SerializationFailure] exception expected, not
Class: <ActiveRecord::StatementInvalid>
Message: <"PG::InternalError: ERROR:  there is no transaction in progress\n: ROLLBACK">
---Backtrace---
/Users/alimi/repos/rails/activerecord/lib/active_record/connection_adapters/postgresql/database_statements.rb:75:in `exec'
/Users/alimi/repos/rails/activerecord/lib/active_record/connection_adapters/postgresql/database_statements.rb:75:in `block (2 levels) in execute'
/Users/alimi/repos/rails/activesupport/lib/active_support/dependencies/interlock.rb:48:in `block in permit_concurrent_loads'
/Users/alimi/repos/rails/activesupport/lib/active_support/concurrency/share_lock.rb:187:in `yield_shares'
/Users/alimi/repos/rails/activesupport/lib/active_support/dependencies/interlock.rb:47:in `permit_concurrent_loads'
/Users/alimi/repos/rails/activerecord/lib/active_record/connection_adapters/postgresql/database_statements.rb:74:in `block in execute'
/Users/alimi/repos/rails/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb:581:in `block (2 levels) in log'
/Users/alimi/.rvm/rubies/ruby-2.5.3/lib/ruby/2.5.0/monitor.rb:226:in `mon_synchronize'
/Users/alimi/repos/rails/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb:580:in `block in log'
/Users/alimi/repos/rails/activesupport/lib/active_support/notifications/instrumenter.rb:23:in `instrument'
/Users/alimi/repos/rails/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb:571:in `log'
/Users/alimi/repos/rails/activerecord/lib/active_record/connection_adapters/postgresql/database_statements.rb:73:in `execute'
/Users/alimi/repos/rails/activerecord/lib/active_record/connection_adapters/postgresql/database_statements.rb:148:in `exec_rollback_db_transaction'
/Users/alimi/repos/rails/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb:320:in `rollback_db_transaction'
/Users/alimi/repos/rails/activerecord/lib/active_record/connection_adapters/abstract/query_cache.rb:21:in `rollback_db_transaction'
/Users/alimi/repos/rails/activerecord/lib/active_record/connection_adapters/abstract/transaction.rb:180:in `rollback'
/Users/alimi/repos/rails/activerecord/lib/active_record/connection_adapters/abstract/transaction.rb:230:in `block in rollback_transaction'
/Users/alimi/.rvm/rubies/ruby-2.5.3/lib/ruby/2.5.0/monitor.rb:226:in `mon_synchronize'
/Users/alimi/repos/rails/activerecord/lib/active_record/connection_adapters/abstract/transaction.rb:228:in `rollback_transaction'
/Users/alimi/repos/rails/activerecord/lib/active_record/connection_adapters/abstract/transaction.rb:254:in `rescue in block in within_new_transaction'
/Users/alimi/repos/rails/activerecord/lib/active_record/connection_adapters/abstract/transaction.rb:251:in `block in within_new_transaction'
/Users/alimi/.rvm/rubies/ruby-2.5.3/lib/ruby/2.5.0/monitor.rb:226:in `mon_synchronize'
/Users/alimi/repos/rails/activerecord/lib/active_record/connection_adapters/abstract/transaction.rb:236:in `within_new_transaction'
/Users/alimi/repos/activerecord-cockroachdb-adapter/lib/active_record/connection_adapters/cockroachdb/transaction_manager.rb:13:in `within_new_transaction'
/Users/alimi/repos/rails/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb:267:in `transaction'
/Users/alimi/repos/rails/activerecord/lib/active_record/transactions.rb:212:in `transaction'
/Users/alimi/repos/rails/activerecord/test/cases/adapters/postgresql/transaction_test.rb:55:in `block (3 levels) in <class:PostgresqlTransactionTest>'
/Users/alimi/repos/rails/activerecord/test/cases/adapters/postgresql/transaction_test.rb:185:in `with_warning_suppression'
/Users/alimi/repos/rails/activerecord/test/cases/adapters/postgresql/transaction_test.rb:54:in `block (2 levels) in <class:PostgresqlTransactionTest>'
---------------

bin/rails test Users/alimi/repos/rails/activerecord/test/cases/adapters/postgresql/transaction_test.rb:38

See the Contributing Guide for instructions on running tests.

If the test isn't valid against CockroachDB

  1. Add a ruby file to test/excludes that matches the name of the test class if one doesn't already exist. For example to exclude a test from ActiveRecord::AdapterTest, create test/excludes/ActiveRecord/AdapterTest.rb.
  2. Add an exclude statement to the file with the name of the test to exclude and a description. For example to exclude test_indexes from ActiveRecord::AdapterTest: https://github.com/cockroachdb/activerecord-cockroachdb-adapter/blob/c3cb637bd855b36bbf9e76b7947162054b95022e/test/excludes/ActiveRecord/AdapterTest.rb#L1
  3. Finally, if the test can run against CockroachDB with a few changes, add it to test/cases. Everything from the ActiveRecord test suite will be available, so a lot of the excluded test can be copied over. Namespace the test under the CockroachDB module to avoid name collisions. See test/cases/adapter_test.rb for an example.

See https://github.com/cockroachdb/activerecord-cockroachdb-adapter/issues/48.

alimi avatar Apr 17 '20 20:04 alimi

https://github.com/cockroachdb/activerecord-cockroachdb-adapter/pull/94 skips a couple of these tests.

alimi avatar Apr 17 '20 20:04 alimi

Any update on this failing test?

For me to convince our organisation to switch over to cockroachdb, it would be very helpful if most ActiveRecord tests where passing. Maybe this one isn't a big problem in practice, but the fact that a test named "transaction test" isn't passing is somewhat alarming.

sandstrom avatar Jun 16 '21 05:06 sandstrom