{"record":{"id":"410cb23b2ceb5cf1","repo":"apache/cassandra","slug":"unable-to-retrieve-initial-zone-or-platform-fault","errorCode":null,"errorMessage":"Unable to retrieve initial zone or platform fault domain from cloud metadata service. This is required for registration, please check configuration","messagePattern":"Unable to retrieve initial zone or platform fault domain from cloud metadata service\\. This is required for registration, please check configuration","errorType":"validation","errorClass":"ConfigurationException","httpStatus":null,"severity":"error","filePath":"src/java/org/apache/cassandra/locator/AzureCloudLocationProvider.java","lineNumber":85,"sourceCode":"\n        JsonNode location = jsonNode.get(\"location\");\n        JsonNode zone = jsonNode.get(\"zone\");\n        JsonNode platformFaultDomain = jsonNode.get(\"platformFaultDomain\");\n\n        String datacenter;\n        String rack;\n\n        if (location == null || location.isNull() || location.asText().isEmpty())\n            throw new ConfigurationException(\"Unable to retrieve initial location from cloud metadata service. \" +\n                                             \"This is required for registration, please check configuration\");\n        else\n            datacenter = location.asText();\n\n        if (zone == null || zone.isNull() || zone.asText().isEmpty())\n        {\n            if (platformFaultDomain == null || platformFaultDomain.isNull() || platformFaultDomain.asText().isEmpty())\n            {\n                throw new ConfigurationException(\"Unable to retrieve initial zone or platform fault domain from cloud metadata service. \" +\n                                                 \"This is required for registration, please check configuration\");\n            }\n            else\n            {\n                rack = platformFaultDomain.asText();\n            }\n        }\n        else\n        {\n            rack = zone.asText();\n        }\n\n        return new Location(datacenter + connector.getProperties().getDcSuffix(), \"rack-\" + rack);\n    }\n}\n","sourceCodeStart":67,"sourceCodeEnd":101,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/locator/AzureCloudLocationProvider.java#L67-L101","documentation":"Thrown by AzureCloudLocationProvider.resolveLocation() when neither the zone nor the platformFaultDomain field could be read from the Azure instance metadata response. The rack cannot be determined without one of these, and a rack is required for registration.","triggerScenarios":"Node startup with the Azure location provider where the metadata JSON lacks both 'zone' and 'platformFaultDomain' (null/empty), e.g. regions without availability zones and an IMDS version that omits platformFaultDomain.","commonSituations":"Azure regions without availability zones combined with an outdated api-version; locked-down IMDS where faultDomain is not exposed; mistyped property name in the provider config.","solutions":["Use an IMDS api-version that returns platformFaultDomain or zone (e.g. 2021-02-01 or newer)","Verify compute metadata exposes platformFaultDomain via curl on the node","Deploy VMs into an availability zone so zone metadata is populated"],"exampleFix":"// before\nGET /metadata/instance/compute?api-version=2017-04-02\n\n// after\nGET /metadata/instance/compute?api-version=2021-02-01","handlingStrategy":"try-catch","validationCode":"// verify zone/fault domain exposure before enabling provider\ncurl -H Metadata:true \"http://169.254.169.254/metadata/instance/compute?api-version=2021-02-01\" | grep -Ei 'zone|platformFaultDomain'","typeGuard":null,"tryCatchPattern":"try { provider.resolveLocation(connector); } catch (ConfigurationException e) { logger.error(\"Neither zone nor platformFaultDomain present in IMDS response\", e); throw e; }","preventionTips":["Deploy VMs into availability zones when using this provider","Use IMDS api-version >= 2021-02-01","Add a startup assertion that rack fields resolve"],"tags":["azure","cloud-metadata","snitch"],"backgroundTag":"missing-config-value","analyzedSha":"88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1","analyzedAt":"2026-09-10T07:29:22.284Z","contentChangedAt":"2026-09-10T07:29:22.284Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}