@zogstrip ¿Te importaría revisar este PR, ya que tienes contexto de la revisión reciente de mi último PR en esta área? FIX: Make migrations from S3 more robust; fix bare URL migration by johnsonm · Pull Request #10093 · discourse/discourse · GitHub
He incluido en él las correcciones que he estado aplicando mientras ejecutaba esta migración relativamente grande. No he intentado agregar pruebas para cada corrección; no estoy seguro de cómo inyectar cada tipo de error. Pero al menos la nueva funcionalidad está probada.
@RGJ Creo que mi PR, tal como está ahora, podría abordar todos tus puntos excepto los dos primeros, aunque no estoy seguro sobre el CDN. Mi sitio usaba CDN y migró videos que tenían URLs de CDN, pero eso podría haber sido un efecto secundario de la nomenclatura con los espacios de Discourse. Si tienes casos adicionales, espero que mi PR te proporcione una base sencilla para agregar al regex y crear casos de prueba para las variaciones adicionales.
Creo que es correcto migrar primero por publicación, ya que después de migrar las subidas en una publicación, esta debe volver a cocinarse para que la publicación cocinada tenga las URLs correctas. Después de terminar de migrar mis publicaciones (lo cual podría tomar menos de dos semanas ahora que he cambiado mi limitación de velocidad para verificar directamente la longitud de la cola), me ocuparé de cualquier trabajo restante para limpiar.
Dado que varias publicaciones pueden compartir referencias al mismo contenido si más de una persona sube el mismo archivo, es necesario un segundo paso que verifique los datos cocinados en busca de URLs antiguas y vuelva a cocinar esas publicaciones para adoptar la nueva ubicación. Puede utilizar la misma limitación de velocidad para evitar saturar las colas.
Probablemente no veré ningún logotipo roto en makerforums, ya que ajustamos la marca después de dejar de subir contenido nuevo a “s3” (para nosotros, espacios de Digital Ocean), pero probablemente veré muchas subidas que aún están en S3, al menos para los avatares. La migración de subidas no asociadas con una publicación debe iniciarse solo después de que todas las publicaciones hayan sido migradas, y probablemente tendré que documentarlo después de terminar de migrar las subidas en las publicaciones.
@pfaffman Veo Bizarre Problems with migrate_from_s3 - #5, que describe errores que no se repitieron. Sin mis correcciones en el PR actual, los errores se silencian, incluidas las fallas de validación. Creo que el trabajo aquí abordará al menos algunos de los problemas que viste entonces.
@hosna Los problemas que planteas en https://meta.discourse.org/t/what-does-rake-uploads-migrate-from-s3-exactly-do/97285 están parcialmente o completamente resueltos hasta ahora en este PR. Si no están completamente resueltos, he agregado pruebas que facilitarán la adición de más pruebas para validar correcciones adicionales.
@sam, dado que pusiste la etiqueta 2.6 en el PR, asumo que no se fusionará durante al menos unos días; ¿debería integrar mi trabajo sobre la función de limitación de velocidad en el PR junto con las correcciones? ¿O prefieres mantener las correcciones y el trabajo de funcionalidad en PRs separados? Puedo hacerlo de cualquier manera. La función de limitación de velocidad está funcionando muy bien; estoy migrando aproximadamente tres veces más rápido, sin impacto en la disponibilidad del sitio, ahora que estoy esperando a que la cola de Sidekiq se vacíe, por lo que tiene sentido integrarla, creo, si es algo que normalmente se acepta en los PRs. De lo contrario, tendré que esperar a que se fusione el trabajo en el que se basa, así que en cualquier caso sería bueno saber tu opinión.
..
He reutilizado (DRY) mi parche de limitación de velocidad para la migración y lo he integrado en el PR. Funciona en la práctica, y sar me indica que estoy viendo un tiempo de inactividad casi nulo de forma continua, mientras el sitio sigue funcionando, durante la migración en vivo. Una ventaja del modo por lotes es que puedo verificar si hay nuevas versiones de Discourse después de cada lote completo de migraciones; actualicé mi sitio a 2.6.0beta1 en la primera oportunidad después de su lanzamiento, y he estado ejecutando las migraciones con éxito en 2.6.0beta1 con mi PR de migración encima desde la actualización.
Creo que el PR está listo para revisión ahora; planeo enviar otro PR para las últimas etapas, pero poner esto en marcha mejorará la experiencia general de migración para todos, incluso antes de que termine las últimas piezas.