DatabaseCleaner improperly starts and ends transactions for ActiveRecord
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Aptitud para principiantes
- 38/100
Línea de trabajo
Comienza en activerecord/lib/active_record/fixtures.rb, en las secciones referenciadas de inicio y finalización de la transacción, y compara luego ese flujo con la forma en que ActiveRecord recopila las conexiones disponibles. Confirma que el cambio cubre todas las conexiones del pool: las llamadas posteriores a ActiveRecord deberían seguir siendo transaccionales, y la limpieza no debería dejar ninguna conexión con una transacción activa.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
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
- Lenguaje dominante
- Ruby
- Estrellas
- 76
- Forks
- 76
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Preparar el entorno
Aún no hemos revisado los archivos de configuración de este proyecto. Empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de DatabaseCleaner/database_cleaner-active_record
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 30/100
DatabaseCleaner/database_cleaner-active_record#128 · 1 comentario ·
-
Dificultad 3/5 1-2 días Aptitud para principiantes 35/100
DatabaseCleaner/database_cleaner-active_record#127 · 3 comentarios ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 45/100
-
Parallelized truncatesAbierto
Dificultad 5/5 Más de una semana Aptitud para principiantes 25/100
Todos los issues de DatabaseCleaner/database_cleaner-active_record
Issues similares
-
Obsolete link to RubyMine docsAbierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 88/100
rubocop/ruby-style-guide#984 ·
-
Dev Portal: Wizard refereshAbiertointernal product:dev-portal release-docs
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
Kong/developer.konghq.com#7393 ·
Los mantenedores suelen responder en 1 día
-
Unused stubs and fixturesAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
fastlane/fastlane#30286 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
TheOdinProject/curriculum#31432 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
area/web interface
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
Los mantenedores suelen responder en 1 día