Usuários admin sempre recebem timeout 500 em GitUtils.has_commit?, enquanto usuários normais funcionam normalmente

Olá a todos,

Estou enfrentando um problema estranho em uma instalação nova do Discourse e apreciaria qualquer orientação.

Ambiente

  • Discourse Docker (última versão estável)
  • Ubuntu 24.04
  • Instalação nova usando discourse_docker
  • Sem plugins, exceto OpenID Connect
  • Repositório Git está limpo
  • Proxy reverso com nginx
  • Apenas HTTP (sem HTTPS ainda)
  • Repositório Git local existe e está na branch latest

O comportamento estranho

Usuários anônimos:

  • :white_check_mark: A página inicial carrega normalmente

Usuários autenticados normais:

  • :white_check_mark: Funcionam normalmente

Usuários autenticados através do OpenID Connect:

  • :white_check_mark: Funcionam normalmente

Mas todo usuário administrador local do Discourse recebe um tempo limite e finalmente:


Ops

O software que alimenta este fórum de discussão encontrou um problema inesperado.

ou às vezes


O servidor está experimentando alta carga.

O que testamos

Criamos um novo administrador local usando


rake admin:create

Resultado:

  • usuário como Administrador → :cross_mark: tempo limite 500
  • mesmo usuário após alterar

u.admin = false
u.save!

:white_check_mark: funciona imediatamente

Então o problema é reproduzível apenas quando admin == true.

Log

O trabalhador sempre tem tempo limite após cerca de 30 segundos.

Rastreamento:


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

O tempo limite sempre acontece aqui:


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

Observação importante

Executar Git manualmente dentro do container é instantâneo.

Por exemplo:


git rev-parse HEAD

retorna em cerca de 7 ms.

Também:


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

retorna imediatamente.

Então o Git em si não está lento.

Redis

new_features não parece existir:


redis-cli exists new_features latest_new_feature_created_at

(integer) 0

Pergunta

Por que GitUtils.has_commit? bloquearia apenas para usuários administradores enquanto todos os comandos Git executam instantaneamente pelo shell?

Existe algum problema conhecido em versões recentes do Discourse onde DiscourseUpdates ou new_features causa tempos limite apenas para administradores?

Qualquer ideia sobre onde investigar a seguir seria muito apreciada.

Obrigado!