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

Привет, команда и сообщество Discourse,

Я заметил интересный способ обработки изображений в ревизиях постов на своем самостоятельно размещенном экземпляре Discourse и хотел бы понять лежащий в этом механизме принцип.

Контекст:

  • Загрузка изображений на моем сайте настроена через Cloudflare R2 (хранилище, совместимое с S3).

  • За последние несколько месяцев я внес несколько изменений в посты, которые предполагали замену или удаление старых изображений новыми.

  • Все исходные загруженные изображения находятся в R2.

Наблюдение: Когда я проверяю историю ревизий постов для этих старых постов:

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

  2. В некоторых конкретных ревизиях изображение полностью отсутствует или физический файл потерян, оставляя только плейсхолдер.

Мой вопрос:

  • Как фоновая задача CleanUpUploads и удаление «осиротевших» загрузок в Discourse различает эти ревизии?

  • Почему некоторые изображения из исторических ревизий хранятся в R2 (или в кэше) неопределенно долго, даже после удаления из тела последнего поста, в то время как другие полностью удаляются или теряют свои оптимизированные варианты?

Буду очень признателен за любые сведения о кодбейсе или логике базы данных (upload_references / OptimizedImage), касающиеся ревизий!

Лео