Notificaciones creadas incorrectamente para publicaciones antiguas

Ayer mi sitio comenzó a generar notificaciones para publicaciones antiguas de la nada. Este es el número de notificaciones de ‘publicado’ (notification_type = 9) creadas más de una hora después en los últimos días:

Consulta que utilicé para generar la tabla
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

Aquí hay algunos ejemplos (al ejecutar el CTE en la consulta anterior):

La primera fila resaltada se creó el 8 de diciembre, pero un usuario que está siguiendo esa categoría recibió una notificación el 25 de diciembre (y según lo que otros usuarios me han dicho, están recibiendo notificaciones sobre publicaciones que ya habían visto).

La segunda fila resaltada se creó el 29 de septiembre, se modificó al día siguiente y se notificó el 25 de diciembre.

Acabo de reconstruir el contenedor, así que estoy ejecutando la última versión de Discourse. Por ahora, he desactivado las notificaciones por correo electrónico.

¿Alguna idea sobre cómo solucionar esto? Supongo que se trata de una cola que se quedó atascada por alguna razón o algo similar. ¿Hay alguna manera de averiguar qué está generando estas notificaciones?

1 me gusta

Mi suposición es que se trata de trabajos de Sidekiq que fallaron en el pasado por alguna razón y que “arreglaste” algo de modo que esas notificaciones se están enviando ahora en lugar de cuando debían hacerlo. Puedes revisar /sidekiq y ver si hay alguno que puedas eliminar antes de que se procesen.

2 Me gusta

Esa es una buena suposición, Jay. Puedo ver un aumento en los últimos días desde que los usuarios reportaron el problema:

He revisado la cola programada y no parece haber una cola larga de mensajes sin procesar. Más bien, parece que cada 10 minutos se agregan unas pocas decenas de estas notificaciones obsoletas.

¿Es posible rastrear qué podría estar enviando estas notificaciones a Sidekiq?

1 me gusta

El problema pareció resolverse por sí solo (por suerte) después de unos días, pero al profundizar me di cuenta de que mi consulta SQL inicial estaba incompleta: el campo notifications.post_number apunta al primer mensaje no leído en un tema dado, pero cada vez que se crea un nuevo mensaje, su notification.created_at se actualiza al nuevo posts.created_at.

Eso explicaba algunas de las discrepancias de tiempo que observaba, pero no el aumento que apareció y desapareció misteriosamente.

Para corregir la consulta, primero tendría que verificar post_timings para encontrar el último topic_id/post_number que el usuario dado había visto y usar su created_at en lugar del que proviene de notifications.

1 me gusta