From f95adc1c0720acbded62db8b4dc466dcd3f4e960 Mon Sep 17 00:00:00 2001 From: Alexey Volkov Date: Mon, 25 Nov 2024 17:59:46 -0800 Subject: [PATCH 1/4] chore: Made Compute Engine Metadata service exceptions more informative Previously, the information about the original exceptions was omitted. --- google/auth/compute_engine/_metadata.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/google/auth/compute_engine/_metadata.py b/google/auth/compute_engine/_metadata.py index 8d692972f..c23646afa 100644 --- a/google/auth/compute_engine/_metadata.py +++ b/google/auth/compute_engine/_metadata.py @@ -202,6 +202,7 @@ def get( backoff = ExponentialBackoff(total_attempts=retry_count) + last_exception = None for attempt in backoff: try: response = request(url=url, method="GET", headers=headers_to_use) @@ -218,6 +219,7 @@ def get( break except exceptions.TransportError as e: + last_exception = e _LOGGER.warning( "Compute Engine Metadata server unavailable on " "attempt %s of %s. Reason: %s", @@ -229,7 +231,7 @@ def get( raise exceptions.TransportError( "Failed to retrieve {} from the Google Compute Engine " "metadata service. Compute Engine Metadata server unavailable".format(url) - ) + ) from last_exception content = _helpers.from_bytes(response.data) From 41a8a01662dc4b2c85b2866a82fbcb064b165bb2 Mon Sep 17 00:00:00 2001 From: Alexey Volkov Date: Tue, 26 Nov 2024 18:49:23 -0800 Subject: [PATCH 2/4] Updated the way the errors are logged --- google/auth/compute_engine/_metadata.py | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/google/auth/compute_engine/_metadata.py b/google/auth/compute_engine/_metadata.py index c23646afa..1d8279237 100644 --- a/google/auth/compute_engine/_metadata.py +++ b/google/auth/compute_engine/_metadata.py @@ -207,14 +207,12 @@ def get( try: response = request(url=url, method="GET", headers=headers_to_use) if response.status in transport.DEFAULT_RETRYABLE_STATUS_CODES: - _LOGGER.warning( - "Compute Engine Metadata server unavailable on " - "attempt %s of %s. Response status: %s", - attempt, - retry_count, - response.status, + raise exceptions.TransportError( + f"Compute Engine Metadata server unavailable. " + f"Response status: {response.status}", + response, + retryable=True, ) - continue else: break From 36afcb00eeef14c1d030aaf8b2b6e0db319b0ec3 Mon Sep 17 00:00:00 2001 From: Viacheslav Rostovtsev <58152857+viacheslav-rostovtsev@users.noreply.github.com> Date: Tue, 26 Nov 2024 19:00:58 -0800 Subject: [PATCH 3/4] add response data to the exception --- google/auth/compute_engine/_metadata.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/google/auth/compute_engine/_metadata.py b/google/auth/compute_engine/_metadata.py index 1d8279237..bad76b696 100644 --- a/google/auth/compute_engine/_metadata.py +++ b/google/auth/compute_engine/_metadata.py @@ -208,8 +208,9 @@ def get( response = request(url=url, method="GET", headers=headers_to_use) if response.status in transport.DEFAULT_RETRYABLE_STATUS_CODES: raise exceptions.TransportError( - f"Compute Engine Metadata server unavailable. " - f"Response status: {response.status}", + "Compute Engine Metadata server unavailable. " + "Response status: {}; Response:\n{}".format( + response.status, response.data), response, retryable=True, ) From ee757fdb22fec6ceab20dc05cca0dcbe914e6038 Mon Sep 17 00:00:00 2001 From: Alexey Volkov Date: Tue, 26 Nov 2024 19:25:07 -0800 Subject: [PATCH 4/4] Fixed the formatting --- google/auth/compute_engine/_metadata.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/google/auth/compute_engine/_metadata.py b/google/auth/compute_engine/_metadata.py index bad76b696..5d96018dd 100644 --- a/google/auth/compute_engine/_metadata.py +++ b/google/auth/compute_engine/_metadata.py @@ -210,7 +210,8 @@ def get( raise exceptions.TransportError( "Compute Engine Metadata server unavailable. " "Response status: {}; Response:\n{}".format( - response.status, response.data), + response.status, response.data + ), response, retryable=True, )