diff --git a/app/workers/thread_resolve_worker.rb b/app/workers/thread_resolve_worker.rb index d4cefb3fdc..270239f7aa 100644 --- a/app/workers/thread_resolve_worker.rb +++ b/app/workers/thread_resolve_worker.rb @@ -10,10 +10,17 @@ class ThreadResolveWorker child_status = Status.find(child_status_id) return if child_status.in_reply_to_id.present? - parent_status = ActivityPub::TagManager.instance.uri_to_resource(parent_url, Status) - parent_status ||= FetchRemoteStatusService.new.call(parent_url, **options.deep_symbolize_keys) + skip_fetching = options.delete('skip_fetching') - return if parent_status.nil? + parent_status = ActivityPub::TagManager.instance.uri_to_resource(parent_url, Status) + parent_status ||= FetchRemoteStatusService.new.call(parent_url, **options.deep_symbolize_keys) unless skip_fetching + + if parent_status.nil? + raise 'presumably private parent not found, retrying later' if skip_fetching + + ThreadResolveWorker.perform_async(child_status_id, parent_url, { 'skip_fetching' => true }) + return + end child_status.thread = parent_status child_status.save!