Sha256: e3fb24b851998570e8c7e84becef9f33009bea5b538fa94ae621207f9b03fc97

Contents?: true

Size: 657 Bytes

Versions: 24

Compression:

Stored size: 657 Bytes

Contents

module Shipit
  class BackgroundJob
    module Unique
      extend ActiveSupport::Concern

      DEFAULT_TIMEOUT = 10

      included do
        around_perform { |job, block| job.acquire_lock(&block) }
        cattr_accessor :lock_timeout
      end

      def acquire_lock(&block)
        mutex = Redis::Lock.new(
          lock_key(*arguments),
          Shipit.redis,
          expiration: self.class.timeout || DEFAULT_TIMEOUT,
          timeout: self.class.lock_timeout || 0,
        )
        mutex.lock(&block)
      end

      def lock_key(*args)
        ActiveJob::Arguments.serialize([self.class.name] + args).join('-')
      end
    end
  end
end

Version data entries

24 entries across 24 versions & 1 rubygems

Version Path
shipit-engine-0.15.0 app/jobs/shipit/background_job/unique.rb
shipit-engine-0.14.0 app/jobs/shipit/background_job/unique.rb
shipit-engine-0.13.0 app/jobs/shipit/background_job/unique.rb
shipit-engine-0.12.1 app/jobs/shipit/background_job/unique.rb
shipit-engine-0.12.0 app/jobs/shipit/background_job/unique.rb
shipit-engine-0.11.0 app/jobs/shipit/background_job/unique.rb
shipit-engine-0.10.0 app/jobs/shipit/background_job/unique.rb
shipit-engine-0.9.0 app/jobs/shipit/background_job/unique.rb
shipit-engine-0.8.9 app/jobs/shipit/background_job/unique.rb
shipit-engine-0.8.8 app/jobs/shipit/background_job/unique.rb
shipit-engine-0.8.7 app/jobs/shipit/background_job/unique.rb
shipit-engine-0.8.6 app/jobs/shipit/background_job/unique.rb
shipit-engine-0.8.5 app/jobs/shipit/background_job/unique.rb
shipit-engine-0.8.4 app/jobs/shipit/background_job/unique.rb
shipit-engine-0.8.3 app/jobs/shipit/background_job/unique.rb
shipit-engine-0.8.2 app/jobs/shipit/background_job/unique.rb
shipit-engine-0.8.1 app/jobs/shipit/background_job/unique.rb
shipit-engine-0.8.0 app/jobs/shipit/background_job/unique.rb
shipit-engine-0.7.0 app/jobs/shipit/background_job/unique.rb
shipit-engine-0.6.4 app/jobs/shipit/background_job/unique.rb