記事改訂での画像保存の不整合:なぜ一部の削除された画像は壊れ、他は永久に残るのか?

Discourseチームおよびコミュニティの皆様へ

私がホスティングしているDiscourseインスタンスでの投稿版履歴における画像処理の挙動について興味深い現象を確認し、その仕組みを理解したく質問させてください。

背景:

  • 当サイトでは、画像アップロードをCloudflare R2(S3互換ストレージ)へルーティングしています。

  • 過去数ヶ月間、既存の画像を新しい画像に置き換えたり削除したりするいくつかの投稿編集を実施しました。

  • すべての元の画像アップロードはR2に存在します。

観察結果: これらの古い投稿の投稿版履歴を確認した際、以下のことが分かりました。

  1. 数ヶ月前に画像が置き換えられたり削除されたりした大多数の版履歴では、履歴内の画像リンクは完全にアクセス可能であり、正しく読み込まれています。

  2. 特定のいくつかの版履歴では、画像が完全に壊れていたり、物理ファイルが存在しなかったりして、プレースホルダーだけが残っている状態です。

質問:

  • DiscourseのCleanUpUploadsや孤立アセット削除のバックグラウンドジョブは、これらの版履歴をどのように区別しているのでしょうか?

  • なぜ、最新の投稿本文から削除された後でも、一部の履歴画像がR2(またはキャッシュ)に永続的に残る一方で、他は完全にパージされたり、最適化されたバリアントを失ったりするのでしょうか?

版履歴に関するコードベースやデータベースロジック(upload_references / OptimizedImage)についてのご洞察をいただければ幸いです。

Leo