From 1fddd8813b4cbef7e1b076ed244e61ee24b93a7c Mon Sep 17 00:00:00 2001 From: Kobi Samoray Date: Mon, 1 Feb 2021 17:45:19 +0200 Subject: [PATCH] NSXV: Handle requests ConnectionError exception DNS failures cause requests module to raise a ConnectionError exception. We should issue a retry upon this exception as DNS erros within a network are normal. Change-Id: Id543a55fbd7002f839981ba47909546ef229f5f9 --- vmware_nsx/plugins/nsx_v/vshield/common/VcnsApiClient.py | 3 +++ vmware_nsx/plugins/nsx_v/vshield/common/exceptions.py | 4 ++++ vmware_nsx/plugins/nsx_v/vshield/vcns.py | 1 + 3 files changed, 8 insertions(+) diff --git a/vmware_nsx/plugins/nsx_v/vshield/common/VcnsApiClient.py b/vmware_nsx/plugins/nsx_v/vshield/common/VcnsApiClient.py index 2d95623357..ff5bd8cf67 100644 --- a/vmware_nsx/plugins/nsx_v/vshield/common/VcnsApiClient.py +++ b/vmware_nsx/plugins/nsx_v/vshield/common/VcnsApiClient.py @@ -170,6 +170,9 @@ class VcnsApiHelper(object): except requests.exceptions.Timeout: raise exceptions.ResourceTimedOut(uri=uri) + except requests.exceptions.ConnectionError: + raise exceptions.ResourceConnectionError(uri=uri) + status = response.status_code if 200 <= status < 300: diff --git a/vmware_nsx/plugins/nsx_v/vshield/common/exceptions.py b/vmware_nsx/plugins/nsx_v/vshield/common/exceptions.py index 4ffdfeea88..b2165444a1 100644 --- a/vmware_nsx/plugins/nsx_v/vshield/common/exceptions.py +++ b/vmware_nsx/plugins/nsx_v/vshield/common/exceptions.py @@ -80,3 +80,7 @@ class ServiceConflict(VcnsApiException): class AlreadyExists(VcnsApiException): message = _("Resource %(resource)s already exists") + + +class ResourceConnectionError(VcnsApiException): + message = _("Resource %(uri)s connection error") diff --git a/vmware_nsx/plugins/nsx_v/vshield/vcns.py b/vmware_nsx/plugins/nsx_v/vshield/vcns.py index c9f1f8d38d..0ab7a7a638 100644 --- a/vmware_nsx/plugins/nsx_v/vshield/vcns.py +++ b/vmware_nsx/plugins/nsx_v/vshield/vcns.py @@ -125,6 +125,7 @@ class Vcns(object): self._normalized_global_objects = None @retry_upon_exception(exceptions.ServiceConflict) + @retry_upon_exception(exceptions.ResourceConnectionError) def _client_request(self, client, method, uri, params, headers, encodeParams, timeout=None): return client(method, uri, params, headers, encodeParams,