Sidekiqのジョブの話をしておきましょう。
Sidekiqには、Mastodonのさまざまな役割を担うバックグラウンドジョブ=各種のワーカーが積まれて、順次それが処理されていきます。
v3.2.0では、ActivityPub::ProcessingWorkerというinboxの処理を行うワーカーの再試行回数と、WebFingerのタイムアウト時間を変更しました。
ActivityPub::ProcessingWorkerは、リモートのサーバから飛んでくる様々なActivityに対応するためのワーカーで、投稿や、ブースト、フォローリクエスト、削除など、ActivityPubプロトコルへの対応を行います。
この処理は、正当な相手から届いたかどうかHTTP署名を確認したり、画像を取得して変換したり、ブースト対象の投稿を取得したりする必要があって、相手方のサーバにアカウント情報と鍵・画像・投稿をとりに行くので、長く待たされたり、結構失敗したりします。
エラーが返される場合はいいのですが、相手が応答しない場合はしばらく待たなければならず、次の処理が行えずにつまることがあります。
ActivityPub::ProcessingWorkerは、sidekiqで定義されているデフォルトの25回、再試行を行っていました。最初はすぐに再試行し、徐々に間隔をあけて、相手が対応できるのを期待して待つ仕組みです。25回再試行すると、約20日と11時間粘ることになります。
これを、どうせそんなに頑張っても成功しないので、8回の再試行、約1時間半だけ頑張って、あきらめるようにしました。
また、応答を返してこない場合に1分以上待っていたところを、5秒で接続できなければあきらめるようにしました。正常なサーバは1〜2秒で十分なのですが、30秒待ってもまだ返事しない激遅サーバもあって、つらいところです。
これにより、sidekiqのデッドに、TimeoutであきらめたActivityPub::ProcessingWorkerが多数記録されると思います。手動で再試行できますが、恐らく成功することはないので、どのサーバのどのActivityが処理できなかったのか確認した上で、一時的なものは手動で再試行、他は削除するか無視してください。6ヶ月か9999デッドを越えると削除されます。