Skip to content

Commit 31b3b72

Browse files
author
Nicolas Malaval
committed
Better handle eventual consistency errors
1 parent 463269f commit 31b3b72

File tree

1 file changed

+22
-18
lines changed

1 file changed

+22
-18
lines changed

resume.py

+22-18
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,23 @@
1010

1111
logger, config, partitions = common.get_common('resume')
1212

13+
14+
# Retry in case the request failed because of eventual consistency
15+
def retry(func, *args, **kwargs):
16+
nb_retry = 1
17+
MAX_RETRIES = 3
18+
while True:
19+
try:
20+
return func(*args, **kwargs)
21+
except Exception as e:
22+
if nb_retry <= MAX_RETRIES:
23+
logger.debug('Failed %s %d time(s): %s', func.__name__, nb_retry, e)
24+
nb_retry += 1
25+
time.sleep(nb_retry)
26+
else:
27+
raise e
28+
29+
1330
# Retrieve the list of hosts to resume
1431
try:
1532
hostlist = sys.argv[1]
@@ -87,23 +104,10 @@
87104
for instance in response_fleet['Instances']:
88105

89106
# Retrieve additional instance details
90-
nb_retry = 1
91-
max_retries = 3
92-
e_msg = None
93-
while True:
94-
try:
95-
response_describe = client.describe_instances(InstanceIds=instance['InstanceIds'])
96-
break
97-
except Exception as e:
98-
# Retry if an error is returned because of eventual consistency
99-
if nb_retry <= max_retries:
100-
nb_retry += 1
101-
time.sleep(nb_retry)
102-
else:
103-
e_msg = str(e)
104-
break
105-
if e_msg:
106-
logger.error('Failed to describe instances %s: %s' %(', '.join(instance['InstanceIds']), e_msg))
107+
try:
108+
response_describe = retry(client.describe_instances, InstanceIds=instance['InstanceIds'])
109+
except Exception as e:
110+
logger.error('Failed to describe instances %s: %s' %(', '.join(instance['InstanceIds']), e))
107111
continue
108112

109113
# For each instance that was successfully launched
@@ -135,7 +139,7 @@
135139
'Resources': [instance_id],
136140
'Tags': tags
137141
}
138-
client.create_tags(**request_tags)
142+
retry(client.create_tags, **request_tags)
139143
logger.debug('Tagged node %s: %s' %(node_name, json.dumps(request_tags, indent=4)))
140144
except Exception as e:
141145
logger.error('Failed to tag node %s - %s' %(node_name, e))

0 commit comments

Comments
 (0)