diff options
author | Daniel Watkins <oddbloke@ubuntu.com> | 2020-08-14 11:37:33 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-08-14 11:37:33 -0400 |
commit | 2d3533b59c7bf00affbda9c2c94fb5f214ffcb11 (patch) | |
tree | ddc2e87c994ded3d67998acb389e47df887c47fb | |
parent | c3556ae82dfb47d635344fcd78908f003648d6d2 (diff) | |
download | vyos-cloud-init-2d3533b59c7bf00affbda9c2c94fb5f214ffcb11.tar.gz vyos-cloud-init-2d3533b59c7bf00affbda9c2c94fb5f214ffcb11.zip |
DataSourceOracle: retry twice (and document why we retry at all) (#536)
-rw-r--r-- | cloudinit/sources/DataSourceOracle.py | 5 | ||||
-rw-r--r-- | cloudinit/sources/tests/test_oracle.py | 8 |
2 files changed, 9 insertions, 4 deletions
diff --git a/cloudinit/sources/DataSourceOracle.py b/cloudinit/sources/DataSourceOracle.py index 2354648b..20d6487d 100644 --- a/cloudinit/sources/DataSourceOracle.py +++ b/cloudinit/sources/DataSourceOracle.py @@ -297,7 +297,10 @@ def read_opc_metadata(*, fetch_vnics_data: bool = False): `fetch_vnics_data` is True, else None """ - retries = 1 + # Per Oracle, there are short windows (measured in milliseconds) throughout + # an instance's lifetime where the IMDS is being updated and may 404 as a + # result. To work around these windows, we retry a couple of times. + retries = 2 def _fetch(metadata_version: int, path: str) -> dict: headers = { diff --git a/cloudinit/sources/tests/test_oracle.py b/cloudinit/sources/tests/test_oracle.py index 2fb9a20a..7bd23813 100644 --- a/cloudinit/sources/tests/test_oracle.py +++ b/cloudinit/sources/tests/test_oracle.py @@ -481,9 +481,11 @@ class TestReadOpcMetadata: "v2_failure_count,v1_failure_count,expected_body,expectation", [ (1, 0, json.loads(OPC_V2_METADATA), does_not_raise()), - (2, 0, json.loads(OPC_V1_METADATA), does_not_raise()), - (2, 1, json.loads(OPC_V1_METADATA), does_not_raise()), - (2, 2, None, pytest.raises(UrlError)), + (2, 0, json.loads(OPC_V2_METADATA), does_not_raise()), + (3, 0, json.loads(OPC_V1_METADATA), does_not_raise()), + (3, 1, json.loads(OPC_V1_METADATA), does_not_raise()), + (3, 2, json.loads(OPC_V1_METADATA), does_not_raise()), + (3, 3, None, pytest.raises(UrlError)), ] ) def test_retries(self, v2_failure_count, v1_failure_count, |