Module: SwitchmanInstJobs::Delayed::Backend::Base::ClassMethods

Defined in:
lib/switchman_inst_jobs/delayed/backend/base.rb

Instance Method Summary collapse

Instance Method Details

#configured_shard_idsObject


44
45
46
# File 'lib/switchman_inst_jobs/delayed/backend/base.rb', line 44

def configured_shard_ids
  ::SwitchmanInstJobs::Delayed::Settings.configured_shard_ids
end

#enqueue(object, **options) ⇒ Object


15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/switchman_inst_jobs/delayed/backend/base.rb', line 15

def enqueue(object, **options)
  ::Switchman::Shard.periodic_clear_shard_cache
  current_shard = ::Switchman::Shard.current
  enqueue_options = options.merge(
    current_shard: current_shard
  )
  enqueue_job = -> { ::GuardRail.activate(:primary) { super(object, **enqueue_options) } }

  # Another dj shard must be currently manually activated, so just use that
  # In general this will only happen in unusual circumstances like tests
  # also if migrations are running, always use the current shard's job shard
  if ::ActiveRecord::Migration.open_migrations.zero? &&
     current_shard.delayed_jobs_shard !=
     ::Switchman::Shard.current(::Delayed::Backend::ActiveRecord::AbstractJob)
    enqueue_job.call
  else
    current_shard = ::Switchman::Shard.lookup(current_shard.id)
    current_job_shard = current_shard.delayed_jobs_shard

    if (options[:singleton] || options[:strand]) && current_shard.block_stranded
      enqueue_options[:next_in_strand] = false
    end

    current_job_shard.activate(::Delayed::Backend::ActiveRecord::AbstractJob) do
      enqueue_job.call
    end
  end
end

#processes_locked_locallyObject


48
49
50
51
52
53
54
55
56
57
58
# File 'lib/switchman_inst_jobs/delayed/backend/base.rb', line 48

def processes_locked_locally
  shard_ids = configured_shard_ids
  if shard_ids.any?
    shards = shard_ids.map { |shard_id| ::Delayed::Worker.shard(shard_id) }
    ::Switchman::Shard.with_each_shard(shards, [::Delayed::Backend::ActiveRecord::AbstractJob]) do
      super
    end
  else
    super
  end
end