Erreurs 502 lors du renommage de grandes catégories (par nombre de sujets)

Bonjour.
J’ai également posté ici : Moving posts returns 502 bad gateway - #63 by Canapin
mais il semble que l’erreur se produise dans d’autres contextes. Je ne peux pas renommer une catégorie :

Console JS :

Même en mode sans échec (je n’ai pas de thèmes ou de plugins personnalisés, sauf data-explorer), version 2.6.0.beta2
Mon serveur tourne sous Ubuntu 18, avec 4 vCPU, 8 Go de RAM et 160 Go d’espace disque.

3 « J'aime »

Est-ce que cela prend beaucoup de temps avant que l’erreur se manifeste ? Je pense que vous rencontrez un dépassement de délai en raison d’une requête lourde.

1 « J'aime »

20 à 30 secondes peut-être ? De plus, cela ne se produit pas lors du renommage d’autres catégories. :thinking:

edit : cela se produit également sur mon forum de développement (un ordinateur assez puissant avec un sous-système Ubuntu).

re-edit :

  1. Les découpages en petits lots semblent fonctionner. Donc Discourse n’aime pas déplacer plus de 3000 sujets, même sur un serveur plus puissant (j’ai augmenté à 16 vCPU / 32 Go). Je suppose donc que ce problème est différent du renommage de mes catégories. Je n’ai toujours pas pu renommer la catégorie.

  2. J’ai créé une nouvelle catégorie B (que je peux renommer à volonté), j’ai déplacé tous les sujets de la catégorie A (que je ne peux pas renommer) vers la catégorie B : ensuite, je ne peux plus renommer la catégorie B, et je peux renommer la catégorie A.
    J’ai essayé de renommer mes catégories, en choisissant à chaque fois une catégorie contenant plus de messages. La catégorie avec plus de contenu (plus de messages, sujets plus longs) semble prendre plus de temps à être renommée.

Il y a 2 catégories que je ne peux pas renommer (cela semble vraiment prendre trop de temps…):

Je peux renommer « Messages de profil public », qui ne contiennent que des sujets sans réponses.

30 secondes, c’est le délai d’expiration d’nginx, donc cela a du sens. Il lui faut juste un peu plus de temps que ça.
Si j’étais toi, j’essaierais cela depuis une console Rails.

J’avais pensé le faire ainsi, mais je n’étais pas sûr que ce soit sûr : je me demande pourquoi cela prend autant de temps juste pour renommer un titre de catégorie dans Discourse :thinking:
Est-ce qu’il doit vérifier des choses auxquelles je ne pense pas ?

Apparemment :slight_smile:
Je suppose qu’il recalcule peut-être certaines statistiques. Ce que vous pourriez faire, c’est vous connecter à Postgres et exécuter quelque chose comme

SELECT pid, age(query_start, clock_timestamp()), usename, query 
FROM pg_stat_activity 
WHERE query != '<IDLE>' AND query NOT ILIKE '%pg_stat_activity%' 
ORDER BY query_start desc;

pour voir ce qui prend autant de temps.

Merci !
Cependant, je ne connais pas cela. Dois-je exécuter cette requête pendant que Discourse tente de modifier le nom de la catégorie ?

Oui, cela vous affichera les requêtes en cours d’exécution, vous devriez donc l’exécuter en attendant. Vous avez 30 secondes :wink:

2 « J'aime »

J’ai exécuté la requête environ 10 secondes après avoir essayé de modifier le nom de la catégorie, et voici ce qu’elle renvoie :

Je ne vois rien d’étrange ? :thinking:

Je vois une requête très triviale (UPDATE categories...) qui semble déjà prendre 13 secondes…
Que se passe-t-il si vous l’exécutez manuellement ?

EDIT : s’il s’agit d’un forum importé, il peut être utile de faire une sauvegarde, puis de le restaurer.

Puisque j’ai le même problème sur mon installation de développement sur mon ordinateur personnel, j’ai essayé sur mon forum de développement.

J’ai tenté de modifier le nom de la catégorie via l’interface de Discourse. L’erreur que j’ai affichée dans mon premier message s’est produite et ma mémoire RAM s’est saturée :
image

Votre requête affiche :

J’ai tenté une mise à jour depuis la console Rails, en essayant ces deux commandes :

ActiveRecord::Base.connection.execute("UPDATE categories SET name = 'Discussion générale', topic_template = '', sort_order = '', default_view = '', read_only_banner = '', name_lower = 'discussion_generale', updated_at = '2020-09-16 13:36:50.014192' WHERE categories.id = 21")
Category.where(id: 21).update(name: "Général")

Les deux ont fonctionné à merveille.

C’est… intéressant… :thinking:

Mise à jour : J’ai essayé de renommer une catégorie sur mon autre forum en ligne (données/serveur/système d’exploitation/etc. différents, mais même version de Discourse).

Le changement de nom d’une catégorie est lent (~10 s). J’ai essayé plusieurs fois et j’ai également rencontré une erreur 502 une fois.

J’ai l’impression que cela vient peut-être de Discourse, peut-être lié à une mise à jour récente ? :thinking:
Les deux forums utilisent la version 2.6.0.beta2.

Quelqu’un peut-il essayer de changer le nom d’une catégorie (une catégorie avec des milliers, voire des dizaines de milliers de sujets) sur son propre forum, avec la même version de Discourse, pour voir si c’est lent ou si cela génère une erreur 502 ?

2 « J'aime »

Est-ce que renommer des catégories contenant un grand nombre de sujets fonctionnait rapidement pour vous dans les versions précédentes de Discourse ?

Je ne me souviens pas avoir rencontré une erreur 502 sur mon ancien forum (qui a également été importé), mais je n’ai pas renommé de catégorie depuis l’importation il y a trois ans. Je ne me rappelle pas si le renommage d’une catégorie était lent.
En ce qui concerne mon nouveau forum, plus vaste, il a été importé sur la version de Discourse dont je parle, je ne peux donc pas la comparer à une version antérieure.

1 « J'aime »

Juste une correction à ce sujet : je pense avoir précédemment exécuté Category.where(id: 21).update(name: "General") pour une catégorie dont j’avais déplacé les sujets ou quelque chose de similaire, car j’ai dû utiliser cette commande plusieurs fois sur diverses catégories récemment, et il semble que la durée d’exécution de la commande soit proportionnelle au nombre de messages dans la catégorie cible.
Donc, en gros, c’est le même problème que lorsque je mets à jour la catégorie via l’interface, sauf que cela ne dépasse pas le délai d’attente en ligne de commande.

Cela a pris peut-être plus d’une minute pour une catégorie avec plus de 30 000 sujets, plus de 30 secondes pour une catégorie avec plus de 15 000 sujets, et c’était rapide pour les catégories avec peu de sujets.

1 « J'aime »

Notre forum a connu de plus en plus d’erreurs au cours des six derniers mois. Je viens de doubler nos ressources serveur (16 CPU, 64 Go de RAM) et, bien que cela fonctionne beaucoup mieux, j’ai découvert une erreur reproductible.

Tenter de renommer une seule catégorie entraîne systématiquement une erreur 502.

2 « J'aime »

Avez-vous ajusté les paramètres dans le fichier app.yml en conséquence ?

Vous devriez consulter les journaux pour voir si cela vous donne un indice. Y a-t-il quelque chose de particulier concernant cette catégorie ? Peut-être une corruption d’index de base de données ?

2 « J'aime »

Oui !

Est-ce simplement en regardant forumwebsite.com/logs ? Je ne vois pas d’erreurs qui soient spécifiquement liées à l’action de renommer une catégorie.

Je vois beaucoup de choses dans Info, mais encore une fois rien de spécifique à l’action.

Devrais-je essayer de supprimer toutes les erreurs ?

2 « J'aime »

Vous pouvez consulter /admin/logs (ou quelque chose de similaire) dans l’interface web, ainsi qu’une commande du type

tail -f /var/discourse/shared/standalone/logs/rails/production.log

Ceci est de mémoire et saisi à la main, donc je vous recommande d’utiliser l’auto-complétion avec la touche Tab. :slight_smile:

4 « J'aime »