Module: Vx::ContainerConnector::Retriable
- Included in:
- Docker
- Defined in:
- lib/vx/container_connector/mixin/retriable.rb
Instance Method Summary collapse
-
#with_retries(*args, &block) ⇒ Object
This will catch any exception and retry twice (three tries total): with_retries { … }.
Instance Method Details
#with_retries(*args, &block) ⇒ Object
This will catch any exception and retry twice (three tries total):
with_retries { ... }
This will catch any exception and retry four times (five tries total):
with_retries(:limit => 5) { ... }
This will catch a specific exception and retry once (two tries total):
with_retries(Some::Error, :limit => 2) { ... }
You can also sleep inbetween tries. This is helpful if you’re hoping that some external service recovers from its issues.
with_retries(Service::Error, :sleep => 1) { ... }
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/vx/container_connector/mixin/retriable.rb', line 17 def with_retries(*args, &block) = args.last.is_a?(Hash) ? args.pop : {} exceptions = args [:limit] ||= 3 [:sleep] ||= 0 exceptions = [Exception] if exceptions.empty? retried = 0 begin yield rescue *exceptions => e if retried + 1 < [:limit] retried += 1 sleep [:sleep] retry else raise e end end end |