2
0

Avoid nested transactions when fetching quote posts (#35657)

This commit is contained in:
Claire
2025-08-04 16:34:05 +02:00
committed by GitHub
parent 49dcbd22d6
commit 0153a239db
2 changed files with 14 additions and 7 deletions

View File

@@ -66,6 +66,7 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
resolve_thread(@status)
resolve_unresolved_mentions(@status)
fetch_replies(@status)
fetch_and_verify_quote
distribute
forward_for_reply
end
@@ -206,11 +207,6 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
@quote.status = status
@quote.save
embedded_quote = safe_prefetched_embed(@account, @status_parser.quoted_object, @json['context'])
ActivityPub::VerifyQuoteService.new.call(@quote, fetchable_quoted_uri: @quote_uri, prefetched_quoted_object: embedded_quote, request_id: @options[:request_id], depth: @options[:depth])
rescue Mastodon::RecursionLimitExceededError, Mastodon::UnexpectedResponseError, *Mastodon::HTTP_CONNECTION_ERRORS
ActivityPub::RefetchAndVerifyQuoteWorker.perform_in(rand(30..600).seconds, @quote.id, @quote_uri, { 'request_id' => @options[:request_id] })
end
def process_tags
@@ -380,6 +376,15 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
Rails.logger.warn "Error fetching replies: #{e}"
end
def fetch_and_verify_quote
return if @quote.nil?
embedded_quote = safe_prefetched_embed(@account, @status_parser.quoted_object, @json['context'])
ActivityPub::VerifyQuoteService.new.call(@quote, fetchable_quoted_uri: @quote_uri, prefetched_quoted_object: embedded_quote, request_id: @options[:request_id], depth: @options[:depth])
rescue Mastodon::RecursionLimitExceededError, Mastodon::UnexpectedResponseError, *Mastodon::HTTP_CONNECTION_ERRORS
ActivityPub::RefetchAndVerifyQuoteWorker.perform_in(rand(30..600).seconds, @quote.id, @quote_uri, { 'request_id' => @options[:request_id] })
end
def conversation_from_uri(uri)
return nil if uri.nil?
return Conversation.find_by(id: OStatus::TagManager.instance.unique_tag_to_local_id(uri, 'Conversation')) if OStatus::TagManager.instance.local_id?(uri)