lib/ci/queue/redis/base.rb in ci-queue-0.6.0 vs lib/ci/queue/redis/base.rb in ci-queue-0.7.0

- old
+ new

@@ -1,16 +1,17 @@ module CI module Queue module Redis class Base - def initialize(redis:, build_id:) - @redis = redis - @build_id = build_id + def initialize(redis_url, config) + @redis_url = redis_url + @redis = ::Redis.new(url: redis_url) + @config = config end - def empty? - size == 0 + def exhausted? + queue_initialized? && size == 0 end def size redis.multi do redis.llen(key('queue')) @@ -20,22 +21,21 @@ def to_a redis.multi do redis.lrange(key('queue'), 0, -1) redis.zrange(key('running'), 0, -1) - end.flatten.reverse + end.flatten.reverse.map { |k| index.fetch(k) } end def progress total - size end def wait_for_master(timeout: 10) return true if master? (timeout * 10 + 1).to_i.times do - case master_status - when 'ready', 'finished' + if queue_initialized? return true else sleep 0.1 end end @@ -44,15 +44,26 @@ def workers_count redis.scard(key('workers')) end + def queue_initialized? + @queue_initialized ||= begin + status = master_status + status == 'ready' || status == 'finished' + end + end + private - attr_reader :redis, :build_id + attr_reader :redis, :config, :redis_url def key(*args) ['build', build_id, *args].join(':') + end + + def build_id + config.build_id end def master_status redis.get(key('master-status')) end