Class: Sidekiq::Antidote::Repository

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/sidekiq/antidote/repository.rb

Overview

Inhibitors repository

Constant Summary collapse

REDIS_KEY =
"sidekiq-antidote"

Instance Method Summary collapse

Instance Method Details

#add(treatment:, class_qualifier:) ⇒ Inhibitor

Parameters:

  • treatment ("skip", "kill")
  • class_qualifier (#to_s)

Returns:

Raises:

  • (RuntimeError)

    when can’t generate new inhibitor ID



40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/sidekiq/antidote/repository.rb', line 40

def add(treatment:, class_qualifier:)
  3.times do
    inhibitor = Sidekiq::Antidote::Inhibitor.new(
      id:              SecureRandom.hex(8),
      treatment:       treatment,
      class_qualifier: class_qualifier
    )

    return inhibitor if redis("HSETNX", REDIS_KEY, *serialize(inhibitor)).to_i.positive?
  end

  raise "can't generate available ID"
end

#delete(*ids) ⇒ nil

Parameters:

  • ids (Array<String>)

Returns:

  • (nil)


56
57
58
59
# File 'lib/sidekiq/antidote/repository.rb', line 56

def delete(*ids)
  redis("HDEL", REDIS_KEY, *ids) unless ids.empty?
  nil
end

#eachEnumerator<Inhibitor> #each {|inhibitor| ... } ⇒ self

Overloads:

  • #eachEnumerator<Inhibitor>

    Returns:

  • #each {|inhibitor| ... } ⇒ self

    For a block { |inhibitor| … }

    Yield Parameters:

    Returns:

    • (self)


20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/sidekiq/antidote/repository.rb', line 20

def each
  return to_enum __method__ unless block_given?

  broken_ids = []

  redis("HGETALL", REDIS_KEY).each do |id, payload|
    inhibitor = deserialize(id, payload)
    next yield inhibitor if inhibitor

    broken_ids << id
  end

  delete(*broken_ids)
  self
end