Doing exponential backoff on route53 upon AWS throttling
This commit is contained in:
parent
2e94affde6
commit
7c5b4b142a
1 changed files with 16 additions and 1 deletions
|
@ -345,6 +345,21 @@ def commit(changes, retry_interval, wait, wait_timeout):
|
|||
raise TimeoutError()
|
||||
return result
|
||||
|
||||
# Shamelessly copied over from https://git.io/vgmDG
|
||||
IGNORE_CODE = 'Throttling'
|
||||
MAX_RETRIES=5
|
||||
def invoke_with_throttling_retries(function_ref, *argv):
|
||||
retries=0
|
||||
while True:
|
||||
try:
|
||||
retval=function_ref(*argv)
|
||||
return retval
|
||||
except boto.exception.BotoServerError, e:
|
||||
if e.code != IGNORE_CODE or retries==MAX_RETRIES:
|
||||
raise e
|
||||
time.sleep(5 * (2**retries))
|
||||
retries += 1
|
||||
|
||||
def main():
|
||||
argument_spec = ec2_argument_spec()
|
||||
argument_spec.update(dict(
|
||||
|
@ -530,7 +545,7 @@ def main():
|
|||
changes.add_change_record(command, wanted_rset)
|
||||
|
||||
try:
|
||||
result = commit(changes, retry_interval_in, wait_in, wait_timeout_in)
|
||||
result = invoke_with_throttling_retries(commit, changes, retry_interval_in, wait_in, wait_timeout_in)
|
||||
except boto.route53.exception.DNSServerError, e:
|
||||
txt = e.body.split("<Message>")[1]
|
||||
txt = txt.split("</Message>")[0]
|
||||
|
|
Loading…
Reference in a new issue