diff options
author | Kamil Trzciński <ayufan@ayufan.eu> | 2019-08-20 18:25:04 +0300 |
---|---|---|
committer | Kamil Trzciński <ayufan@ayufan.eu> | 2019-08-21 13:05:30 +0300 |
commit | c2cbfc5c4afbe8385659f97769db8450284639cf (patch) | |
tree | 430ac243924b4b3fb4e389a9c763ea6bd484c2f0 /lib/gitlab/sidekiq_middleware | |
parent | 75e2302d0126c4bc8ea215ffb4e72612d44e73bb (diff) |
Rework `Sidekiq::JobsThreads` into `Monitor`
This makes:
- very shallow `Middleware::Monitor` to only request tracking
of sidekiq jobs,
- `SidekiqStatus::Monitor` to be responsible to maintain persistent
connection to receive messages,
- `SidekiqStatus::Monitor` to always use structured logging
and instance variables
Diffstat (limited to 'lib/gitlab/sidekiq_middleware')
-rw-r--r-- | lib/gitlab/sidekiq_middleware/jobs_threads.rb | 49 | ||||
-rw-r--r-- | lib/gitlab/sidekiq_middleware/monitor.rb | 13 |
2 files changed, 13 insertions, 49 deletions
diff --git a/lib/gitlab/sidekiq_middleware/jobs_threads.rb b/lib/gitlab/sidekiq_middleware/jobs_threads.rb deleted file mode 100644 index d0603bcee2d..00000000000 --- a/lib/gitlab/sidekiq_middleware/jobs_threads.rb +++ /dev/null @@ -1,49 +0,0 @@ -# frozen_string_literal: true - -module Gitlab - module SidekiqMiddleware - class JobsThreads - @@jobs = {} # rubocop:disable Style/ClassVars - MUTEX = Mutex.new - - def call(worker, job, queue) - jid = job['jid'] - - MUTEX.synchronize do - @@jobs[jid] = Thread.current - end - - return if self.class.cancelled?(jid) - - yield - ensure - MUTEX.synchronize do - @@jobs.delete(jid) - end - end - - def self.interrupt(jid) - MUTEX.synchronize do - thread = @@jobs[jid] - break unless thread - - thread.raise(Interrupt) - thread - end - end - - def self.cancelled?(jid) - Sidekiq.redis {|c| c.exists("cancelled-#{jid}") } - end - - def self.mark_job_as_cancelled(jid) - Sidekiq.redis {|c| c.setex("cancelled-#{jid}", 86400, 1) } - "Marked job as cancelled(if Sidekiq retry within 24 hours, the job will be skipped as `processed`). Jid: #{jid}" - end - - def self.jobs - @@jobs - end - end - end -end diff --git a/lib/gitlab/sidekiq_middleware/monitor.rb b/lib/gitlab/sidekiq_middleware/monitor.rb new file mode 100644 index 00000000000..2d0e5a6d635 --- /dev/null +++ b/lib/gitlab/sidekiq_middleware/monitor.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +module Gitlab + module SidekiqMiddleware + class Monitor + def call(worker, job, queue) + Gitlab::SidekiqMonitor.instance.within_job(job['jid'], queue) do + yield + end + end + end + end +end |