* Likely fix #2458, fix #2031 - handle out-of-order deletes for statuses If a delete arrives before the original status, cache that information for 6h, and if the original status arrives in that window, ignore it * Add test case
This commit is contained in:
parent
4fcc0d5ac9
commit
13c16b4e95
2 changed files with 60 additions and 1 deletions
|
@ -42,6 +42,11 @@ class ProcessFeedService < BaseService
|
|||
private
|
||||
|
||||
def create_status
|
||||
if redis.exists("delete_upon_arrival:#{id}")
|
||||
Rails.logger.debug "Delete for status #{id} was queued, ignoring"
|
||||
return
|
||||
end
|
||||
|
||||
Rails.logger.debug "Creating remote status #{id}"
|
||||
status, just_created = status_from_xml(@xml)
|
||||
|
||||
|
@ -84,7 +89,13 @@ class ProcessFeedService < BaseService
|
|||
def delete_status
|
||||
Rails.logger.debug "Deleting remote status #{id}"
|
||||
status = Status.find_by(uri: id)
|
||||
RemoveStatusService.new.call(status) unless status.nil?
|
||||
|
||||
if status.nil?
|
||||
redis.setex("delete_upon_arrival:#{id}", 6 * 3_600, id)
|
||||
else
|
||||
RemoveStatusService.new.call(status)
|
||||
end
|
||||
|
||||
nil
|
||||
end
|
||||
|
||||
|
@ -273,5 +284,9 @@ class ProcessFeedService < BaseService
|
|||
def account?(xml = @xml)
|
||||
!xml.at_xpath('./xmlns:author', xmlns: TagManager::XMLNS).nil?
|
||||
end
|
||||
|
||||
def redis
|
||||
Redis.current
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue