forked from fedi/mastodon
Fix Updates being forwarded even when not processable or causing no change (#17699)
* Fix Updates being forwarded even when not processable or causing no change * Refactor and ensure status edit is strictly newer than last known edit
This commit is contained in:
parent
46ad7fea9d
commit
d3aa9cf774
|
@ -15,6 +15,8 @@ class ActivityPub::ProcessStatusUpdateService < BaseService
|
||||||
# Only native types can be updated at the moment
|
# Only native types can be updated at the moment
|
||||||
return if !expected_type? || already_updated_more_recently?
|
return if !expected_type? || already_updated_more_recently?
|
||||||
|
|
||||||
|
last_edit_date = status.edited_at.presence || status.created_at
|
||||||
|
|
||||||
# Only allow processing one create/update per status at a time
|
# Only allow processing one create/update per status at a time
|
||||||
RedisLock.acquire(lock_options) do |lock|
|
RedisLock.acquire(lock_options) do |lock|
|
||||||
if lock.acquired?
|
if lock.acquired?
|
||||||
|
@ -37,6 +39,8 @@ class ActivityPub::ProcessStatusUpdateService < BaseService
|
||||||
raise Mastodon::RaceConditionError
|
raise Mastodon::RaceConditionError
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
forward_activity! if significant_changes? && @status_parser.edited_at.present? && @status_parser.edited_at > last_edit_date
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
@ -263,4 +267,12 @@ class ActivityPub::ProcessStatusUpdateService < BaseService
|
||||||
PollExpirationNotifyWorker.remove_from_scheduled(poll.id) if @previous_expires_at.present? && @previous_expires_at > poll.expires_at
|
PollExpirationNotifyWorker.remove_from_scheduled(poll.id) if @previous_expires_at.present? && @previous_expires_at > poll.expires_at
|
||||||
PollExpirationNotifyWorker.perform_at(poll.expires_at + 5.minutes, poll.id)
|
PollExpirationNotifyWorker.perform_at(poll.expires_at + 5.minutes, poll.id)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def forward_activity!
|
||||||
|
forwarder.forward! if forwarder.forwardable?
|
||||||
|
end
|
||||||
|
|
||||||
|
def forwarder
|
||||||
|
@forwarder ||= ActivityPub::Forwarder.new(@account, @json, @status)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue