lib/searchkick/reindex_queue.rb in searchkick-4.5.0 vs lib/searchkick/reindex_queue.rb in searchkick-4.5.1
- old
+ new
@@ -12,15 +12,21 @@
Searchkick.with_redis { |r| r.lpush(redis_key, record_id) }
end
# TODO use reliable queuing
def reserve(limit: 1000)
- record_ids = Set.new
- while record_ids.size < limit && (record_id = Searchkick.with_redis { |r| r.rpop(redis_key) })
- record_ids << record_id
+ if supports_rpop_with_count?
+ Searchkick.with_redis { |r| r.call("rpop", redis_key, limit) }
+ else
+ record_ids = []
+ Searchkick.with_redis do |r|
+ while record_ids.size < limit && (record_id = r.rpop(redis_key))
+ record_ids << record_id
+ end
+ end
+ record_ids
end
- record_ids.to_a
end
def clear
Searchkick.with_redis { |r| r.del(redis_key) }
end
@@ -31,8 +37,16 @@
private
def redis_key
"searchkick:reindex_queue:#{name}"
+ end
+
+ def supports_rpop_with_count?
+ redis_version >= Gem::Version.new("6.2")
+ end
+
+ def redis_version
+ @redis_version ||= Searchkick.with_redis { |r| Gem::Version.new(r.info["redis_version"]) }
end
end
end