Estos errores no ocurren cuando una sola persona prueba el sistema. Pero con una prueba jmeter, que prácticamente se pueden reproducir de forma fiable algunos errores a lo largo de las líneas de:En rails3/jruby, ¿qué podría causar este error de forma intermitente? SAVEPOINT active_record_1 no existe
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)...
No somos transacciones de anidación o incluso usarlos de forma explícita. Encuentro un error existente alrededor de este mensaje de error, pero no es relevante; no estamos truncando o haciendo ningún trabajo DDL. Simplemente creando un registro y guardándolo.
Utilizamos Rails 3.0.10, JRuby 1.6.5, activerecord-jdbcmysql-adapter, warbled con Warbler 1.3.2 y se implementó a través de Elastic Beanstalk en Tomcat 7/Amazon RDS de 64 bits con una sola instancia de Mysql, v5. 1.57. Estamos listos para config.threadsafe! - y esto se siente como una carrera de algún tipo en las entrañas de ActiveRecord - pero se supone que ActiveRecord funciona en threadsafe, ¿no?
Una última nota: me temo que este es un problema de JRuby o Warbler, porque no podemos reproducir este problema si cambiamos de JRuby a MRI Ruby 1.9.
Esto suena estúpido, pero tuve este error cuando me quedé sin espacio en el disco. test.log mostró 'SAVEPOINT active_record_1',' INSERT INTO ... '=>' SQLite3 :: FullException: la base de datos o el disco está lleno', 'ROLLBACK TO SAVEPOINT active_record_1' =>' SQLite3 :: SQLException: no such savepoint'. (El motivo era la acumulación de datos de Selenium en/tmp) –