Benachrichtigungen werden für alte Beiträge falsch erstellt

Gestern begann meine Seite plötzlich, Benachrichtigungen für alte Beiträge zu generieren. Dies ist die Anzahl der ‘posted’-Benachrichtigungen (notification_type = 9), die in den letzten Tagen mehr als eine Stunde nach der Erstellung des Beitrags erstellt wurden:

Abfrage, die ich zur Generierung der Tabelle verwendet habe
WITH pre AS (
	SELECT
		p.id as post_id,
		to_char(n.created_at,
			'YYYY-MM-DD') AS notified_day,
		p.topic_id,
		round(least(EXTRACT(EPOCH FROM n.created_at - p.created_at)::numeric, EXTRACT(EPOCH FROM n.created_at - p.updated_at)::numeric) / 3600)  AS hours_diff,
		p.created_at,
		p.updated_at,
		n.created_at,
		u.username
	FROM
		notifications n
	LEFT JOIN posts p ON p.post_number = n.post_number
		AND p.topic_id = n.topic_id
	left join users u on u.id = n.user_id
WHERE
	round(least(EXTRACT(EPOCH FROM n.created_at - p.created_at)::numeric, EXTRACT(EPOCH FROM n.created_at - p.updated_at)::numeric) / 3600) > 0
	AND n.notification_type = 9
ORDER BY
	n.created_at DESC
LIMIT 400
)
SELECT
	count(*), 
	notified_day
FROM
	pre
GROUP BY
	notified_day
ORDER BY
	notified_day DESC

Hier sind einige Beispiele (aus der Ausführung der CTE in der obigen Abfrage):

Die erste hervorgehobene Zeile wurde am 8. Dezember erstellt, aber ein Benutzer, der diese Kategorie verfolgt, erhielt am 25. Dezember eine Benachrichtigung (und laut anderen Benutzern werden sie über Beiträge informiert, die sie bereits gesehen haben).

Die zweite hervorgehobene Zeile wurde am 29. September erstellt, einen Tag später geändert und am 25. Dezember benachrichtigt.

Ich habe den Container gerade neu erstellt, sodass ich die neueste Version von Discourse verwende. Vorläufig habe ich E-Mail-Benachrichtigungen deaktiviert.

Haben Sie Ideen, wie man dies troubleshooting kann? Ich gehe davon aus, dass es entweder eine Warteschlange ist, die aus irgendeinem Grund überlastet war, oder etwas Ähnliches. Gibt es eine Möglichkeit herauszufinden, was diese Benachrichtigungen generiert?

1 „Gefällt mir“

Meine Vermutung ist, dass es sich um Sidekiq-Jobs handelt, die in der Vergangenheit aus irgendeinem Grund fehlgeschlagen sind und dass du etwas „behoben

2 „Gefällt mir“

Das ist eine gute Vermutung, Jay. Ich kann in den letzten Tagen einen Anstieg sehen, seit Nutzer das Problem gemeldet haben:

Ich habe die Warteschlange für geplante Aufgaben geprüft, und es scheint keine lange Wartezeit für unverarbeitete Nachrichten zu geben. Vielmehr werden alle 10 Minuten oder so einige Dutzend dieser veralteten Benachrichtigungen hinzugefügt.

Ist es möglich, herauszufinden, was diese an Sidekiq sendet?

1 „Gefällt mir“

Das Problem schien sich nach ein paar Tagen von selbst zu lösen (zum Glück), aber eine genauere Untersuchung half mir zu erkennen, dass meine ursprüngliche SQL-Abfrage unvollständig war: Das Feld notifications.post_number verweist auf den ersten ungelesenen Beitrag in einem bestimmten Thema, aber jedes Mal, wenn ein neuer Beitrag erstellt wird, wird notification.created_at auf das neue posts.created_at aktualisiert.

Das erklärte einige der Zeitabweichungen, die ich beobachtet hatte, aber nicht den mysteriösen Anstieg, der auftauchte und wieder verschwand.

Um die Abfrage zu beheben, müsste ich zunächst post_timings prüfen, um die letzte topic_id/post_number zu finden, die der jeweilige Benutzer gesehen hat, und deren created_at anstelle des aus notifications stammenden Wertes verwenden.

1 „Gefällt mir“