Migrate_from_s3 problems

@zogstrip Не могли бы вы просмотреть этот PR, так как у вас есть контекст от недавнего ревью моего предыдущего PR в этой области? FIX: Make migrations from S3 more robust; fix bare URL migration by johnsonm · Pull Request #10093 · discourse/discourse · GitHub

Я включил в него исправления, которые я внедрял во время выполнения этой относительно крупной миграции. Я не пытался добавить тесты для каждого исправления; я не уверен, как внедрить каждую форму ошибки. Но по крайней мере новая функциональность протестирована.

@RGJ Мне кажется, что мой PR в текущем виде может решить все, кроме ваших первых двух пунктов, за исключением того, что я не уверен насчет CDN. Мой сайт использовал CDN и мигрировал видео с URL-адресами CDN, но это могло быть побочным эффектом именования с Discourse Spaces. Если у вас есть дополнительные случаи, надеюсь, мой PR даст вам простую основу для добавления в регулярное выражение и добавления тестовых случаев для дополнительных вариантов.

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

Поскольку несколько постов могут содержать ссылки на один и тот же контент, если более одного человека загрузили один и тот же файл, необходим второй проход, который проверит обработанные данные на наличие старых URL-адресов и перекомпилирует эти посты, чтобы получить новые расположения. Он может использовать то же ограничение скорости, чтобы не перегружать очереди.

Вероятно, я не увижу сломанных логотипов на MakerForums, так как мы изменили брендинг после того, как перестали добавлять новый контент в “s3” (для нас это DigitalOcean Spaces), но, скорее всего, я увижу множество загрузок, все еще находящихся в S3, по крайней мере для аватаров. Миграция загрузок, не связанных с постами, должна быть начата только после миграции всех постов, и, вероятно, мне придется описать это после завершения миграции загрузок в постах.

@pfaffman Я вижу Bizarre Problems with migrate_from_s3 - #5, где описываются ошибки, которые не повторялись. Без моих исправлений в текущем PR ошибки молча поглощаются, включая сбои валидации. Я думаю, что работа здесь решит хотя бы некоторые из проблем, которые вы тогда наблюдали.

@hosna Проблемы, которые вы подняли в https://meta.discourse.org/t/what-does-rake-uploads-migrate-from-s3-exactly-do/97285, частично или полностью решены в этом PR. Если они решены не полностью, я добавил тесты, которые упростят добавление дальнейших тестов для проверки дополнительных исправлений.

@sam Поскольку вы поставили метку 2.6 на PR, я предполагаю, что он не будет слит как минимум в течение нескольких дней; мне ли перенести свою работу по функции ограничения скорости в этот PR вместе с исправлениями? Или у вас есть предпочтение держать исправления и работу над функциями в отдельных PR? Я могу сделать любым способом. Функция ограничения скорости работает очень хорошо; я мигрирую примерно в три раза быстрее, без влияния на доступность сайта, теперь, когда я жду, пока очередь Sidekiq опустеет, поэтому, думаю, имеет смысл включить её, если это обычно принимается в PR. В противном случае мне придется ждать слияния PR, на котором основана эта работа, так что в любом случае было бы хорошо услышать ваше мнение.

..

Я убрал дублирование в своем патче ограничения скорости миграции и включил его в PR. Он работает на практике, и sar показывает, что я наблюдаю почти нулевое время простоя непрерывно, в то время как сайт продолжает функционировать во время живой миграции. Одним из преимуществ режима пакетной обработки является то, что я могу проверять наличие новых версий Discourse после каждой полной партии миграций; я обновил свой сайт до 2.6.0beta1 при первой возможности после его выпуска и успешно выполнял миграции на 2.6.0beta1 с моим PR миграции поверх него с момента обновления.

Я считаю, что PR готов к ревью сейчас; я планирую отправить еще один PR для последних нескольких этапов, но внедрение этого улучшит общий опыт миграции для всех еще до того, как я завершу последние части.

5 лайков