diff options
author | Kamil Trzcinski <ayufan@ayufan.eu> | 2017-02-28 12:07:04 +0100 |
---|---|---|
committer | Kamil Trzcinski <ayufan@ayufan.eu> | 2017-03-03 12:57:47 +0100 |
commit | 2b27a98db32d788796c4495f5405ba09436fd8ce (patch) | |
tree | 117472736dba3c4978aa30f8cee5cba3873b5bcb | |
parent | 859a9cd9a65a2b862145efafd8716613fda29cd7 (diff) | |
download | gitlab-ce-2b27a98db32d788796c4495f5405ba09436fd8ce.tar.gz |
Add support for Workhorse notifications
-rw-r--r-- | app/models/ci/runner.rb | 11 | ||||
-rw-r--r-- | changelogs/unreleased/use-redis-channel-to-post-runner-notifcations.yml | 4 | ||||
-rw-r--r-- | lib/gitlab/workhorse.rb | 14 |
3 files changed, 23 insertions, 6 deletions
diff --git a/app/models/ci/runner.rb b/app/models/ci/runner.rb index 4863c34a6a6..34ffc4b77fc 100644 --- a/app/models/ci/runner.rb +++ b/app/models/ci/runner.rb @@ -127,17 +127,16 @@ module Ci def tick_runner_queue SecureRandom.hex.tap do |new_update| - Gitlab::Redis.with do |redis| - redis.set(runner_queue_key, new_update, ex: RUNNER_QUEUE_EXPIRY_TIME) - end + ::Gitlab::Workhorse.ensure_and_notify(runner_queue_key, new_update, + expire: RUNNER_QUEUE_EXPIRY_TIME, overwrite: true) end end def ensure_runner_queue_value Gitlab::Redis.with do |redis| - value = SecureRandom.hex - redis.set(runner_queue_key, value, ex: RUNNER_QUEUE_EXPIRY_TIME, nx: true) - redis.get(runner_queue_key) + new_value = SecureRandom.hex + ::Gitlab::Workhorse.ensure_and_notify(runner_queue_key, new_value, + expire: RUNNER_QUEUE_EXPIRY_TIME, overwrite: false) end end diff --git a/changelogs/unreleased/use-redis-channel-to-post-runner-notifcations.yml b/changelogs/unreleased/use-redis-channel-to-post-runner-notifcations.yml new file mode 100644 index 00000000000..ff5a58f6232 --- /dev/null +++ b/changelogs/unreleased/use-redis-channel-to-post-runner-notifcations.yml @@ -0,0 +1,4 @@ +--- +title: Use redis channel to post notifications +merge_request: +author: diff --git a/lib/gitlab/workhorse.rb b/lib/gitlab/workhorse.rb index 3ff9f9eb5e7..ca4eba48a8b 100644 --- a/lib/gitlab/workhorse.rb +++ b/lib/gitlab/workhorse.rb @@ -8,6 +8,7 @@ module Gitlab VERSION_FILE = 'GITLAB_WORKHORSE_VERSION'.freeze INTERNAL_API_CONTENT_TYPE = 'application/vnd.gitlab-workhorse+json'.freeze INTERNAL_API_REQUEST_HEADER = 'Gitlab-Workhorse-Api-Request'.freeze + NOTIFICATION_CHANNEL = 'workhorse:notifications'.freeze # Supposedly the effective key size for HMAC-SHA256 is 256 bits, i.e. 32 # bytes https://tools.ietf.org/html/rfc4868#section-2.6 @@ -154,6 +155,19 @@ module Gitlab Rails.root.join('.gitlab_workhorse_secret') end + def ensure_and_notify(key, value, expire: nil, overwrite: true) + Gitlab::Redis.with do |redis| + result = redis.set(key, value, ex: expire, nx: !overwrite) + if result + payload = "#{key}=#{value}" + redis.publish(RUNNER_NOTIFICATION_CHANNEL, payload) + value + else + redis.get(key) + end + end + end + protected def encode(hash) |