Movendo posts retorna 502 Bad Gateway

Esse bug mais irritante ainda está conosco.
Você poderia me dar instruções para resolver o problema?

Infelizmente, ainda enfrentamos esse problema de vez em quando. Consegui coletar alguns dados sobre um problema recente em que a movimentação de 27 posts para um tópico existente (com 2013 posts) falhou:

Beginning move at 2021-05-25 20:54:57 +0000
create_temp_table
  0.000134   0.000027   0.000161 (  0.002810)

delete_invalid_post_timings
  0.000317   0.000065   0.000382 (  0.306869)

move_incoming_emails
  0.000056   0.000006   0.000062 (  0.000478)

move_notifications
  0.000074   0.000008   0.000082 (  0.005584)

update_reply_counts
  0.000088   0.000010   0.000098 (  0.001058)

update_quotes
  0.000079   0.000008   0.000087 (  0.002426)

move_first_post_replies
  0.000071   0.000008   0.000079 (  0.000695)

delete_post_replies
  0.000062   0.000006   0.000068 (  0.000834)

copy_first_post_timings
  0.000064   0.000007   0.000071 (  0.002660)

move_post_timings
  0.000082   0.000009   0.000091 (  0.008195)

copy_topic_users
  0.000398   0.000043   0.000441 (  0.043640)

move_each_post
  4.345220   0.132652   4.477872 (  3.447047)

create_moderator_post_in_original_topic
  0.163962   0.000253   0.164215 (  0.207101)

update_statistics
  0.217266   0.051660   0.268926 ( 45.258070)

update_user_actions
  0.000934   0.000101   0.001035 (  0.178894)

update_last_post_stats
  0.001589   0.000171   0.001760 (  0.003156)

update_upload_security_status
  0.000030   0.000003   0.000033 (  0.000034)

update_bookmarks
  0.000492   0.000054   0.000546 (  0.003832)

Finished move at 2021-05-25 20:55:47 +0000

A maioria dos métodos termina muito rapidamente, mas update_statistics levou mais de 45 segundos neste caso. Todo esse tempo foi gasto na seguinte chamada de método:

Talvez possamos adiar o trabalho de update_statistics para o Sidekiq?

Sim, provavelmente. Mas vou analisar cuidadosamente o quão complicado seria mover todo o processo para um job do Sidekiq e deixar a UI aguardar até que ele seja concluído. Estamos meio que jogando

Obrigado pelo seu trabalho árduo!

Eu também recebo esse erro 502 ao tentar mesclar tópicos. Não acontece toda vez, mas com muita frequência.

Faço isso quando alguém inicia um tópico sobre um assunto que já existe, então normalmente estou tentando mover apenas um número muito pequeno de posts (não mais do que cinco).

Não li todo este tópico, mas entendi que isso é um problema conhecido que vocês estão trabalhando para resolver e que não há nada que eu possa fazer sozinho?

Eu também estou enfrentando esse problema em nosso fórum. Vários de nós não conseguimos editar e/ou criar novas postagens. Estamos recebendo a seguinte mensagem de erro:

Também estamos tendo 502s ao mover posts.

Costumava ocorrer apenas ocasionalmente e insistir geralmente funcionava. Mas agora temos um caso em que está falhando consistentemente ao tentar mover um único post para um tópico longo (2k posts), expirando após os ~30s.

O servidor não está particularmente ocupado quando isso acontece e lida bem com o resto da atividade. Tentar mover o post quando a atividade está baixa tem o mesmo resultado. Nenhuma diferença com o modo de segurança.

Além de reforçar a instância (assumindo que essa seja uma solução para isso?), há mais alguma coisa que poderíamos tentar? Ficarei feliz em fornecer mais informações se for útil. Vale mencionar que estou na versão estável mais recente — consideraria mudar para a versão beta mais recente se houver alterações recentes para isso.

Durante o fim de semana (nosso período mais lento), triplicamos temporariamente nosso armazenamento máximo de IOPS e, em seguida, também triplicamos a taxa de transferência máxima e ainda não conseguimos mover um único post para o tópico existente com 2 mil posts.

Deixar uma nova resposta no próprio tópico não parece ser um problema, então imagino que deva haver muito mais trabalho extra envolvido quando o post está sendo movido de algum lugar, em vez de ser criado do zero. Se não puder ser feito em menos de 30 segundos, talvez deva ser feito em um job em segundo plano em vez de falhar com uma mensagem de ‘erro 502’?

Sim, acontece comigo também para tópicos antigos e longos com mais de 3000 posts.
Ainda é uma dor.

Olá

Estou tendo um problema semelhante em que não consigo mesclar um tópico com todas as suas respostas em outro post de tópico. O tópico para o qual estou mesclando tem 23 posts e o tópico que estou movendo tem apenas 4 posts.

|

Log de erro
Message (4 copies reported)
Failed to process hijacked response correctly : PG::UniqueViolation : ERROR:  duplicate key value violates unique constraint "post_timings_unique"
DETAIL:  Key (topic_id, post_number, user_id)=(62975, 19, 538) already exists.
Backtrace
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rack-mini-profiler-3.3.1/lib/patches/db/pg.rb:110:in `exec'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rack-mini-profiler-3.3.1/lib/patches/db/pg.rb:110:in `async_exec'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/mini_sql-1.6.0/lib/mini_sql/postgres/connection.rb:217:in `run'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/mini_sql-1.6.0/lib/mini_sql/active_record_postgres/connection.rb:38:in `block in run'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/mini_sql-1.6.0/lib/mini_sql/active_record_postgres/connection.rb:34:in `block in with_lock'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-7.2.2.1/lib/active_support/concurrency/null_lock.rb:9:in `synchronize'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/mini_sql-1.6.0/lib/mini_sql/active_record_postgres/connection.rb:34:in `with_lock'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/mini_sql-1.6.0/lib/mini_sql/active_record_postgres/connection.rb:38:in `run'
/var/www/discourse/lib/mini_sql_multisite_connection.rb:109:in `run'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/mini_sql-1.6.0/lib/mini_sql/postgres/connection.rb:196:in `exec'
/var/www/discourse/app/models/post_mover.rb:517:in `move_post_timings'
/var/www/discourse/app/models/post_mover.rb:142:in `handle_moved_references'
/var/www/discourse/app/models/post_mover.rb:112:in `move_posts_to'
/var/www/discourse/app/models/post_mover.rb:35:in `block in to_topic'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-7.2.2.1/lib/active_record/connection_adapters/abstract/transaction.rb:616:in `block in within_new_transaction'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-7.2.2.1/lib/active_support/concurrency/null_lock.rb:9:in `synchronize'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-7.2.2.1/lib/active_record/connection_adapters/abstract/transaction.rb:613:in `within_new_transaction'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-7.2.2.1/lib/active_record/connection_adapters/abstract/database_statements.rb:361:in `transaction'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-7.2.2.1/lib/active_record/transactions.rb:234:in `block in transaction'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-7.2.2.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:415:in `with_connection'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-7.2.2.1/lib/active_record/connection_handling.rb:296:in `with_connection'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-7.2.2.1/lib/active_record/transactions.rb:233:in `transaction'
/var/www/discourse/app/models/post_mover.rb:35:in `to_topic'
/var/www/discourse/app/models/topic.rb:1308:in `move_posts'
/var/www/discourse/app/controllers/topics_controller.rb:883:in `block in merge_topic'
/var/www/discourse/lib/hijack.rb:64:in `instance_eval'
/var/www/discourse/lib/hijack.rb:64:in `block in hijack'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.4/lib/concurrent-ruby/concurrent/promises.rb:911:in `callback_on_resolution'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.4/lib/concurrent-ruby/concurrent/promises.rb:797:in `call_callback'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.4/lib/concurrent-ruby/concurrent/promises.rb:803:in `call_callbacks'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.4/lib/concurrent-ruby/concurrent/promises.rb:692:in `resolve_with'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.4/lib/concurrent-ruby/concurrent/promises.rb:1325:in `resolve'
/var/www/discourse/lib/scheduler/defer.rb:125:in `block in do_work'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rails_multisite-6.1.0/lib/rails_multisite/connection_management/null_instance.rb:49:in `with_connection'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rails_multisite-6.1.0/lib/rails_multisite/connection_management.rb:21:in `with_connection'
/var/www/discourse/lib/scheduler/defer.rb:119:in `do_work'
/var/www/discourse/lib/scheduler/defer.rb:105:in `block (2 levels) in start_thread'

nota: Notei que o erro diz already exists, mas na verdade são tópicos separados. Não sei se está relacionado, mas antes que esse erro aparecesse, eu movi vários tópicos e seus posts para o tópico com os 23 posts que estou tentando mesclar este aqui (como fiz com os outros tópicos).

Obrigado!

Você atualizou nos últimos dias? Houve uma correção recente relacionada à movimentação de posts