2011-12-08 5 views
5

한 명의 개인이 시스템을 테스트 할 때 이러한 오류가 발생하지 않습니다. 그러나 JMeter를 테스트로, 나는 꽤 신뢰성의 라인을 따라 몇 가지 오류를 재현 할 수 있습니다 :rails3/jruby에서이 오류가 간헐적으로 발생할 수있는 원인은 무엇입니까? SAVEPOINT active_record_1이 (가) 없습니다.

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 작업을 잘라내거나 수행하지 않습니다. 레코드를 작성하고 저장하는 것입니다.

우리는 레일즈 3.0.10, JRuby 1.6.5, 액티브 레코드 -jdbcmysql- 어댑터를 Warbler 1.3.2와 함께 사용하고 단일 Mysql 인스턴스 인 v5를 사용하여 64 비트 Tomcat 7/Amazon RDS의 Elastic Beanstalk을 통해 배포했습니다. 1.57. config.threadsafe가 설정되었습니다! - 그리고 이것은 ActiveRecord의 내부에서 어떤 종류의 경주와 같은 느낌입니다. 그러나 ActiveRecord는 threadsafe에서 작동해야합니다.

마지막주의 사항 : JRuby에서 MRI Ruby 1.9로 전환하면이 문제를 재현 할 수 없기 때문에 이것은 JRuby 또는 Warbler 문제입니다.

+0

이것은 바보 같지만 디스크 공간이 부족하면이 오류가 발생했습니다. test.log는'SAVEPOINT active_record_1','INSERT INTO ...'=>'SQLite3 :: FullException : 데이터베이스 또는 디스크가 꽉 찼습니다. ','ROLLBACK TO SAVEPOINT active_record_1' =>'SQLite3 :: SQLException : no such savepoint'를 보여줍니다. (이유는/tmp에 낡은 Selenium 데이터가 누적되었습니다.) –

답변

1

이것은 1.2.1에 도입 된 this commit과 관련 될 수 있습니다. 1.2.0에서도 동일한 문제가 발생합니까?

아마도 지원되는 트랜잭션과 실패한 트랜잭션에 대한 오류 검사를 다시해야합니다. https://github.com/jruby/activerecord-jdbc-adapter/issues에 버그를 신고 하시겠습니까? 감사.

+0

기록 : https://github.com/jruby/activerecord-jdbc-adapter/issues/145 - 감사합니다! –

+1

유감스럽게도 오랜 시간이 걸렸지 만 1.2.0 activerecord-jdbc-adapter를 사용하여 이것을 재현했습니다. 나는 버그를 업데이트 할 것이다. 궁극적으로이 결과를 얻은 것에 놀랄 필요는 없습니다. 예외 처리의 변경으로 인해 세이브 포인트가 생성 될 수있는 방법이 명확하지 않았습니다. –