Skip to content

Commit bc30e28

Browse files
ClearlyClaireGargron
authored andcommitted
Do not error out on unsalvageable errors in FetchRepliesService (mastodon#10175)
* Do not error out on unsalvageable errors in FetchRepliesService Fixes mastodon#10152 * Fix FetchRepliesWorker erroring out on deleted statuses
1 parent e4ad804 commit bc30e28

3 files changed

Lines changed: 18 additions & 4 deletions

File tree

app/helpers/jsonld_helper.rb

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,13 +63,19 @@ def fetch_resource(uri, id, on_behalf_of = nil)
6363
json.present? && json['id'] == uri ? json : nil
6464
end
6565

66-
def fetch_resource_without_id_validation(uri, on_behalf_of = nil)
66+
def fetch_resource_without_id_validation(uri, on_behalf_of = nil, raise_on_temporary_error = false)
6767
build_request(uri, on_behalf_of).perform do |response|
68+
unless response_successful?(response) || response_error_unsalvageable?(response) || !raise_on_temporary_error
69+
raise Mastodon::UnexpectedResponseError, response
70+
end
6871
return body_to_json(response.body_with_limit) if response.code == 200
6972
end
7073
# If request failed, retry without doing it on behalf of a user
7174
return if on_behalf_of.nil?
7275
build_request(uri).perform do |response|
76+
unless response_successful?(response) || response_error_unsalvageable?(response) || !raise_on_temporary_error
77+
raise Mastodon::UnexpectedResponseError, response
78+
end
7379
response.code == 200 ? body_to_json(response.body_with_limit) : nil
7480
end
7581
end
@@ -92,6 +98,14 @@ def merge_context(context, new_context)
9298

9399
private
94100

101+
def response_successful?(response)
102+
(200...300).cover?(response.code)
103+
end
104+
105+
def response_error_unsalvageable?(response)
106+
(400...500).cover?(response.code) && response.code != 429
107+
end
108+
95109
def build_request(uri, on_behalf_of = nil)
96110
request = Request.new(:get, uri)
97111
request.on_behalf_of(on_behalf_of) if on_behalf_of

app/services/activitypub/fetch_replies_service.rb

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,7 @@ def fetch_collection(collection_or_uri)
3636
return collection_or_uri if collection_or_uri.is_a?(Hash)
3737
return unless @allow_synchronous_requests
3838
return if invalid_origin?(collection_or_uri)
39-
collection = fetch_resource_without_id_validation(collection_or_uri)
40-
raise Mastodon::UnexpectedResponseError if collection.nil?
41-
collection
39+
fetch_resource_without_id_validation(collection_or_uri, nil, true)
4240
end
4341

4442
def filtered_replies

app/workers/activitypub/fetch_replies_worker.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,7 @@ class ActivityPub::FetchRepliesWorker
88

99
def perform(parent_status_id, replies_uri)
1010
ActivityPub::FetchRepliesService.new.call(Status.find(parent_status_id), replies_uri)
11+
rescue ActiveRecord::RecordNotFound
12+
true
1113
end
1214
end

0 commit comments

Comments
 (0)