summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBongoEADGC6 <BongoEADGC6@users.noreply.github.com>2019-11-12 13:12:36 -0500
committerZach Marano <zmarano@google.com>2019-11-12 10:12:36 -0800
commit653d6d707fb9cfc6db94621979bc4e6975a98568 (patch)
tree81412c8559637389011ee646d3c741d35116a2b8
parent900e29c2a0e2d7eec016a112aa5f734e7dc19ffe (diff)
downloadgoogle-compute-image-packages-653d6d707fb9cfc6db94621979bc4e6975a98568.tar.gz
Added retry loop to _HandleMetadataUpdate (#864)
-rw-r--r--packages/python-google-compute-engine/google_compute_engine/metadata_watcher.py16
-rw-r--r--packages/python-google-compute-engine/google_compute_engine/tests/metadata_watcher_test.py16
2 files changed, 15 insertions, 17 deletions
diff --git a/packages/python-google-compute-engine/google_compute_engine/metadata_watcher.py b/packages/python-google-compute-engine/google_compute_engine/metadata_watcher.py
index 72a12f9..bf688cf 100644
--- a/packages/python-google-compute-engine/google_compute_engine/metadata_watcher.py
+++ b/packages/python-google-compute-engine/google_compute_engine/metadata_watcher.py
@@ -154,7 +154,7 @@ class MetadataWatcher(object):
def _HandleMetadataUpdate(
self, metadata_key='', recursive=True, wait=True, timeout=None,
- retry=True):
+ retries=5):
"""Wait for a successful metadata response.
Args:
@@ -162,25 +162,23 @@ class MetadataWatcher(object):
recursive: bool, True if we should recursively watch for metadata changes.
wait: bool, True if we should wait for a metadata change.
timeout: int, timeout in seconds for returning metadata output.
- retry: bool, True if we should retry on failure.
+ retries: int, Number of times to retry obtaining metadata.
Returns:
json, the deserialized contents of the metadata server.
"""
exception = None
- while True:
+ while retries >= 0:
try:
return self._GetMetadataUpdate(
metadata_key=metadata_key, recursive=recursive, wait=wait,
timeout=timeout)
except (httpclient.HTTPException, socket.error, urlerror.URLError) as e:
+ retries -= 1
if not isinstance(e, type(exception)):
exception = e
self.logger.error('GET request error retrieving metadata. %s.', e)
- if retry:
- continue
- else:
- break
+ time.sleep(1)
def WatchMetadata(
self, handler, metadata_key='', recursive=True, timeout=None):
@@ -202,7 +200,7 @@ class MetadataWatcher(object):
self.logger.exception('Exception calling the response handler. %s.', e)
def GetMetadata(
- self, metadata_key='', recursive=True, timeout=None, retry=True):
+ self, metadata_key='', recursive=True, timeout=None, retries=5):
"""Retrieve the contents of metadata server for a metadata key.
Args:
@@ -216,4 +214,4 @@ class MetadataWatcher(object):
"""
return self._HandleMetadataUpdate(
metadata_key=metadata_key, recursive=recursive, wait=False,
- timeout=timeout, retry=retry)
+ timeout=timeout, retries=retries)
diff --git a/packages/python-google-compute-engine/google_compute_engine/tests/metadata_watcher_test.py b/packages/python-google-compute-engine/google_compute_engine/tests/metadata_watcher_test.py
index 1bce509..9c0ca46 100644
--- a/packages/python-google-compute-engine/google_compute_engine/tests/metadata_watcher_test.py
+++ b/packages/python-google-compute-engine/google_compute_engine/tests/metadata_watcher_test.py
@@ -259,12 +259,12 @@ class MetadataWatcherTest(unittest.TestCase):
metadata_key = 'instance/id'
recursive = False
wait = False
- retry = True
+ retries = 5
self.assertEqual(
self.mock_watcher._HandleMetadataUpdate(
metadata_key=metadata_key, recursive=recursive, wait=wait,
- timeout=None, retry=retry),
+ timeout=None, retries=retries),
{})
expected_calls = [
mock.call(
@@ -282,12 +282,12 @@ class MetadataWatcherTest(unittest.TestCase):
metadata_key = 'instance/id'
recursive = False
wait = False
- retry = False
+ retries = 0
self.assertIsNone(
self.mock_watcher._HandleMetadataUpdate(
metadata_key=metadata_key, recursive=recursive, wait=wait,
- timeout=None, retry=retry))
+ timeout=None, retries=retries))
expected_calls = [
mock.call(
metadata_key=metadata_key, recursive=recursive, wait=wait,
@@ -333,7 +333,7 @@ class MetadataWatcherTest(unittest.TestCase):
self.assertEqual(self.mock_watcher.GetMetadata(), {})
mock_response.assert_called_once_with(
- metadata_key='', recursive=True, wait=False, timeout=None, retry=True)
+ metadata_key='', recursive=True, wait=False, timeout=None, retries=5)
self.mock_watcher.logger.exception.assert_not_called()
def testGetMetadataArgs(self):
@@ -342,15 +342,15 @@ class MetadataWatcherTest(unittest.TestCase):
self.mock_watcher._HandleMetadataUpdate = mock_response
metadata_key = 'instance/id'
recursive = False
- retry = False
+ retries = 5
response = self.mock_watcher.GetMetadata(
metadata_key=metadata_key, recursive=recursive, timeout=60,
- retry=retry)
+ retries=retries)
self.assertEqual(response, {})
mock_response.assert_called_once_with(
metadata_key=metadata_key, recursive=False, wait=False, timeout=60,
- retry=False)
+ retries=5)
self.mock_watcher.logger.exception.assert_not_called()