Эти ошибки не возникают, когда один человек тестирует систему. Но с помощью теста jmeter я могу довольно надежно воспроизвести несколько ошибок по типу:
ActiveRecord::JDBCError: SAVEPOINT active_record_1 does not exist: ROLLBACK TO SAVEPOINT active_record_1
Stack:
gems/gems/activerecord-3.0.10/lib/active_record/connection_adapters/abstract_adapter.rb:207:in `log'
gems/gems/activerecord-3.0.10/lib/active_record/connection_adapters/abstract_adapter.rb:200:in `log'
gems/gems/activerecord-jdbc-adapter-1.2.1/lib/arjdbc/jdbc/adapter.rb:208:in `execute'
gems/gems/activerecord-jdbc-adapter-1.2.1/lib/arjdbc/mysql/adapter.rb:156:in `rollback_to_savepoint'
gems/gems/activerecord-3.0.10/lib/active_record/connection_adapters/abstract/database_statements.rb:179:in `transaction'
gems/gems/activerecord-3.0.10/lib/active_record/connection_adapters/abstract/database_statements.rb:171:in `transaction'
gems/gems/activerecord-3.0.10/lib/active_record/transactions.rb:207:in `transaction'
gems/gems/activerecord-3.0.10/lib/active_record/transactions.rb:290:in `with_transaction_returning_status'
gems/gems/activerecord-3.0.10/lib/active_record/transactions.rb:240:in `save'
gems/gems/activerecord-3.0.10/lib/active_record/transactions.rb:251:in `rollback_active_record_state!'
gems/gems/activerecord-3.0.10/lib/active_record/transactions.rb:239:in `save'
...(our code that simply calls save on a new instance of a model class)...
Мы не вкладываем транзакции и даже не используем их явно. Я нашел одну существующую ошибку вокруг этого сообщения об ошибке, но она не имеет отношения к делу; мы не усекаем и не делаем какую-либо работу DDL. Просто создать запись и сохранить ее.
Мы используем Rails 3.0.10, JRuby 1.6.5, activerecord-jdbcmysql-adapter, совместимые с Warbler 1.3.2 и развернутые через Elastic Beanstalk на 64-битном Tomcat 7 / Amazon RDS с одним экземпляром Mysql v5.1.57 , Мы настроены на config.threadsafe! - и это похоже на гонку в недрах ActiveRecord - но ActiveRecord должен работать в потоке безопасно, нет?
И последнее замечание: я боюсь, что это проблема JRuby или Warbler, потому что мы не сможем воспроизвести эту проблему, если переключимся с JRuby на MRI Ruby 1.9.