discourse/lib/redis_snapshot.rb
Jarek Radosz 53e6e32b2d
DEV: Attempt to fix about model flakes (#29057)
My theory is that there were nil entries (that we were filtering out) that then changed and we weren't resetting them properly.

(the failure no longer repro'd in 30 CI runs in this PR)
2024-10-03 03:19:34 +02:00

35 lines
675 B
Ruby

# frozen_string_literal: true
class RedisSnapshot
def self.begin_faux_transaction(redis = Discourse.redis)
@stack ||= []
@stack.push(RedisSnapshot.load(redis))
end
def self.end_faux_transaction(redis = Discourse.redis)
@stack.pop.restore(redis)
end
def self.load(redis = Discourse.redis)
keys = redis.keys
values = redis.pipelined { |batch| keys.each { |key| batch.dump(key) } }
new(keys.zip(values))
end
def initialize(dump)
@dump = dump
end
def restore(redis = Discourse.redis)
redis.pipelined do |batch|
batch.flushdb
@dump.each { |key, value| batch.restore(key, 0, value) }
end
nil
end
end