Sobes.tech
Senior

De worker werkt lang (2 minuten), de transactie blijft in de database bij een crash — wat te doen?

sobes.tech AI

Antwoord van AI

Als een worker lang werkt (ongeveer 2 minuten) en bij een crash blijft de transactie in de database, betekent dit dat de transactie niet correct is afgesloten (commit/rollback), en de database vergrendelingen vasthoudt.

Wat te doen:

  1. Gebruik een context met timeout in Go om de uitvoeringstijd van de transactie te beperken. Bijvoorbeeld:
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
defer cancel()

err := db.WithContext(ctx).Transaction(func(tx *gorm.DB) error {
    // operaties
    return nil
})
  1. Fouten afhandelen en garanderen dat de transactie wordt teruggedraaid bij fouten.

  2. Controleer de logs van de database op vastgelopen transacties en beëindig ze handmatig indien nodig.

  3. Overweeg het gebruik van heartbeat- of health check-mechanismen voor de worker, zodat taken automatisch opnieuw worden gestart bij een crash.

  4. Optimaliseer de werking van de worker zodat transacties niet lang blijven hangen — misschien door de taak op te splitsen in kleinere delen.

Het is belangrijk om de levensduur van transacties te controleren en ze correct af te sluiten om blokkades en vastgelopen toestanden te voorkomen.