Erros 502 ao renomear categorias grandes (por contagem de tópicos)

Olá.
Também postei aqui: Moving posts returns 502 bad gateway - #63 by Canapin
mas parece que o erro ocorre em outros contextos. Não consigo renomear uma categoria:

Console do JS:

O mesmo acontece no modo seguro (de qualquer forma, não tenho temas ou plugins personalizados, exceto o data-explorer), versão 2.6.0.beta2
Meu servidor está no Ubuntu 18, com 4 vCPU, 8 GB de RAM e 160 GB de espaço em disco.

3 curtidas

Demora muito tempo para o erro aparecer? Acho que você está enfrentando um timeout devido a uma consulta pesada.

1 curtida

20 a 30 segundos, talvez? Além disso, não acontece ao renomear outras categorias. :thinking:

edit: também acontece no meu fórum de desenvolvimento (computador bastante potente com subsistema Ubuntu).

re-edit:

  1. Divisões em lotes menores parecem funcionar. Então, o Discourse não gosta de mover mais de 3000 tópicos, mesmo em um servidor mais poderoso (eu aumentei para 16 vCPU / 32 GB). Então, acho que esse problema é diferente da renomeação das minhas categorias. Ainda não consegui renomear a categoria.

  2. Criei uma nova categoria B (que posso renomear à vontade), movi todos os tópicos da categoria A (que não consigo renomear) para a categoria B: então não consigo mais renomear a categoria B, e consigo renomear a categoria A.
    Tentei renomear minhas categorias, escolhendo cada vez uma categoria com mais posts. A categoria com mais conteúdo (mais posts, tópicos maiores) parece levar mais tempo para ser renomeada.

Há 2 categorias que não consigo renomear (realmente parece levar muito tempo…):

Consigo renomear as mensagens de perfil público, que contêm apenas tópicos sem respostas.

30 segundos é o tempo limite do nginx, então faz sentido. Só precisa de mais tempo que isso.
Se eu fosse você, tentaria isso a partir de um console do Rails.

Eu pensei em fazer assim, mas não tinha certeza se seria seguro: me pergunto por que levaria tanto tempo apenas para renomear o título de uma categoria no Discourse :thinking:
Será que precisa verificar coisas que eu não estou considerando?

Parece que sim :slight_smile:
Acho que pode estar recalculando algumas estatísticas. O que você pode fazer é conectar ao Postgres e executar algo como

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;

para ver o que está demorando tanto.

Obrigado!
No entanto, não estou familiarizado com isso. Devo executar essa consulta enquanto o Discourse estiver tentando alterar o nome da categoria?

Sim, ele mostrará as consultas em execução no momento, então você deve executá-lo enquanto espera. Você tem 30 segundos :wink:

2 curtidas

Executei a consulta cerca de 10 segundos após tentar alterar o nome da categoria, e aqui está o que ela retornou:

Não vejo nada de estranho? :thinking:

Vejo uma consulta muito trivial (UPDATE categories...) que parece estar consumindo 13 segundos até agora…
O que acontece se você executá-la manualmente?

EDIT: Se for um fórum importado, pode ajudar fazer um backup e depois restaurá-lo.

Como tenho o mesmo problema na minha instalação de desenvolvimento no meu computador doméstico, tentei no meu fórum de desenvolvimento.

Tentei alterar o nome da categoria pela interface do Discourse. O erro que mostrei em minha primeira postagem ocorreu e minha RAM foi preenchida:
image

Sua consulta mostra:

Tentei atualizar pelo console do Rails,
Tentei estes dois comandos:

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

Ambos funcionaram perfeitamente.

Isso é… interessante… :thinking:

Atualização: Tentei renomear uma categoria no meu outro fórum ao vivo (dados/servidor/sistema operacional/etc. diferentes, mas mesma versão do Discourse).

Alterar o nome de uma categoria é lento (~10s). Tentei várias vezes e também encontrei um erro 502 uma vez.

Sinto que isso pode ser um problema do Discourse, talvez relacionado a uma atualização recente? :thinking:
Ambos os fóruns usam a versão 2.6.0.beta2.

Alguém poderia tentar alterar o nome de uma categoria (uma categoria com milhares ou dezenas de milhares de tópicos) no próprio fórum, com a mesma versão do Discourse, para ver se é lento ou gera um erro 502?

2 curtidas

Renomear categorias com um grande número de tópicos funcionou rapidamente para você em versões anteriores do Discourse?

Não me lembro de ter recebido um erro 502 no meu fórum anterior (que também foi importado), mas não renomeei nenhuma categoria desde a importação, há 3 anos. Não me recordo se a renomeação de uma categoria era lenta.
Quanto ao meu novo fórum, maior, ele foi importado na versão do Discourse que estou mencionando, então não consigo comparar com uma versão mais antiga.

1 curtida

Apenas uma correção sobre isso: Acredito que anteriormente executei Category.where(id: 21).update(name: "General") em uma categoria da qual movi os tópicos para fora ou algo assim, pois precisei usar este comando várias vezes em várias categorias agora, e parece que a duração do comando é proporcional ao número de posts na categoria de destino.
Portanto, basicamente, é o mesmo problema que quando atualizo a categoria pela interface, exceto que não haverá tempo limite no terminal.

Demorou talvez mais de um minuto para uma categoria com mais de 30.000 tópicos, mais de 30 segundos para uma categoria com mais de 15.000 tópicos, e foi rápido para categorias com poucos tópicos.

1 curtida

Nosso fórum tem apresentado cada vez mais erros nos últimos 6 meses. Acabei de dobrar os recursos do servidor (16 CPUs, 64 GB de RAM) e, embora ele esteja funcionando muito melhor, encontrei um erro reprodutível.

Tentar apenas renomear uma categoria resulta em um erro 502 toda vez.

2 curtidas

Você ajustou as configurações no app.yml de acordo?

Você deve verificar os logs para ver se há alguma pista. Há algo de especial sobre essa categoria? Talvez haja corrupção de índice no banco de dados?

2 curtidas

Sim!

Isso significa apenas olhar em forumwebsite.com/logs? Não vejo erros que se relacionem especificamente com a ação de renomear uma categoria.

Vejo muitas coisas em Info, mas, novamente, nada específico para a ação.

Devo tentar corrigir qualquer erro?

2 curtidas

Você pode verificar /admin/logs (ou algo assim) na interface web e algo como

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

Isso é de memória e digitado às cegas, então recomendo usar algum recurso de autocompletar com a tecla Tab. :slight_smile:

4 curtidas