DatabaseCleaner improperly starts and ends transactions for ActiveRecord
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 3/5
- Geschätzter Aufwand
- 1-2 Tage
- Anfängerfreundlichkeit
- 38/100
Rechercherichtung
Beginne in activerecord/lib/active_record/fixtures.rb bei den referenzierten Abschnitten zum Starten und Beenden der Transaktion und vergleiche diesen Ablauf anschließend damit, wie ActiveRecord verfügbare Verbindungen sammelt. Bestätige, dass die Änderung jede Verbindung im Pool abdeckt: Nachfolgende ActiveRecord-Aufrufe sollten weiterhin transaktional bleiben, und die Bereinigung sollte keine Verbindung mit einer aktiven Transaktion zurücklassen.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
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
- Vorherrschende Sprache
- Ruby
- Sterne
- 76
- Forks
- 76
- PR-Merge-Kennzahlen
- Keine gemergten PRs in 30 T.
Entwicklungsumgebung
Die Einrichtungsdateien dieses Projekts haben wir noch nicht geprüft. Beginnen Sie mit der README; die allgemeinen Schritte stehen in unserem Leitfaden für den ersten Beitrag.
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus DatabaseCleaner/database_cleaner-active_record
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 62/100
-
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 30/100
DatabaseCleaner/database_cleaner-active_record#128 · 1 Kommentar ·
-
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 35/100
DatabaseCleaner/database_cleaner-active_record#127 · 3 Kommentare ·
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 45/100
-
Parallelized truncatesOffen
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 25/100
Alle Issues in DatabaseCleaner/database_cleaner-active_record
Ähnliche Issues
-
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 88/100
rubocop/ruby-style-guide#984 ·
-
internal product:dev-portal release-docs
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
Kong/developer.konghq.com#7393 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
fastlane/fastlane#30286 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 70/100
TheOdinProject/curriculum#31432 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
area/web interface
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 65/100
Maintainer antworten meist innerhalb von 1 Tag