Discourse インスタンス (2026.10.0-latest) で、Pitchfork ワーカーのタイムアウトが繰り返し発生しています。
本番環境ログを分析したところ、タイムアウト警告の13件中12件が ActivityPub のインボックスリクエストに関連しており、特に HTTP 署名検証のためのリモートアクター解決時に発生していました。
関連するバックトレースは以下の通りです:
Pitchfork worker is about to timeout,
dumping backtrace for main thread
excon/socket.rb:368:in 'IO.select'
excon/socket.rb:79:in 'Excon::Socket#readline'
excon.rb:255:in 'Excon.get'
discourse_activity_pub/request.rb:70:in 'Request#perform'
discourse_activity_pub/request.rb:34:in 'Request#get_json_ld'
discourse_activity_pub/json_ld.rb:71:in 'JsonLd.request_object'
discourse_activity_pub/a_p/object.rb:251:in 'AP::Object.resolve'
signature_verification.rb:254:in 'actor_from_key_id'
signature_verification.rb:61:in 'signed_request_actor'
inboxes_controller.rb:31:in 'process_json'
inboxes_controller.rb:10:in 'create'
インボックス処理中にリモートアクターの解決が同期的に実行されており、リモートサーバーの応答が遅い場合、Pitchfork ワーカーをブロックする可能性があるようです。
また、activity_pub_verbose_logging を約24時間有効にして観察したところ、削除済みの Mastodon アクターの解決を試みる試みが繰り返され、HTTP 410 Gone が返却されることにより、Delete アクティビティの処理失敗に関する警告が多数発生していることに気づきました。
例:
[Discourse Activity Pub] GET request to
https://mastodon.social/ap/users/115676297044305006
failed: {"error":"Gone"}
[Discourse Activity Pub] Failed to resolve actor
[Discourse Activity Pub] Failed to process Delete activity:
Unable to create actor
これらの処理に失敗した Delete アクティビティが、ワーカーのタイムアウトと直接関係しているかどうかは確認できていません。
インボックスの署名検証中の同期的なリモートアクター解決は想定された動作ですか? Web ワーカーのブロッキングを防ぐために、タイムアウト処理やキャッシュを改善することは可能でしょうか?
必要に応じて、追加の無害化済みログを提供できます。