48 lines
986 B
Ruby
48 lines
986 B
Ruby
# frozen_string_literal: true
|
|
module Gitlab
|
|
module PhabricatorImport
|
|
class WorkerState
|
|
def initialize(project_id)
|
|
@project_id = project_id
|
|
end
|
|
|
|
def add_job
|
|
redis.with do |r|
|
|
r.pipelined do |pipe|
|
|
pipe.incr(all_jobs_key)
|
|
pipe.expire(all_jobs_key, timeout)
|
|
end
|
|
end
|
|
end
|
|
|
|
def remove_job
|
|
redis.with do |r|
|
|
r.decr(all_jobs_key)
|
|
end
|
|
end
|
|
|
|
def running_count
|
|
redis.with { |r| r.get(all_jobs_key) }.to_i
|
|
end
|
|
|
|
private
|
|
|
|
attr_reader :project_id
|
|
|
|
def redis
|
|
Gitlab::Redis::SharedState
|
|
end
|
|
|
|
def all_jobs_key
|
|
@all_jobs_key ||= "phabricator-import/jobs/project-#{project_id}/job-count"
|
|
end
|
|
|
|
def timeout
|
|
# Make sure we get rid of all the information after a job is marked
|
|
# as failed/succeeded
|
|
StuckImportJobsWorker::IMPORT_JOBS_EXPIRATION
|
|
end
|
|
end
|
|
end
|
|
end
|