Les comptes de notifications sont incohérents et incorrects

Je fais fonctionner un très petit forum depuis une semaine, que je viens de mettre à jour vers la version actuelle, et je constate toujours ce comportement très étrange. Les compteurs de notifications (Nouveau, etc.) ne semblent correspondre à aucun nombre réel et changent de manière aléatoire.

Actuellement, je vois « Nouveau (3) »

En cliquant sur « Nouveau », je ne vois aucun nouveau message, et le « (3) » a disparu.

En revenant à la page d’accueil, je ne vois plus « Nouveau (3) » dans le menu.

Si je recharge la page, « Nouveau (3) » réapparaît.

En cliquant sur « Derniers », je vois « Non lus (2) », mais aucun des messages de la liste ne présente d’indicateur de message non lu.

En cliquant sur « Non lus (2) », il s’avère qu’il n’y a aucun message non lu.

Parfois, lorsque je clique sur « Nouveau », je ne vois aucun nouveau message et un indicateur « Non lus (1) » apparaît.

J’ai vérifié /sidekiq/ et tout semble correct ; il n’y a aucun travail en file d’attente ou accumulé.

3 « J'aime »

Pouvez-vous confirmer sur quelle version de Discourse se trouve votre site ? Elle devrait être affichée en haut du tableau de bord d’administration de votre site.

3 « J'aime »

2.5.0.beta4

( 74db317974 )

2 « J'aime »

Avez-vous des tags ou des catégories masqués ?

Avez-vous une reproduction cohérente ?

2 « J'aime »

Rien n’est muet, et cela continue de se produire même avec de nouvelles activités sur le forum. N’hésitez pas à créer un compte si vous souhaitez le constater par vous-même. (Je n’ai pas encore confirmé si d’autres personnes voient cela ou si cela est unique à mon compte.)

Regardez dans votre section d’administration : y a-t-il des avertissements ? Sidekiq est-il en cours d’exécution ?

1 « J'aime »

Aucun avertissement, Sidekiq semble correct. En supposant que je lis bien cela.

Utilisez-vous Cloudflare ou un CDN similaire ? J’ai remarqué une certaine latence dans les notifications avec Cloudflare, même avec l’accélération désactivée. Par exemple, Rocket Loader.

1 « J'aime »

Ah, j’avais manqué cela… donc quelque chose est systématiquement incorrect. Cela signifie que le serveur indique au client qu’il y a un certain nombre de nouveaux sujets, mais qu’en creusant, ils sont manquants.

J’ai déjà vu cela se produire avec des publications planifiées… les utilisez-vous ? Le débogage est un peu délicat ; nous devons obtenir la liste des topic_ids que le client considère comme nouveaux.

Si cela se produit actuellement, exécutez :

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
      )

en remplaçant user_id = 1 par votre identifiant utilisateur (vous pouvez le trouver en exécutant select id, username from users where username = 'votre_nom_utilisateur').

Si cela se produit, pouvez-vous installer Data Explorer et voir ce qui se passe ?

1 « J'aime »

Aucun CDN, aucune publication planifiée, il s’agit simplement d’une installation standard de Discourse dans Docker sur un VPS Linode, rien de compliqué.

Je viens d’installer le plugin Data Explorer et maintenant je ne peux même plus charger la page des paramètres. Elle plante avec une erreur JS dans la console :

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 « J'aime »

Des plugins personnalisés ? Êtes-vous sur la branche bêta ou tests-passés ? Si vous êtes sur la bêta, pouvez-vous passer à tests-passés pour le moment ?

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

Je suis sur la version 2.5.0.beta4, que j’ai obtenue après une installation standard et l’exécution des mises à jour proposées.

Je ne sais pas comment basculer vers une branche spécifique ; de plus, cela semble risqué, car l’un des seuls résultats de recherche sur la façon de le faire concernait quelqu’un ayant rencontré des échecs de migrations de base de données en essayant de faire cela.

Je me suis connecté à la base de données en ligne de commande et j’ai exécuté la requête ; aucun résultat n’a été retourné :

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 rows)

discourse=#

Pour clarifier : dans l’état actuel, lorsque je charge la page d’accueil, je vois « Nouveau (1) ». En cliquant sur « Nouveau (1) », je ne vois aucun nouveau message. En revenant à la page d’accueil, l’indicateur « Nouveau (1) » disparaît. Un rechargement de la page le fait réapparaître.

Vous exécutez une ancienne version et n’êtes pas sur la version bêta.

Pouvez-vous reconstruire depuis la console ? L’explorateur de données devrait fonctionner.

Il est indiqué que je suis sur 4078b22887, ce qui correspond exactement à un commit en retard par rapport à master.

Ah oui, désolé, pouvez-vous confirmer que l’explorateur de données est toujours cassé après l’avoir activé dans les paramètres du site ? Pouvez-vous également essayer dans un autre navigateur (Firefox/Chrome) : l’erreur de la boîte de travail persiste-t-elle ?

Je vais traiter le problème de l’explorateur de données plus tard ; je ne veux pas devoir reconstruire le forum et le mettre hors ligne à chaque fois. Je vais simplement exécuter les requêtes en ligne de commande.

Statut actuel : « Nouveau (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

En cliquant sur « Nouveau (4) », je vois trois messages : 118, 117 et 116. Le topic_id 31 n’apparaît pas.

En revenant à la page d’accueil, l’indicateur affiche désormais « Nouveau (3) ».

Les résultats de la requête retournent toujours les mêmes 4 éléments.

4 « J'aime »

Bon, c’est intéressant. Pouvez-vous naviguer vers le sujet 31 ? Y a-t-il quelque chose d’étrange à son sujet ? C’est un sujet non lu (last_read_post_number est 3) … la requête indique que nous pensons que vous avez 3 nouveaux et 1 non lu.

Je continue de penser que quelque chose se passe côté client pour vous avec la mise en cache des web workers.

Êtes-vous sur Chrome ou Firefox … pouvez-vous essayer l’autre … pouvez-vous essayer votre navigateur en mode navigation privée sans extensions ?

4 « J'aime »

Oh @martin, nous venons de découvrir un bug… Par hasard, est-ce que tu masques certains tags ?

Il y a un bug où les comptes sont incorrects si tu as masqué des tags et qu’il existe des sujets sans aucun tag : ils finissent par être absents des non lus.

3 « J'aime »

Je ne suis pas sûr à 100 % que cela corresponde exactement à votre problème @aaronpk… mais cette correction est désormais disponible ici :

6 « J'aime »