Skip to content

Commit 9608262

Browse files
Merge pull request #1604 from zhaoqin-github/connection-aborted-3.0.11
Handles ConnectionAborted errors (3.0.11)
2 parents 70e1ec1 + 716e3d4 commit 9608262

2 files changed

Lines changed: 81 additions & 15 deletions

File tree

f5/bigip/resource.py

Lines changed: 80 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -400,7 +400,19 @@ def _modify(self, **patch):
400400
raise AttemptedMutationOfReadOnly(msg)
401401

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

406418
def modify(self, **patch):
@@ -574,7 +586,7 @@ def _update(self, **kwargs):
574586
#
575587
# @see https://github.com/F5Networks/f5-ansible/issues/317
576588
# @see https://github.com/requests/requests/issues/2364
577-
for _ in range(0, 30):
589+
for i in range(0, 30):
578590
try:
579591
response = session.put(update_uri, json=data_dict, **requests_params)
580592
self._meta_data = temp_meta
@@ -586,7 +598,7 @@ def _update(self, **kwargs):
586598
self._local_update(response.json())
587599
raise
588600
except ConnectionError as ex:
589-
if 'Connection aborted' in str(ex):
601+
if 'Connection aborted' in str(ex) and i < 29:
590602
time.sleep(1)
591603
continue
592604
else:
@@ -630,7 +642,18 @@ def _refresh(self, **kwargs):
630642
else:
631643
uri = self._meta_data['uri']
632644

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

636659
def refresh(self, **kwargs):
@@ -967,7 +990,17 @@ def _create(self, **kwargs):
967990
kwargs = self._prepare_request_json(kwargs)
968991

969992
# Invoke the REST operation on the device.
970-
response = session.post(_create_uri, json=kwargs, **requests_params)
993+
# Handles ConnectionAborted errors
994+
for i in range(0, 30):
995+
try:
996+
response = session.post(_create_uri, json=kwargs, **requests_params)
997+
break
998+
except ConnectionError as ex:
999+
if 'Connection aborted' in str(ex) and i < 29:
1000+
time.sleep(1)
1001+
continue
1002+
else:
1003+
raise
9711004

9721005
# Make new instance of self
9731006
result = self._produce_instance(response)
@@ -1036,7 +1069,19 @@ def _load(self, **kwargs):
10361069
for key1, key2 in self._meta_data['reduction_forcing_pairs']:
10371070
kwargs = self._reduce_boolean_pair(kwargs, key1, key2)
10381071
kwargs = self._check_for_python_keywords(kwargs)
1039-
response = refresh_session.get(base_uri, **kwargs)
1072+
1073+
# Handles ConnectionAborted errors
1074+
for i in range(0, 30):
1075+
try:
1076+
response = refresh_session.get(base_uri, **kwargs)
1077+
break
1078+
except ConnectionError as ex:
1079+
if 'Connection aborted' in str(ex) and i < 29:
1080+
time.sleep(1)
1081+
continue
1082+
else:
1083+
raise
1084+
10401085
# Make new instance of self
10411086
return self._produce_instance(response)
10421087

@@ -1076,7 +1121,18 @@ def _delete(self, **kwargs):
10761121
if not force:
10771122
self._check_generation()
10781123

1079-
response = session.delete(delete_uri, **requests_params)
1124+
# Handles ConnectionAborted errors
1125+
for i in range(0, 30):
1126+
try:
1127+
response = session.delete(delete_uri, **requests_params)
1128+
break
1129+
except ConnectionError as ex:
1130+
if 'Connection aborted' in str(ex) and i < 29:
1131+
time.sleep(1)
1132+
continue
1133+
else:
1134+
raise
1135+
10801136
if response.status_code == 200:
10811137
self.__dict__ = {'deleted': True}
10821138

@@ -1138,13 +1194,23 @@ def _exists(self, **kwargs):
11381194
base_uri = self._meta_data['container']._meta_data['uri']
11391195
kwargs.update(requests_params)
11401196

1141-
try:
1142-
session.get(base_uri, **kwargs)
1143-
except HTTPError as err:
1144-
if err.response.status_code == 404:
1145-
return False
1146-
else:
1147-
raise
1197+
# Handles ConnectionAborted errors
1198+
for i in range(0, 30):
1199+
try:
1200+
session.get(base_uri, **kwargs)
1201+
break
1202+
except HTTPError as err:
1203+
if err.response.status_code == 404:
1204+
return False
1205+
else:
1206+
raise
1207+
except ConnectionError as ex:
1208+
if 'Connection aborted' in str(ex) and i < 29:
1209+
time.sleep(1)
1210+
continue
1211+
else:
1212+
raise
1213+
11481214
return True
11491215

11501216

f5/bigip/tm/ltm/test/functional/test_nat.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -332,7 +332,7 @@ def test_delete(self, request, mgmt_root, NAT):
332332
setup_loadable_nat_test(request, mgmt_root, NAT)
333333
n1 = mgmt_root.tm.ltm.nats.nat.load(name='nat1', partition='Common')
334334
n1.delete()
335-
del(n1)
335+
del n1
336336
with pytest.raises(HTTPError) as err:
337337
mgmt_root.tm.ltm.nats.nat.load(name='nat1', partition='Common')
338338
assert err.response.status_code == 404

0 commit comments

Comments
 (0)