Skip to content

Commit 1972c7b

Browse files
chore: improve error message in _metadata.py (#1652)
* improve error message * log last error response * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md * update secret * update test case to make sure failure reason is included * update test * update secret --------- Co-authored-by: Owl Bot <gcf-owl-bot[bot]@users.noreply.github.com>
1 parent c3ea09f commit 1972c7b

File tree

3 files changed

+32
-4
lines changed

3 files changed

+32
-4
lines changed

google/auth/compute_engine/_metadata.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@ def get(
201201
url = _helpers.update_query(base_url, query_params)
202202

203203
backoff = ExponentialBackoff(total_attempts=retry_count)
204-
204+
failure_reason = None
205205
for attempt in backoff:
206206
try:
207207
response = request(url=url, method="GET", headers=headers_to_use)
@@ -213,6 +213,11 @@ def get(
213213
retry_count,
214214
response.status,
215215
)
216+
failure_reason = (
217+
response.data.decode("utf-8")
218+
if hasattr(response.data, "decode")
219+
else response.data
220+
)
216221
continue
217222
else:
218223
break
@@ -225,10 +230,13 @@ def get(
225230
retry_count,
226231
e,
227232
)
233+
failure_reason = e
228234
else:
229235
raise exceptions.TransportError(
230236
"Failed to retrieve {} from the Google Compute Engine "
231-
"metadata service. Compute Engine Metadata server unavailable".format(url)
237+
"metadata service. Compute Engine Metadata server unavailable due to {}".format(
238+
url, failure_reason
239+
)
232240
)
233241

234242
content = _helpers.from_bytes(response.data)

system_tests/secrets.tar.enc

0 Bytes
Binary file not shown.

tests/compute_engine/test__metadata.py

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -344,12 +344,32 @@ def test_get_return_none_for_not_found_error():
344344
@mock.patch("time.sleep", return_value=None)
345345
def test_get_failure_connection_failed(mock_sleep):
346346
request = make_request("")
347-
request.side_effect = exceptions.TransportError()
347+
request.side_effect = exceptions.TransportError("failure message")
348348

349349
with pytest.raises(exceptions.TransportError) as excinfo:
350350
_metadata.get(request, PATH)
351351

352-
assert excinfo.match(r"Compute Engine Metadata server unavailable")
352+
assert excinfo.match(
353+
r"Compute Engine Metadata server unavailable due to failure message"
354+
)
355+
356+
request.assert_called_with(
357+
method="GET",
358+
url=_metadata._METADATA_ROOT + PATH,
359+
headers=_metadata._METADATA_HEADERS,
360+
)
361+
assert request.call_count == 5
362+
363+
364+
def test_get_too_many_requests_retryable_error_failure():
365+
request = make_request("too many requests", status=http_client.TOO_MANY_REQUESTS)
366+
367+
with pytest.raises(exceptions.TransportError) as excinfo:
368+
_metadata.get(request, PATH)
369+
370+
assert excinfo.match(
371+
r"Compute Engine Metadata server unavailable due to too many requests"
372+
)
353373

354374
request.assert_called_with(
355375
method="GET",

0 commit comments

Comments
 (0)