Skip to content

Commit ee4a00a

Browse files
Handles ConnectionAborted errors
1 parent af71f17 commit ee4a00a

1 file changed

Lines changed: 91 additions & 15 deletions

File tree

f5/bigip/resource.py

Lines changed: 91 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -401,7 +401,19 @@ def _modify(self, **patch):
401401
raise AttemptedMutationOfReadOnly(msg)
402402

403403
patch = self._prepare_request_json(patch)
404-
response = session.patch(patch_uri, json=patch, **requests_params)
404+
405+
# Handles ConnectionAborted errors
406+
for i in range(0, 30):
407+
try:
408+
response = session.patch(patch_uri, json=patch, **requests_params)
409+
break
410+
except ConnectionError as ex:
411+
if 'Connection aborted' in str(ex) and i < 29:
412+
time.sleep(1)
413+
continue
414+
else:
415+
raise
416+
405417
self._local_update(response.json())
406418

407419
def modify(self, **patch):
@@ -575,7 +587,7 @@ def _update(self, **kwargs):
575587
#
576588
# @see https://github.com/F5Networks/f5-ansible/issues/317
577589
# @see https://github.com/requests/requests/issues/2364
578-
for _ in range(0, 30):
590+
for i in range(0, 30):
579591
try:
580592
response = session.put(update_uri, json=data_dict, **requests_params)
581593
self._meta_data = temp_meta
@@ -587,7 +599,7 @@ def _update(self, **kwargs):
587599
self._local_update(response.json())
588600
raise
589601
except ConnectionError as ex:
590-
if 'Connection aborted' in str(ex):
602+
if 'Connection aborted' in str(ex) and i < 29:
591603
time.sleep(1)
592604
continue
593605
else:
@@ -631,7 +643,18 @@ def _refresh(self, **kwargs):
631643
else:
632644
uri = self._meta_data['uri']
633645

634-
response = refresh_session.get(uri, **requests_params)
646+
# Handles ConnectionAborted errors
647+
for i in range(0, 30):
648+
try:
649+
response = refresh_session.get(uri, **requests_params)
650+
break
651+
except ConnectionError as ex:
652+
if 'Connection aborted' in str(ex) and i < 29:
653+
time.sleep(1)
654+
continue
655+
else:
656+
raise
657+
635658
self._local_update(response.json())
636659

637660
def refresh(self, **kwargs):
@@ -831,7 +854,17 @@ def _delete_collection(self, **kwargs):
831854
delete_uri = self._meta_data['uri']
832855
session = self._meta_data['bigip']._meta_data['icr_session']
833856

834-
session.delete(delete_uri, **requests_params)
857+
# Handles ConnectionAborted errors
858+
for i in range(0, 30):
859+
try:
860+
session.delete(delete_uri, **requests_params)
861+
break
862+
except ConnectionError as ex:
863+
if 'Connection aborted' in str(ex) and i < 29:
864+
time.sleep(1)
865+
continue
866+
else:
867+
raise
835868

836869
def delete_collection(self, **kwargs):
837870
"""One can not simply delete a collection.
@@ -1012,7 +1045,17 @@ def _create(self, **kwargs):
10121045
kwargs = self._prepare_request_json(kwargs)
10131046

10141047
# Invoke the REST operation on the device.
1015-
response = session.post(_create_uri, json=kwargs, **requests_params)
1048+
# Handles ConnectionAborted errors
1049+
for i in range(0, 30):
1050+
try:
1051+
response = session.post(_create_uri, json=kwargs, **requests_params)
1052+
break
1053+
except ConnectionError as ex:
1054+
if 'Connection aborted' in str(ex) and i < 29:
1055+
time.sleep(1)
1056+
continue
1057+
else:
1058+
raise
10161059

10171060
# Make new instance of self
10181061
result = self._produce_instance(response)
@@ -1081,7 +1124,19 @@ def _load(self, **kwargs):
10811124
for key1, key2 in self._meta_data['reduction_forcing_pairs']:
10821125
kwargs = self._reduce_boolean_pair(kwargs, key1, key2)
10831126
kwargs = self._check_for_python_keywords(kwargs)
1084-
response = refresh_session.get(base_uri, **kwargs)
1127+
1128+
# Handles ConnectionAborted errors
1129+
for i in range(0, 30):
1130+
try:
1131+
response = refresh_session.get(base_uri, **kwargs)
1132+
break
1133+
except ConnectionError as ex:
1134+
if 'Connection aborted' in str(ex) and i < 29:
1135+
time.sleep(1)
1136+
continue
1137+
else:
1138+
raise
1139+
10851140
# Make new instance of self
10861141
return self._produce_instance(response)
10871142

@@ -1121,7 +1176,18 @@ def _delete(self, **kwargs):
11211176
if not force:
11221177
self._check_generation()
11231178

1124-
response = session.delete(delete_uri, **requests_params)
1179+
# Handles ConnectionAborted errors
1180+
for i in range(0, 30):
1181+
try:
1182+
response = session.delete(delete_uri, **requests_params)
1183+
break
1184+
except ConnectionError as ex:
1185+
if 'Connection aborted' in str(ex) and i < 29:
1186+
time.sleep(1)
1187+
continue
1188+
else:
1189+
raise
1190+
11251191
if response.status_code == 200:
11261192
self.__dict__ = {'deleted': True}
11271193

@@ -1183,13 +1249,23 @@ def _exists(self, **kwargs):
11831249
base_uri = self._meta_data['container']._meta_data['uri']
11841250
kwargs.update(requests_params)
11851251

1186-
try:
1187-
session.get(base_uri, **kwargs)
1188-
except HTTPError as err:
1189-
if err.response.status_code == 404:
1190-
return False
1191-
else:
1192-
raise
1252+
# Handles ConnectionAborted errors
1253+
for i in range(0, 30):
1254+
try:
1255+
session.get(base_uri, **kwargs)
1256+
break
1257+
except HTTPError as err:
1258+
if err.response.status_code == 404:
1259+
return False
1260+
else:
1261+
raise
1262+
except ConnectionError as ex:
1263+
if 'Connection aborted' in str(ex) and i < 29:
1264+
time.sleep(1)
1265+
continue
1266+
else:
1267+
raise
1268+
11931269
return True
11941270

11951271

0 commit comments

Comments
 (0)