Chat-Pitchfork-Timeouts: Antworten erstellen stillschweigend Threads und die automatische Nachverfolgung bläht sich im Laufe der Zeit auf

Unsere Seite speichert den vollständigen Chatverlauf, der sich nun schon seit langer Zeit ansammelt. Kürzlich hatte ich ein Problem, bei dem sich Benutzer darüber beschwerten, wie lange der Chat-Button zum Laden braucht oder ob er überhaupt angezeigt wird! Zudem schien es zwischen den Benutzern inkonsistent zu sein.

Ich denke, ich habe mit Hilfe von Claude Code die Ursache gefunden, die möglicherweise alle Seiten betrifft. Nachfolgend finden Sie einen Bericht, der das Problem zusammenfasst.

Die Kurzfassung lautet: Es scheint, dass Antworten im Chat Tracking-Ereignisse erzeugen, die sich im Laufe der Zeit aufblähen (selbst wenn die Thread-Funktion deaktiviert ist).

Nachfolgend der von der KI generierte Bericht mit leichten Änderungen von mir.


Das Problem

Aktive Benutzer meldeten, dass der Chat sich endlos drehte und nie geladen wurde. In den Admin-Logs sahen wir Pitchfork-Worker-Timeouts, die mit Backtraces wie folgt ausgegeben wurden:

Pitchfork worker is about to timeout, dumping backtrace for main thread
...
lib/mini_sql/postgres/connection.rb:... MiniSql::Postgres::Connection#query
plugins/chat/app/queries/chat/thread_unreads_query.rb:132  Chat::ThreadUnreadsQuery.call
plugins/chat/app/queries/chat/tracking_state_report_query.rb:71 Chat::TrackingStateReportQuery.call
plugins/chat/app/services/chat/list_user_channels...

Der Web-Worker wurde beendet, weil eine einzelne SQL-Abfrage (ThreadUnreadsQuery) nicht innerhalb des Worker-Timeouts zurückkam. Derselbe Backtrace wiederholte sich hunderte Male an einem Tag.

Auf der Client-Seite zeigt sich der Fehler als 500 auf /chat/api/me/channels:

/chat/api/me/channels  Failed to load resource: the server responded with a status of 500

Das ist die browserseitige Darstellung desselben Pitchfork-Timeouts – der Endpunkt, der ThreadUnreadsQuery auslöst, wird nie abgeschlossen, der Worker wird zurückgesetzt, und die Benutzeroberfläche erhält nie die Kanal-Liste, die sie zum Rendern des Chats benötigt.


Die identifizierte Ursache, in einfacher Sprache

Jedes Mal, wenn ein Benutzer auf eine bestimmte Chat-Nachricht mit „Antworten

2 „Gefällt mir“

Was für ein großartiger Artikel!

Ich habe mich damit beschäftigt. Bei meinen Tests habe ich eine 50-fache Leistungssteigerung erreicht mit:

Wir brauchen wahrscheinlich noch viel mehr Tests, aber der Vorteil ist, dass ein kleiner Fehler hier nur bedeutet, dass die Zahlen etwas abweichen. Wir müssen die Last reduzieren, wir haben keine andere Wahl.

2 „Gefällt mir“