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