Class: Legion::Extensions::Mesh::Helpers::PendingRequests

Inherits:
Object
  • Object
show all
Defined in:
lib/legion/extensions/mesh/helpers/pending_requests.rb

Instance Method Summary collapse

Constructor Details

#initialize(default_ttl: 5) ⇒ PendingRequests

Returns a new instance of PendingRequests.



8
9
10
11
12
# File 'lib/legion/extensions/mesh/helpers/pending_requests.rb', line 8

def initialize(default_ttl: 5)
  @default_ttl = default_ttl
  @requests = {}
  @mutex = Mutex.new
end

Instance Method Details

#expireObject



40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/legion/extensions/mesh/helpers/pending_requests.rb', line 40

def expire
  now = Time.now
  expired = []
  @mutex.synchronize do
    @requests.each do |id, entry|
      next unless now - entry[:registered_at] >= entry[:ttl]

      expired << id
    end
    expired.each { |id| @requests.delete(id) }
  end
  expired
end

#pending?(correlation_id) ⇒ Boolean

Returns:

  • (Boolean)


32
33
34
# File 'lib/legion/extensions/mesh/helpers/pending_requests.rb', line 32

def pending?(correlation_id)
  @mutex.synchronize { @requests.key?(correlation_id) }
end

#pending_countObject



36
37
38
# File 'lib/legion/extensions/mesh/helpers/pending_requests.rb', line 36

def pending_count
  @mutex.synchronize { @requests.size }
end

#register(correlation_id:, callback:, ttl: nil) ⇒ Object



14
15
16
17
18
19
20
21
22
# File 'lib/legion/extensions/mesh/helpers/pending_requests.rb', line 14

def register(correlation_id:, callback:, ttl: nil)
  @mutex.synchronize do
    @requests[correlation_id] = {
      callback:      callback,
      registered_at: Time.now,
      ttl:           ttl || @default_ttl
    }
  end
end

#resolve(correlation_id:, result:) ⇒ Object



24
25
26
27
28
29
30
# File 'lib/legion/extensions/mesh/helpers/pending_requests.rb', line 24

def resolve(correlation_id:, result:)
  entry = @mutex.synchronize { @requests.delete(correlation_id) }
  return false unless entry

  entry[:callback]&.call(result)
  true
end