activerecord-cockroachdb-adapter
activerecord-cockroachdb-adapter copied to clipboard
[ActiveRecord 5.2 Test Failure] test/cases/adapters/postgresql/transaction_test.rb
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
- Add a ruby file to
test/excludesthat matches the name of the test class if one doesn't already exist. For example to exclude a test fromActiveRecord::AdapterTest, createtest/excludes/ActiveRecord/AdapterTest.rb. - Add an exclude statement to the file with the name of the test to exclude and a description. For example to exclude
test_indexesfromActiveRecord::AdapterTest: https://github.com/cockroachdb/activerecord-cockroachdb-adapter/blob/c3cb637bd855b36bbf9e76b7947162054b95022e/test/excludes/ActiveRecord/AdapterTest.rb#L1 - 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 theCockroachDBmodule to avoid name collisions. Seetest/cases/adapter_test.rbfor an example.
See https://github.com/cockroachdb/activerecord-cockroachdb-adapter/issues/48.
https://github.com/cockroachdb/activerecord-cockroachdb-adapter/pull/94 skips a couple of these tests.
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.