Les utilisateurs administrateurs obtiennent toujours une erreur 500 de timeout dans GitUtils.has_commit?, alors que les utilisateurs normaux fonctionnent correctement

Bonjour à tous,

Je rencontre un problème étrange avec une installation fraîche de Discourse et j’apprécierais tout conseil.

Environnement

  • Discourse Docker (dernière version stable)
  • Ubuntu 24.04
  • Installation fraîche via discourse_docker
  • Aucun plugin sauf OpenID Connect
  • Dépôt Git propre
  • Reverse proxy avec nginx
  • HTTP uniquement (pas encore de HTTPS)
  • Le dépôt Git local existe et est sur la branche latest

Le comportement étrange

Utilisateurs anonymes :

  • :white_check_mark: La page d’accueil se charge normalement

Utilisateurs authentifiés normaux :

  • :white_check_mark: Fonctionnent normalement

Utilisateurs authentifiés via OpenID Connect :

  • :white_check_mark: Fonctionnent normalement

Mais chaque utilisateur admin local de Discourse subit un dépassement de délai (timeout) et finit par voir :


Oups

Le logiciel alimentant ce forum de discussion a rencontré un problème inattendu.

ou parfois


Le serveur connaît actuellement une charge élevée.

Ce que nous avons testé

Nous avons créé un nouvel admin local en utilisant


rake admin:create

Résultat :

  • l’utilisateur en tant qu’Admin → :cross_mark: timeout 500
  • le même utilisateur après avoir modifié

u.admin = false
u.save!

:white_check_mark: fonctionne immédiatement

Le problème est donc reproductible uniquement lorsque admin == true.

Journal (Log)

Le worker dépasse toujours son délai après environ 30 secondes.

Traceback :


GitUtils.try_git
GitUtils.has_commit?
DiscourseUpdates.new_features
DiscourseUpdates.has_unseen_features?
CurrentUserSerializer
ApplicationLayoutPreloader

Le timeout se produit toujours ici :


/var/www/discourse/lib/git_utils.rb:33
Kernel#`

Observation importante

L’exécution de Git manuellement à l’intérieur du conteneur est instantanée.

Par exemple :


git rev-parse HEAD

renvoie un résultat en environ 7 ms.

Aussi :


git merge-base --is-ancestor <current_commit> HEAD

renvoie immédiatement.

Donc Git lui-même n’est pas lent.

Redis

new_features ne semble pas exister :


redis-cli exists new_features latest_new_feature_created_at

(integer) 0

Question

Pourquoi GitUtils.has_commit? bloquerait-il uniquement pour les utilisateurs admin alors que chaque commande Git s’exécute instantanément depuis le shell ?

Y a-t-il un problème connu dans les versions récentes de Discourse où DiscourseUpdates ou new_features provoquerait des timeouts réservés aux admins ?

Toute idée sur la suite des investigations serait grandement appréciée.

Merci !