Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

DatabaseCleaner triggering `before` hook while threads are still running

Aperta
#683 2 commenti 1 reazione 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
25/100
Tipo di issue
Bug
Chiarezza
Da chiarire
Stato di attività
Ferma
Stack tecnologico
rails, ruby
Ambito
databases, testing

Direzione di ricerca

L’issue non fornisce alcun file del repository né alcun test fallito; inizia dagli hook di RSpec.configure nella configurazione pubblicata e dal ciclo di vita before/after di DatabaseCleaner. Riproduci la specifica del controller usando il Future di concurrent-ruby con la strategia delle transazioni, quindi confronta il momento della pulizia con il completamento del Future. Il lavoro è completato quando la race condition è stata riprodotta e la sua causa e la relativa risoluzione o limitazione sono documentate.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

This one is hard to reproduce, might not have anything to do with DC but I tracked the issue down to the DC configuration/behavior.

I have a code that runs a couple of operations on threads, using concurrent-ruby's Future. It goes along these lines:

Rails.application.executor.wrap do
  future = Concurrent::Future.execute do
    Rails.application.executor.wrap(executor: executor) do
      operation_that_finds_a_user_on_db
    end
  end

 values = ActiveSupport::Dependencies.interlock.permit_concurrent_loads do
    future.value!
  end
end

when I'm running controller specs that invoke this part of code, they fail and the exception is that there are no users on the database anymore. I tracked the issue down to DC doing a clean-up.

It looks like DC is running even though Futures are not finished yet. I can't say that this is an issue with DC but I figure that this could be a starting point

Here is my whole config file

RSpec.configure do |config|
  DatabaseCleaner.allow_remote_database_url = true if Rails.env.test?

  config.before(:suite) do
    DatabaseCleaner.clean_with(:deletion)
  end

  config.before do
    DatabaseCleaner.strategy = :transaction
  end

  config.before(:each, js: true) do
    DatabaseCleaner.strategy = :deletion
  end

  config.before do
    DatabaseCleaner.start
  end

  config.after do
    DatabaseCleaner.clean
  end
end

Does this make any sense?

Edit: I noticed that changing the strategy from transaction to deletion or truncation worked but the tests got SO much slower that it's not even an option

Lingua principale
Ruby
Stelle
3k
Fork
485
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

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di DatabaseCleaner/database_cleaner

Tutte le issue di DatabaseCleaner/database_cleaner

Issue simili

Altre issue su Ruby

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.