Class: Lambda::MicroVMs::Waiter

Inherits:
Object
  • Object
show all
Defined in:
lib/lambda/microvms/waiter.rb

Overview

Polls a resource until a desired lifecycle state is reached.

Constant Summary collapse

DEFAULT_DELAY =
1.0
DEFAULT_TIMEOUT =
60.0

Instance Method Summary collapse

Constructor Details

#initialize(delay: DEFAULT_DELAY, timeout: DEFAULT_TIMEOUT, sleeper: Kernel) ⇒ Waiter

Returns a new instance of Waiter.



10
11
12
13
14
# File 'lib/lambda/microvms/waiter.rb', line 10

def initialize(delay: DEFAULT_DELAY, timeout: DEFAULT_TIMEOUT, sleeper: Kernel)
  @delay = delay
  @timeout = timeout
  @sleeper = sleeper
end

Instance Method Details

#wait(message: 'condition') ⇒ Object

Raises:



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/lambda/microvms/waiter.rb', line 16

def wait(message: 'condition')
  deadline = Process.clock_gettime(Process::CLOCK_MONOTONIC) + @timeout

  loop do
    value = yield
    return value if value

    now = Process.clock_gettime(Process::CLOCK_MONOTONIC)
    break if now >= deadline

    @sleeper.sleep([@delay, deadline - now].min)
  end

  raise WaitTimeoutError, "timed out waiting for #{message}"
end