|
10 | 10 |
|
11 | 11 | logger, config, partitions = common.get_common('resume')
|
12 | 12 |
|
| 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 | + |
13 | 30 | # Retrieve the list of hosts to resume
|
14 | 31 | try:
|
15 | 32 | hostlist = sys.argv[1]
|
|
87 | 104 | for instance in response_fleet['Instances']:
|
88 | 105 |
|
89 | 106 | # 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)) |
107 | 111 | continue
|
108 | 112 |
|
109 | 113 | # For each instance that was successfully launched
|
|
135 | 139 | 'Resources': [instance_id],
|
136 | 140 | 'Tags': tags
|
137 | 141 | }
|
138 |
| - client.create_tags(**request_tags) |
| 142 | + retry(client.create_tags, **request_tags) |
139 | 143 | logger.debug('Tagged node %s: %s' %(node_name, json.dumps(request_tags, indent=4)))
|
140 | 144 | except Exception as e:
|
141 | 145 | logger.error('Failed to tag node %s - %s' %(node_name, e))
|
|
0 commit comments