2011-12-08 10 views
5

Questi errori non si verificano quando un singolo individuo testa il sistema. Ma con un test JMeter, posso abbastanza affidabile riproduco alcuni errori lungo le linee di:In rails3/jruby, cosa potrebbe causare questo errore in modo intermittente? SAVEPOINT active_record_1 non esiste

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

Noi non siamo le operazioni di nidificazione o anche utilizzando in modo esplicito. Trovo un bug esistente attorno a questo messaggio di errore, ma non è rilevante; non stiamo troncando o facendo alcun lavoro DDL. Creare semplicemente un record e salvarlo.

Usiamo Rails 3.0.10, JRuby 1.6.5, activerecord-jdbcmysql adattatore, gorgheggiava con silvia 1.3.2 e distribuito tramite elastico Beanstalk a 64 bit Tomcat 7/Amazon RDS con una singola istanza Mysql, v5. 1.57. Siamo pronti per config.threadsafe! - e questo sembra una razza di qualche tipo nelle viscere di ActiveRecord - ma ActiveRecord dovrebbe funzionare in modo sicuro, no?

Un'ultima nota: temo che si tratti di un problema JRuby o Warbler, perché non possiamo riprodurre questo problema se passiamo da JRuby a MRI Ruby 1.9.

+0

Questo suona stupido, ma ho avuto questo errore mi è capitato quando ho esaurito lo spazio su disco. test.log ha mostrato 'SAVEPOINT active_record_1',' INSERT INTO ... '=>' SQLite3 :: FullException: il database o il disco è pieno', 'ROLLBACK TO SAVEPOINT active_record_1' =>' SQLite3 :: SQLException: no tale savepoint'. (Il motivo era il raffinamento dei dati di selenio in/tmp.) –

risposta

1

Potrebbe essere correlato a this commit, che è stato introdotto in 1.2.1. 1.2.0 ti dà lo stesso problema?

Forse ho bisogno di reintrodurre alcuni errori di controllo per le transazioni supportate contro la transazione fallita. Cura di presentare un bug a https://github.com/jruby/activerecord-jdbc-adapter/issues? Grazie.

+0

Per la cronaca: https://github.com/jruby/activerecord-jdbc-adapter/issues/145 - e grazie! –

+1

Sfortunatamente, sebbene ci sia voluto un tempo inspiegabilmente lungo, l'ho riprodotto anche con l'adattatore jdbc-activerecord 1.2.0. Aggiornerò il bug Non mi sorprende che alla fine abbia ottenuto questo risultato - non sono chiaro su come il cambiamento nella gestione delle eccezioni possa aver portato alla creazione di punti di salvataggio. –

Problemi correlati