commit: 4a4733b397c9a5d3a69d7b2156f4f8aa62ff0c32
parent: bda739122110a36b620cb06cf850fa259aafa896
Author: Eugen Rochko <eugen@zeonfederated.com>
Date: Mon, 22 May 2017 19:35:48 +0200
Similarly to #2426, put creation of remote statuses in a transaction, (#3233)
so that public timeline/caching would not encounter incomplete data
Diffstat:
1 file changed, 18 insertions(+), 13 deletions(-)
diff --git a/app/services/process_feed_service.rb b/app/services/process_feed_service.rb
@@ -47,25 +47,30 @@ class ProcessFeedService < BaseService
return
end
+ status, just_created = nil
+
Rails.logger.debug "Creating remote status #{id}"
- status, just_created = status_from_xml(@xml)
- return if status.nil?
- return status unless just_created
+ ApplicationRecord.transaction do
+ status, just_created = status_from_xml(@xml)
+
+ return if status.nil?
+ return status unless just_created
- if verb == :share
- original_status = shared_status_from_xml(@xml.at_xpath('.//activity:object', activity: TagManager::AS_XMLNS))
- status.reblog = original_status
+ if verb == :share
+ original_status = shared_status_from_xml(@xml.at_xpath('.//activity:object', activity: TagManager::AS_XMLNS))
+ status.reblog = original_status
- if original_status.nil?
- status.destroy
- return nil
- elsif original_status.reblog?
- status.reblog = original_status.reblog
+ if original_status.nil?
+ status.destroy
+ return nil
+ elsif original_status.reblog?
+ status.reblog = original_status.reblog
+ end
end
- end
- status.save!
+ status.save!
+ end
notify_about_mentions!(status) unless status.reblog?
notify_about_reblog!(status) if status.reblog? && status.reblog.account.local?