class CI::Queue::Redis::Base
Constants
- CONNECTION_ERRORS
Attributes
redis[R]
redis_url[R]
Public Class Methods
new(redis_url, config)
click to toggle source
# File lib/ci/queue/redis/base.rb, line 13 def initialize(redis_url, config) @redis_url = redis_url @redis = ::Redis.new(url: redis_url) @config = config end
Public Instance Methods
exhausted?()
click to toggle source
# File lib/ci/queue/redis/base.rb, line 19 def exhausted? queue_initialized? && size == 0 end
increment_test_failed()
click to toggle source
# File lib/ci/queue/redis/base.rb, line 64 def increment_test_failed redis.incr(key('test_failed_count')) end
max_test_failed?()
click to toggle source
# File lib/ci/queue/redis/base.rb, line 72 def max_test_failed? return false if config.max_test_failed.nil? test_failed >= config.max_test_failed end
progress()
click to toggle source
# File lib/ci/queue/redis/base.rb, line 37 def progress total - size end
queue_initialized?()
click to toggle source
# File lib/ci/queue/redis/base.rb, line 57 def queue_initialized? @queue_initialized ||= begin status = master_status status == 'ready' || status == 'finished' end end
size()
click to toggle source
# File lib/ci/queue/redis/base.rb, line 23 def size redis.multi do redis.llen(key('queue')) redis.zcard(key('running')) end.inject(:+) end
test_failed()
click to toggle source
# File lib/ci/queue/redis/base.rb, line 68 def test_failed redis.get(key('test_failed_count')).to_i end
to_a()
click to toggle source
# File lib/ci/queue/redis/base.rb, line 30 def to_a redis.multi do redis.lrange(key('queue'), 0, -1) redis.zrange(key('running'), 0, -1) end.flatten.reverse.map { |k| index.fetch(k) } end
wait_for_master(timeout: 30)
click to toggle source
# File lib/ci/queue/redis/base.rb, line 41 def wait_for_master(timeout: 30) return true if master? (timeout * 10 + 1).to_i.times do if queue_initialized? return true else sleep 0.1 end end raise LostMaster, "The master worker is still `#{master_status}` after #{timeout} seconds waiting." end
workers_count()
click to toggle source
# File lib/ci/queue/redis/base.rb, line 53 def workers_count redis.scard(key('workers')) end
Private Instance Methods
build_id()
click to toggle source
# File lib/ci/queue/redis/base.rb, line 86 def build_id config.build_id end
eval_script(script, *args)
click to toggle source
# File lib/ci/queue/redis/base.rb, line 94 def eval_script(script, *args) redis.evalsha(load_script(script), *args) end
key(*args)
click to toggle source
# File lib/ci/queue/redis/base.rb, line 82 def key(*args) ['build', build_id, *args].join(':') end
load_script(script)
click to toggle source
# File lib/ci/queue/redis/base.rb, line 98 def load_script(script) @scripts_cache ||= {} @scripts_cache[script] ||= redis.script(:load, read_script(script)) end
master_status()
click to toggle source
# File lib/ci/queue/redis/base.rb, line 90 def master_status redis.get(key('master-status')) end
read_script(name)
click to toggle source
# File lib/ci/queue/redis/base.rb, line 103 def read_script(name) ::File.read(::File.join(CI::Queue::DEV_SCRIPTS_ROOT, "#{name}.lua")) rescue SystemCallError ::File.read(::File.join(CI::Queue::RELEASE_SCRIPTS_ROOT, "#{name}.lua")) end