FIX: distributed cache failing to clear certain values sometimes

this makes the cache resilient to cross machine / forking concerns
This commit is contained in:
Sam 2015-05-01 15:25:23 +10:00
parent f9069c350f
commit 6993fb36ac

View File

@ -24,7 +24,7 @@ class DistributedCache
begin
current = @subscribers[i]
next if payload["origin"] == current.object_id
next if payload["origin"] == current.identity
next if current.key != payload["hash_key"]
hash = current.hash(message.site_id)
@ -61,7 +61,7 @@ class DistributedCache
end
def self.publish(hash, message)
message[:origin] = hash.object_id
message[:origin] = hash.identity
message[:hash_key] = hash.key
DiscourseBus.publish(channel_name, message, { user_ids: [-1] })
end
@ -92,6 +92,11 @@ class DistributedCache
@data = {}
end
def identity
# fork resilient / multi machine identity
(@seed_id ||= SecureRandom.hex) + "#{Process.pid}"
end
def []=(k,v)
k = k.to_s if Symbol === k
DistributedCache.set(self, k, v)