Class: Lambda::MicroVMs::Waiter
- Inherits:
-
Object
- Object
- Lambda::MicroVMs::Waiter
- 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
-
#initialize(delay: DEFAULT_DELAY, timeout: DEFAULT_TIMEOUT, sleeper: Kernel) ⇒ Waiter
constructor
A new instance of Waiter.
- #wait(message: 'condition') ⇒ Object
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
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 #{}" end |