Moving posts returns 502 bad gateway

Эта крайне раздражающая ошибка всё ещё с нами.
Не могли бы вы дать мне инструкции, чтобы окончательно решить проблему?

К сожалению, мы время от времени продолжаем сталкиваться с этой проблемой. Мне удалось собрать некоторые данные о недавнем сбое при перемещении 27 постов в существующую тему (содержащую 2013 постов):

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

Большинство методов выполняются очень быстро, но в данном случае update_statistics занял более 45 секунд. Всё это время было потрачено на следующий вызов метода:

Может быть, мы перенесем работу update_statistics в Sidekiq?

Да, вероятно. Но я внимательно изучу, насколько сложно будет перенести весь процесс в задачу Sidekiq и заставить интерфейс ждать его завершения. Мы как бы играем в «бей крота», постоянно перемещая туда по кусочкам различные части процесса.

Спасибо за вашу усердную работу!

Я тоже получаю эту ошибку 502 при попытке объединить темы. Не каждый раз, но очень часто.

Я делаю это, когда кто-то создал тему по теме, которая уже существует, поэтому обычно я пытаюсь переместить очень небольшое количество сообщений (не более пяти).

Я не читал всю эту тему, но, насколько я понимаю, это известная проблема, над которой вы работаете, и я ничего не могу сделать самостоятельно?

У нас на форуме тоже возникает эта проблема. У многих из нас не получается редактировать и/или создавать новые сообщения. Мы видим следующее сообщение об ошибке:

У нас также возникают ошибки 502 при перемещении постов.

Раньше это случалось лишь изредка, и повторная попытка обычно помогала. Но сейчас у нас случай, когда перемещение одного поста в довольно длинную тему (2 тыс. постов) стабильно завершается сбоем: процесс завершается по тайм-ауту примерно через 30 секунд.

В момент возникновения проблемы сервер не особенно загружен и справляется со всей остальной активностью без проблем. Попытка переместить пост в период низкой активности даёт тот же результат. Режим безопасной загрузки также не меняет ситуацию.

Помимо увеличения ресурсов экземпляра (предполагая, что это одно из решений), что ещё можно попробовать? Готовы предоставить дополнительную информацию, если это будет полезно. Стоит упомянуть, что мы используем последнюю стабильную версию — готовы перейти на последнюю бета-версию, если для этой проблемы были внесены недавние исправления.

На выходных (в наш самый тихий период) мы временно утроили максимальное количество операций ввода-вывода в секунду (IOPS) для хранилища, а затем также утроили максимальную пропускную способность, но всё равно не смогли переместить ни один пост в существующую тему с 2 тысячами сообщений.

Оставить новый ответ в самой теме, похоже, не проблема, так что, вероятно, при перемещении поста из другого места требуется гораздо больше дополнительных ресурсов, чем при создании нового. Если это не удаётся выполнить за 30 секунд, возможно, такую операцию стоит выполнять в фоновом задании, а не завершать с ошибкой «502»?

Да, у меня тоже такое бывает с старыми и длинными темами, где больше 3000 сообщений.
Это всё ещё больно.

Привет

У меня возникла похожая проблема: я не могу объединить тему со всеми её ответами с другой темой. Тема, в которую я пытаюсь объединить, содержит 23 поста, а тема, которую я перемещаю, — всего 4 поста.

|

Журнал ошибок
Сообщение (4 копии)
Не удалось корректно обработать перехваченный ответ: PG::UniqueViolation : ОШИБКА: дублирующееся значение ключа нарушает уникальное ограничение "post_timings_unique"
ДЕТАЛИ: Ключ (topic_id, post_number, user_id)=(62975, 19, 538) уже существует.
Трассировка стека
/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'

Примечание: Я заметил, что в ошибке указано уже существует, хотя темы на самом деле разные. Не знаю, связано ли это с чем-то, но перед появлением этой ошибки я переместил несколько тем и их постов в тему с 23 постами, в которую сейчас пытаюсь объединить эту (как я делал с другими темами).

Спасибо!

Вы обновлялись в последние несколько дней? Недавно было исправление, связанное с перемещением постов: