2011-12-08 7 views
5

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.

+0

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) –

Respuesta

1

Podría estar relacionado con this commit, que se introdujo en 1.2.1. ¿1.2.0 le da el mismo problema?

Tal vez tenga que reintroducir algún error comprobando transacciones admitidas vs. transacción fallida. ¿Desea presentar un error al https://github.com/jruby/activerecord-jdbc-adapter/issues? Gracias.

+0

Para el registro: https://github.com/jruby/activerecord-jdbc-adapter/issues/145 - ¡y gracias! –

+1

Lamentablemente, aunque tardó un tiempo inexplicablemente largo, he reproducido esto incluso con el 1.2.0 activerecord-jdbc-adapter. Actualizaré el error. No me sorprende haber obtenido finalmente este resultado: no tenía claro cómo el cambio en el manejo de excepciones podría haber resultado en la creación de puntos de rescate. –

Cuestiones relacionadas