| import logging |
| import random |
| |
| def disable_retry_wait_for_test(): |
| """Disables retry waiting. Use only with tests.""" |
| disable_retry_wait_for_test.on = True |
| disable_retry_wait_for_test.on = False |
| |
| def retry_delay(attempt, min_delay=5, base=30): |
| """Get seconds to delay before attempting a retry. |
| |
| Uses exponential backoff to determine the delay time. Setting min_delay |
| to 5s since lsremote and bandwidth refills every 5s. |
| |
| Args: |
| attempt: current attempt number. |
| min_delay: left boundary of delay time to randomly choose from. |
| base: delay duration we are doubling on each attempt. |
| |
| Returns: |
| The number of seconds to wait before retrying. |
| """ |
| assert min_delay <= base |
| exponential_delay = base * 2**attempt |
| logging.info('Picking a random delay between ' |
| '%s and %s seconds', min_delay, exponential_delay) |
| if disable_retry_wait_for_test.on: |
| return 0 |
| return random.randint(min_delay, exponential_delay) |