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デッドを越えると削除されます。

ログインして会話に参加
Fedibird

様々な目的に使える、日本の汎用マストドンサーバーです。安定した利用環境と、多数の独自機能を提供しています。