Browse Source

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
closed-social-glitch-2
Claire 2 years ago
committed by GitHub
parent
commit
d3aa9cf774
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 12 additions and 0 deletions
  1. +12
    -0
      app/services/activitypub/process_status_update_service.rb

+ 12
- 0
app/services/activitypub/process_status_update_service.rb View File

@ -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…
Cancel
Save