ActivityPub 收件箱请求导致 Pitchfork worker 超时

我在我的 Discourse 实例(2026.10.0-latest)上观察到 Pitchfork worker 反复出现超时问题。

在分析生产日志后,13 条超时警告中有 12 条与 ActivityPub inbox 请求相关,特别是在进行 HTTP 签名验证时的远程 actor 解析过程中。

相关的回溯信息如下:

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'

看起来远程 actor 解析是在 inbox 处理期间同步执行的,当远程服务器响应缓慢时,这可能会阻塞 Pitchfork worker。

此外,我启用了 activity_pub_verbose_logging 大约 24 小时,并注意到多次尝试解析已删除的 Mastodon actor,这些请求返回了 HTTP 410 Gone,导致大量处理 Delete activity 失败的警告。

示例:

[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 activity 是否与 worker 超时直接相关。

在 inbox 签名验证期间同步进行远程 actor 解析是否是预期行为?能否改进超时处理或缓存机制,以防止阻塞 web worker?

如有需要,我很乐意提供额外的脱敏日志。