summaryrefslogtreecommitdiff
path: root/db/post_migrate/20200930144340_set_job_waiter_ttl.rb
diff options
context:
space:
mode:
Diffstat (limited to 'db/post_migrate/20200930144340_set_job_waiter_ttl.rb')
-rw-r--r--db/post_migrate/20200930144340_set_job_waiter_ttl.rb31
1 files changed, 31 insertions, 0 deletions
diff --git a/db/post_migrate/20200930144340_set_job_waiter_ttl.rb b/db/post_migrate/20200930144340_set_job_waiter_ttl.rb
new file mode 100644
index 00000000000..b15faa61dea
--- /dev/null
+++ b/db/post_migrate/20200930144340_set_job_waiter_ttl.rb
@@ -0,0 +1,31 @@
+# frozen_string_literal: true
+
+class SetJobWaiterTtl < ActiveRecord::Migration[6.0]
+ DOWNTIME = false
+
+ SCRIPT = <<~LUA.freeze
+ if redis.call("ttl", KEYS[1]) < 0 then
+ redis.call("expire", KEYS[1], 21600)
+ end
+ LUA
+
+ def up
+ Gitlab::Redis::SharedState.with do |redis|
+ cursor_init = '0'
+ cursor = cursor_init
+
+ loop do
+ cursor, keys = redis.scan(cursor, match: 'gitlab:job_waiter:*')
+
+ redis.pipelined do |redis|
+ keys.each { |k| redis.eval(SCRIPT, keys: [k]) }
+ end
+
+ break if cursor == cursor_init
+ end
+ end
+ end
+
+ def down
+ end
+end