summaryrefslogtreecommitdiffstats
path: root/app/lib/activitypub/activity/announce.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/lib/activitypub/activity/announce.rb')
-rw-r--r--app/lib/activitypub/activity/announce.rb36
1 files changed, 14 insertions, 22 deletions
diff --git a/app/lib/activitypub/activity/announce.rb b/app/lib/activitypub/activity/announce.rb
index ae8b2db754e..a1081522eb1 100644
--- a/app/lib/activitypub/activity/announce.rb
+++ b/app/lib/activitypub/activity/announce.rb
@@ -4,29 +4,25 @@ class ActivityPub::Activity::Announce < ActivityPub::Activity
def perform
return reject_payload! if delete_arrived_first?(@json['id']) || !related_to_local_activity?
- RedisLock.acquire(lock_options) do |lock|
- if lock.acquired?
- original_status = status_from_object
+ lock_or_fail("announce:#{@object['id']}") do
+ original_status = status_from_object
- return reject_payload! if original_status.nil? || !announceable?(original_status)
+ return reject_payload! if original_status.nil? || !announceable?(original_status)
- @status = Status.find_by(account: @account, reblog: original_status)
+ @status = Status.find_by(account: @account, reblog: original_status)
- return @status unless @status.nil?
+ return @status unless @status.nil?
- @status = Status.create!(
- account: @account,
- reblog: original_status,
- uri: @json['id'],
- created_at: @json['published'],
- override_timestamps: @options[:override_timestamps],
- visibility: visibility_from_audience
- )
+ @status = Status.create!(
+ account: @account,
+ reblog: original_status,
+ uri: @json['id'],
+ created_at: @json['published'],
+ override_timestamps: @options[:override_timestamps],
+ visibility: visibility_from_audience
+ )
- distribute(@status)
- else
- raise Mastodon::RaceConditionError
- end
+ distribute(@status)
end
@status
@@ -69,8 +65,4 @@ class ActivityPub::Activity::Announce < ActivityPub::Activity
def reblog_of_local_status?
status_from_uri(object_uri)&.account&.local?
end
-
- def lock_options
- { redis: Redis.current, key: "announce:#{@object['id']}" }
- end
end