Los recuentos de notificaciones son inconsistentes e incorrectos

Estoy ejecutando un foro muy pequeño de una semana de antigüedad, recién actualizado a la versión actual, y todavía estoy viendo este comportamiento muy extraño. Los contadores de notificaciones (Nuevo, etc.) no parecen corresponder a ningún conteo real y cambian al azar.

Actualmente veo “Nuevo (3)”

Al hacer clic en “Nuevo”, no veo publicaciones nuevas y el “(3)” ha desaparecido.

Al volver a la página de inicio, ya no veo “Nuevo (3)” en el menú.

Si recargo la página, “Nuevo (3)” vuelve a aparecer.

Al hacer clic en “Más recientes”, veo “No leídos (2)”, sin embargo, ninguno de los mensajes de la lista tiene un indicador de no leído.

Al hacer clic en “No leídos (2)”, se muestra que no hay mensajes no leídos.

A veces, cuando hago clic en “Nuevo”, no veo mensajes nuevos y aparece un indicador de “No leídos (1)”.

He verificado /sidekiq/ y todo parece estar bien; no hay trabajos en cola ni acumulados.

3 Me gusta

¿Podrías confirmar en qué versión de Discourse está tu sitio? Debería mostrarse cerca de la parte superior del panel de administración de tu sitio.

3 Me gusta

2.5.0.beta4

( 74db317974 )

2 Me gusta

¿Tienes etiquetas o categorías silenciadas?

¿Tienes una reproducción consistente?

2 Me gusta

Nada está silenciado, y esto ha seguido ocurriendo incluso con nueva actividad en el foro. Si lo deseas, puedes crear una cuenta para verlo en primera persona. (De hecho, no he confirmado si otras personas también ven esto o si es algo único de mi cuenta.)

Mira en tu sección de administración, ¿hay alguna advertencia? ¿Está Sidekiq ejecutándose?

1 me gusta

Sin advertencias, Sidekiq parece estar bien. Asumiendo que estoy leyendo esto correctamente.

¿Estás utilizando Cloudflare o una CDN similar? He notado cierta latencia en las notificaciones con Cloudflare, incluso con la aceleración desactivada. Por ejemplo, Rocket Loader.

1 me gusta

Ah, me perdí esto… así que algo está consistentemente mal. Esto significa que el servidor le está indicando al cliente que hay varios temas nuevos, pero luego, cuando entras en ellos, no aparecen.

He visto esto antes con publicaciones programadas… ¿las usas? Depurar esto es un poco complicado; necesitamos obtener la lista de topic_ids que el cliente considera nuevos.

Si esto está ocurriendo ahora, ejecuta:

SELECT 
           u.id AS user_id,
           topics.id AS topic_id,
           topics.created_at,
           highest_staff_post_number highest_post_number,
           last_read_post_number,
           c.id AS category_id,
           tu.notification_level
FROM topics
JOIN users u on u.id = 1
JOIN user_stats AS us ON us.user_id = u.id
JOIN user_options AS uo ON uo.user_id = u.id
JOIN categories c ON c.id = topics.category_id
LEFT JOIN topic_users tu ON tu.topic_id = topics.id AND tu.user_id = u.id
LEFT JOIN category_users ON category_users.category_id = topics.category_id AND category_users.user_id = 1
WHERE u.id = 1 AND
      
      topics.archetype <> 'private_message' AND
      ((1=0) OR ("topics"."deleted_at" IS NULL AND topics.created_at >= GREATEST(CASE
                  WHEN COALESCE(uo.new_topic_duration_minutes, 2880) = -1 THEN u.created_at
                  WHEN COALESCE(uo.new_topic_duration_minutes, 2880) = -2 THEN COALESCE(u.previous_visit_at,u.created_at)
                  ELSE ('2020-05-13 00:36:29.100619'::timestamp - INTERVAL '1 MINUTE' * COALESCE(uo.new_topic_duration_minutes, 2880))
               END, us.new_since, '2020-05-07 14:46:17') AND tu.last_read_post_number IS NULL AND COALESCE(tu.notification_level, 2) >= 2 AND topics.created_at > '2020-05-07 14:46:17' AND (category_users.last_seen_at IS NULL OR topics.created_at > category_users.last_seen_at))) AND
      
      
      topics.deleted_at IS NULL AND
      
      NOT (
        last_read_post_number IS NULL AND
        COALESCE(category_users.notification_level, 1) = 0
      )

UNION ALL

SELECT 
           u.id AS user_id,
           topics.id AS topic_id,
           topics.created_at,
           highest_staff_post_number highest_post_number,
           last_read_post_number,
           c.id AS category_id,
           tu.notification_level
FROM topics
JOIN users u on u.id = 1
JOIN user_stats AS us ON us.user_id = u.id
JOIN user_options AS uo ON uo.user_id = u.id
JOIN categories c ON c.id = topics.category_id
LEFT JOIN topic_users tu ON tu.topic_id = topics.id AND tu.user_id = u.id
LEFT JOIN category_users ON category_users.category_id = topics.category_id AND category_users.user_id = 1
WHERE u.id = 1 AND
       topics.updated_at >= us.first_unread_at AND 
      topics.archetype <> 'private_message' AND
      (("topics"."deleted_at" IS NULL AND tu.last_read_post_number < topics.highest_staff_post_number AND COALESCE(tu.notification_level, 1) >= 2) OR (1=0)) AND
      
      
      topics.deleted_at IS NULL AND
      
      NOT (
        last_read_post_number IS NULL AND
        COALESCE(category_users.notification_level, 1) = 0
      )

reemplazando user_id = 1 con tu ID de usuario (puedes encontrarlo ejecutando select id, username from users where username = 'tuusuario')

Si esto está ocurriendo, ¿puedes instalar Data Explorer y ver qué está pasando?

1 me gusta

Sin CDN, sin publicaciones programadas; esto es simplemente una instalación estándar de Discourse en Docker en un VPS de Linode, nada especial.

Acabo de instalar el complemento Data Explorer y ahora ni siquiera puedo cargar la página de configuración. Se bloquea con un error de JS en la consola:

workbox-strategies.prod.js:1 Uncaught (in promise) no-response: no-response :: [{"url":"https://forum.livevideotech.today/admin/site_settings"}]
    at a.makeRequest (https://forum.livevideotech.today/javascripts/workbox/workbox-strategies.prod.js:1:2145)
1 me gusta

¿Hay plugins personalizados? ¿Estás en la rama beta o en tests-passed? Si estás en beta, ¿puedes cambiar a tests-passed por ahora?

Un plugin: GitHub - discourse/discourse-solved: Allow accepted answers on topics · GitHub

Estoy en la versión 2.5.0.beta4, a la que llegué tras una instalación estándar y ejecutando las actualizaciones sugeridas.

No sé cómo cambiar a una rama específica; además, eso suena arriesgado, ya que uno de los únicos resultados de búsqueda al intentar averiguar cómo hacerlo fue el de alguien que tuvo migraciones de base de datos fallidas al intentar hacer eso.

Me conecté a la base de datos desde la línea de comandos y ejecuté la consulta; no hubo resultados:

discourse(#         last_read_post_number IS NULL AND
discourse(#         COALESCE(category_users.notification_level, 1) = 0
discourse(#       );
 user_id | topic_id | created_at | highest_post_number | last_read_post_number | category_id | notification_level
---------+----------+------------+---------------------+-----------------------+-------------+--------------------
(0 filas)

discourse=#

Para aclarar: en el estado actual, al cargar la página de inicio veo “Nuevo (1)”; al hacer clic en “Nuevo (1)”, no veo ninguna publicación nueva. Al volver a la página de inicio, “Nuevo (1)” desaparece. Al recargar la página, vuelve a aparecer.

Estás ejecutando un commit antiguo y no estás en beta.

¿Puedes reconstruir desde la consola? El explorador de datos debería funcionar.

Dice que estoy en 4078b22887, que está exactamente un commit detrás de master.

Ah, claro, lo siento. ¿Puedes confirmar si el explorador de datos sigue fallando después de habilitarlo en la configuración del sitio? También, ¿puedes probar en otro navegador (Firefox/Chrome) para ver si el error de la caja de trabajo persiste?

Voy a resolver el problema del explorador de datos más tarde; no quiero tener que reconstruir el foro y dejarlo fuera de servicio cada vez. Solo ejecutaré las consultas en la línea de comandos.

Estado actual: “Nuevos (4)”

 user_id | topic_id |         created_at         | highest_post_number | last_read_post_number | category_id | notification_level
---------+----------+----------------------------+---------------------+-----------------------+-------------+--------------------
       1 |      116 | 2020-05-13 06:48:33.784078 |                   1 |                       |           5 |
       1 |      118 | 2020-05-13 07:29:47.423296 |                   1 |                       |           5 |
       1 |      117 | 2020-05-13 06:52:39.448473 |                   1 |                       |          13 |
       1 |       31 | 2020-05-03 14:13:53.109324 |                   4 |                     3 |           7 |                  2

Al hacer clic en “Nuevos (4)”, veo tres publicaciones: 118, 117 y 116. Ese topic_id 31 no aparece.

Al volver a la página de inicio, ahora muestra “Nuevos (3)”.

Los resultados de la consulta siguen devolviendo los mismos 4.

4 Me gusta

Vale, esto es interesante. ¿Puedes navegar al tema 31? ¿Hay algo extraño en él? Es un tema no leído (last_read_post_number es 3)… la consulta indica que creemos que tienes 3 nuevos y 1 no leído.

Sigo pensando que quizás algo está ocurriendo en el lado del cliente para ti con la caché del web worker.

¿Estás en Chrome o Firefox…? ¿Puedes probar con el otro…? ¿Puedes probar tu navegador en modo incógnito sin extensiones?

4 Me gusta

Oh @martin y yo acabamos de descubrir un error… ¿Por casualidad estás silenciando alguna etiqueta?

Hay un error donde los conteos se desajustan si tienes etiquetas silenciadas y CUALQUIER tema que esté 100% sin etiquetar; estos terminan faltando en los no leídos.

3 Me gusta

No estoy 100 % seguro de que esto sea exactamente tu problema, @aaronpk… pero esta corrección ya está disponible en:

6 Me gusta