Christian Kruse: Punktevergabe und Mitgliederbereich

Beitrag lesen

Hallo Julius,

uff, das war ein klassischer brown paperbag bug.

Um die Badges zu vergeben spawne ich einen Hintergrund-Prozess, der die Informationen zusammenträgt und prüft, ob der User einen neuen Badge bekommen soll. Ist das der Fall, benachrichtige ich den User darüber. Und genau hier lag das problem: für die Benachrichtigung ich starte eine Transaktion, trage den neuen Badge ein, trage die Benachrichtigung ein und starte dann den Job für die Benachrichtigungen an die Websockets. ActiveJob (das Rails-Framework für die Hintergrund-Jobs) versucht nun (über eine gesonderte Datenbank-Verbindung) die Notification zu serialisieren und den Job zu starten. Das schlägt fehl, weil die Notification nur innerhalb der Transaktion sichtbar ist. Und deshalb wird eine Exception geschmissen; und weil das eine RecordNotFoundException ist gibt es kein error reporting, sondern die Exception wird stillschweigend geschluckt und ein ROLLBACK wird veranlasst.

Doh!

Edit: tl;dr: geht wieder.

LG,
CK