diff options
author | Eugen Rochko <eugen@zeonfederated.com> | 2017-05-22 19:35:48 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-05-22 19:35:48 +0200 |
commit | 4a4733b397c9a5d3a69d7b2156f4f8aa62ff0c32 (patch) | |
tree | b4df49db70e7dfaa9f7307f13cc79b4625c65d6b /app/services | |
parent | bda739122110a36b620cb06cf850fa259aafa896 (diff) |
Similarly to #2426, put creation of remote statuses in a transaction, (#3233)
so that public timeline/caching would not encounter incomplete data
Diffstat (limited to 'app/services')
-rw-r--r-- | app/services/process_feed_service.rb | 31 |
1 files changed, 18 insertions, 13 deletions
diff --git a/app/services/process_feed_service.rb b/app/services/process_feed_service.rb index 28ace7ae9..10e947001 100644 --- 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? |