lib/sidekiq/api.rb in sidekiq-2.15.2 vs lib/sidekiq/api.rb in sidekiq-2.16.0

- old
+ new

@@ -255,10 +255,11 @@ class SortedSet include Enumerable def initialize(name) @zset = name + @_size = size end def size Sidekiq.redis {|c| c.zcard(@zset) } end @@ -268,27 +269,27 @@ conn.zadd(@zset, timestamp.to_f.to_s, Sidekiq.dump_json(message)) end end def each(&block) - initial_size = size - deleted_size = 0 + initial_size = @_size + offset_size = 0 page = -1 page_size = 50 loop do - range_start = page * page_size + deleted_size - range_end = page * page_size + deleted_size + (page_size - 1) + range_start = page * page_size + offset_size + range_end = page * page_size + offset_size + (page_size - 1) elements = Sidekiq.redis do |conn| conn.zrange @zset, range_start, range_end, :with_scores => true end break if elements.empty? page -= 1 elements.each do |element, score| block.call SortedEntry.new(self, score, element) end - deleted_size = initial_size - size + offset_size = initial_size - @_size end end def fetch(score, jid = nil) elements = Sidekiq.redis do |conn| @@ -318,16 +319,24 @@ elements_with_jid = elements.map do |element| message = Sidekiq.load_json(element) if message["jid"] == jid - Sidekiq.redis { |conn| conn.zrem(@zset, element) } + _, @_size = Sidekiq.redis do |conn| + conn.multi do + conn.zrem(@zset, element) + conn.zcard @zset + end + end end end elements_with_jid.count != 0 else - count = Sidekiq.redis do |conn| - conn.zremrangebyscore(@zset, score, score) + count, @_size = Sidekiq.redis do |conn| + conn.multi do + conn.zremrangebyscore(@zset, score, score) + conn.zcard @zset + end end count != 0 end end