У меня на инстансе Discourse (2026.10.0-latest) наблюдаются повторяющиеся таймауты воркеров Pitchfork.
После анализа журналов production 12 из 13 предупреждений о таймаутах были связаны с запросами к ActivityPub inbox, в частности — с разрешением удалённых акторов при верификации 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'
Похоже, что разрешение удалённых акторов выполняется синхронно во время обработки inbox, что потенциально может блокировать воркеры 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 непосредственно причиной таймаутов воркеров.
Является ли синхронное разрешение удалённых акторов во время верификации подписи inbox ожидаемым поведением? Можно ли улучшить обработку таймаутов или кеширование, чтобы предотвратить блокировку веб-воркеров?
Я готов предоставить дополнительные очищенные логи, если это необходимо.