Sélectionner le licenciement Comportement inattendu

Une nouvelle fonctionnalité a été ajoutée en mai Selective dismissal of New and Unread topics. Nous venons de passer à la dernière version de Discourse, et en examinant le code ainsi que nos journaux de base de données, il semble que lorsque les utilisateurs utilisent « Masquer les nouveaux » sans en sélectionner (c’est-à-dire un masquage en masse), nous envoyons tracked = false et aucun autre paramètre dans la requête vers reset-new.

image

En examinant les modifications de la PR, je pense que nous aboutissons ici lorsque nous tentons de déterminer notre topic_scope FEATURE: Allow selective dismissal of new and unread topics (#12976) · discourse/discourse@7a79bd7 · GitHub

Et comme nous ne transmettons aucun topic_id, nous sautons l’instruction if et passons directement à la ligne 989.

Nous gérons un serveur Discourse assez volumineux, et je pense que l’idée de simplement inclure tous les sujets est très coûteuse, car la requête génère essentiellement :

LEFT JOIN topic_users ON topic_users.topic_id = topics.id AND topic_users.user_id = xxx WHERE "topics"."deleted_at" IS NULL AND "topics"."id" IN (1, ... 1000000) AND (topics.created_at >= 'date') AND (topic_users.last_read_post_number IS NULL) AND (topics.archetype <> 'private_message') ORDER BY topics.created_at DESC LIMIT 500

Je crois que la clause IN contient presque tous les sujets, soit plus d’un million.

Pourrions-nous modifier la sélection en masse pour qu’elle transmette par défaut les topic_id plutôt que de prendre tous les sujets possibles par défaut ?

@martin Salut, désolé pour la notification, mais il semble que tu aies poussé le commit en question mentionné ci-dessus.

As-tu la possibilité de vérifier si cela semble être la cause racine de ce que nous observons ? Nous constatons d’énormes listes de filtres dans les requêtes (~un million d’identifiants de sujets) dans le cas par défaut de « tout ignorer » (notre forum héberge une multitude de sujets Discourse).

Nous pourrions aider avec une PR pour résoudre le problème si l’équipe Discourse n’y accorde pas de priorité, mais je doute que nous soyons les seuls affectés par cela ; cela pourrait également impacte la performance de la base de données de certains de vos clients.

Merci à @forkythetoy et @Hooksmith pour avoir attiré mon attention sur ce point. J’ai confirmé qu’il s’agit d’une requête massive, même ici sur Meta. Je vais écrire un correctif aujourd’hui ; cela devrait être aussi simple que d’utiliser uniquement les IDs des sujets qui apparaissent dans la liste « Nouveau » pour un utilisateur, plutôt que tous les sujets jamais créés. Je reviendrai ici dès que j’aurai le correctif.

J’ai intégré cette correction aujourd’hui :