arvados :: retry :: RetryLoop :: Class RetryLoop
[hide private]
[frames] | no frames]

Class RetryLoop

source code

builtins.object --+
                  |
                 RetryLoop

Coordinate limited retries of code.

RetryLoop coordinates a loop that runs until it records a
successful result or tries too many times, whichever comes first.
Typical use looks like:

    loop = RetryLoop(num_retries=2)
    for tries_left in loop:
        try:
            result = do_something()
        except TemporaryError as error:
            log("error: {} ({} tries left)".format(error, tries_left))
        else:
            loop.save_result(result)
    if loop.success():
        return loop.last_result()

Instance Methods [hide private]
 
__init__(self, num_retries, success_check=lambda r: True, backoff_start=0, backoff_growth=2, save_results=1, max_wait=60)
Construct a new RetryLoop.
source code
 
__iter__(self) source code
 
running(self) source code
 
__next__(self) source code
 
save_result(self, result)
Record a loop result.
source code
 
success(self)
Return the loop's end state.
source code
 
last_result(self)
Return the most recent result the loop recorded.
source code
 
attempts(self)
Return the number of attempts that have been made.
source code
 
attempts_str(self)
Human-readable attempts(): 'N attempts' or '1 attempt'
source code
Method Details [hide private]

__init__(self, num_retries, success_check=lambda r: True, backoff_start=0, backoff_growth=2, save_results=1, max_wait=60)
(Constructor)

source code 
Construct a new RetryLoop.

Arguments:
* num_retries: The maximum number of times to retry the loop if it
  doesn't succeed.  This means the loop could run at most 1+N times.
* success_check: This is a function that will be called each
  time the loop saves a result.  The function should return
  True if the result indicates loop success, False if it
  represents a permanent failure state, and None if the loop
  should continue.  If no function is provided, the loop will
  end as soon as it records any result.
* backoff_start: The number of seconds that must pass before the
  loop's second iteration.  Default 0, which disables all waiting.
* backoff_growth: The wait time multiplier after each iteration.
  Default 2 (i.e., double the wait time each time).
* save_results: Specify a number to save the last N results
  that the loop recorded.  These records are available through
  the results attribute, oldest first.  Default 1.
* max_wait: Maximum number of seconds to wait between retries.

save_result(self, result)

source code 

Record a loop result.

Save the given result, and end the loop if it indicates success or permanent failure. See __init__'s documentation about success_check to learn how to make that indication.

success(self)

source code 

Return the loop's end state.

Returns True if the loop obtained a successful result, False if it encountered permanent failure, or else None.

attempts(self)

source code 

Return the number of attempts that have been made.

Includes successes and failures.