summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cloudinit/sources/DataSourceOracle.py5
-rw-r--r--cloudinit/sources/tests/test_oracle.py8
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,