mirror of
https://github.com/discourse/discourse.git
synced 2024-11-25 08:43:25 +08:00
FIX: distributed cache failing to clear certain values sometimes
this makes the cache resilient to cross machine / forking concerns
This commit is contained in:
parent
f9069c350f
commit
6993fb36ac
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue
Block a user