From 10da35e7c4f9630d1c0d5f74f9b742e4a6a66ecc 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 3244efbc9e..b0a22ae61b 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,