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