DatabaseCleaner improperly starts and ends transactions for ActiveRecord
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Idoneità per principianti
- 38/100
Direzione di ricerca
Inizia da activerecord/lib/active_record/fixtures.rb, nelle sezioni referenziate di avvio e conclusione della transazione, quindi confronta quel flusso con il modo in cui ActiveRecord raccoglie le connessioni disponibili. Verifica che la modifica copra ogni connessione nel pool: le chiamate successive ad ActiveRecord dovrebbero rimanere transazionali e la pulizia non dovrebbe lasciare alcuna connessione con una transazione attiva.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
If there is more than one connection in the connection pool DatabaseCleaner will only begin the transaction on one of the connections.
https://github.com/rails/rails/blob/master/activerecord/lib/active_record/fixtures.rb#L979
Any ActiveRecord call afterwards will use the next connection in the pool which does not have a transaction.
When DatabaseCleaner closes the transaction, it will only do so on the next active connection. Thus leaving a connection with an active transaction in the connection pool which can deadlock when doing a deletion cleanup or any table modifications.
DatabaseCleaner should start and end transactions the same way ActiveRecord does by collecting all available connections and starting transactions on all of them.
start: https://github.com/rails/rails/blob/06a9e18e646845ded0f0a46a14c1eb6b3a14e55a/activerecord/lib/active_record/fixtures.rb#L949
end: https://github.com/rails/rails/blob/06a9e18e646845ded0f0a46a14c1eb6b3a14e55a/activerecord/lib/active_record/fixtures.rb#L967
- Lingua principale
- Ruby
- Stelle
- 76
- Fork
- 76
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Preparare l'ambiente
Non abbiamo ancora controllato i file di configurazione di questo progetto. Parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di DatabaseCleaner/database_cleaner-active_record
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 30/100
DatabaseCleaner/database_cleaner-active_record#128 · 1 commento ·
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 35/100
DatabaseCleaner/database_cleaner-active_record#127 · 3 commenti ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 45/100
-
Parallelized truncatesAperta
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
Tutte le issue di DatabaseCleaner/database_cleaner-active_record
Issue simili
-
area/web interface
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 90/100
chef/mixlib-shellout#287 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 86/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
I maintainer di solito rispondono entro 1 giorno