summaryrefslogtreecommitdiffstats
path: root/config-model-api/src/main/java/com/yahoo/config/application/api/xml/DeploymentSpecXmlReader.java
diff options
context:
space:
mode:
Diffstat (limited to 'config-model-api/src/main/java/com/yahoo/config/application/api/xml/DeploymentSpecXmlReader.java')
-rw-r--r--config-model-api/src/main/java/com/yahoo/config/application/api/xml/DeploymentSpecXmlReader.java44
1 files changed, 23 insertions, 21 deletions
diff --git a/config-model-api/src/main/java/com/yahoo/config/application/api/xml/DeploymentSpecXmlReader.java b/config-model-api/src/main/java/com/yahoo/config/application/api/xml/DeploymentSpecXmlReader.java
index 17a18cbb8c2..4ca9ee1dc2f 100644
--- a/config-model-api/src/main/java/com/yahoo/config/application/api/xml/DeploymentSpecXmlReader.java
+++ b/config-model-api/src/main/java/com/yahoo/config/application/api/xml/DeploymentSpecXmlReader.java
@@ -60,7 +60,6 @@ public class DeploymentSpecXmlReader {
private static final String endpointTag = "endpoint";
private static final String notificationsTag = "notifications";
-
private static final String idAttribute = "id";
private static final String athenzServiceAttribute = "athenz-service";
private static final String athenzDomainAttribute = "athenz-domain";
@@ -276,32 +275,35 @@ public class DeploymentSpecXmlReader {
String containerId = requireStringAttribute("container-id", endpointElement);
String msgPrefix = (level == Endpoint.Level.application ? "Application-level" : "Instance-level") +
" endpoint '" + endpointId + "': ";
+ String invalidChild = level == Endpoint.Level.application ? "region" : "instance";
+ if (!XML.getChildren(endpointElement, invalidChild).isEmpty()) illegal(msgPrefix + "invalid element '" + invalidChild + "'");
List<Endpoint.Target> targets = new ArrayList<>();
- for (var regionElement : XML.getChildren(endpointElement, "region")) {
- String region = regionElement.getTextContent();
- if (region == null || region.isBlank()) illegal(msgPrefix + "empty 'region' element");
- Optional<String> instanceFromAttribute = stringAttribute("instance", regionElement);
- Optional<String> weightFromAttribute = stringAttribute("weight", regionElement);
- if (level == Endpoint.Level.application) {
- if (instanceFromAttribute.isEmpty()) illegal(msgPrefix + "element 'region' must have 'instance' attribute");
- if (weightFromAttribute.isEmpty()) illegal(msgPrefix + "element 'region' must have 'weight' attribute");
- } else {
- if (instanceFromAttribute.isPresent()) illegal(msgPrefix + "element 'region' cannot have 'instance' attribute");
- if (weightFromAttribute.isPresent()) illegal(msgPrefix + "element 'region' cannot have 'weight' attribute");
- instanceFromAttribute = instance;
- }
- int weight = 1;
- if (weightFromAttribute.isPresent()) {
+ if (level == Endpoint.Level.application) {
+ String region = requireStringAttribute("region", endpointElement);
+ for (var instanceElement : XML.getChildren(endpointElement, "instance")) {
+ String instanceName = instanceElement.getTextContent();
+ String weightFromAttribute = requireStringAttribute("weight", instanceElement);
+ if (instanceName == null || instanceName.isBlank()) illegal(msgPrefix + "empty 'instance' element");
+ int weight;
try {
- weight = Integer.parseInt(weightFromAttribute.get());
+ weight = Integer.parseInt(weightFromAttribute);
} catch (NumberFormatException e) {
- throw new IllegalArgumentException(msgPrefix + "invalid weight value '" + weightFromAttribute.get() + "'");
+ throw new IllegalArgumentException(msgPrefix + "invalid weight value '" + weightFromAttribute + "'");
}
+ targets.add(new Endpoint.Target(RegionName.from(region),
+ InstanceName.from(instanceName),
+ weight));
+ }
+ } else {
+ if (stringAttribute("region", endpointElement).isPresent()) illegal(msgPrefix + "invalid 'region' attribute");
+ for (var regionElement : XML.getChildren(endpointElement, "region")) {
+ String region = regionElement.getTextContent();
+ if (region == null || region.isBlank()) illegal(msgPrefix + "empty 'region' element");
+ targets.add(new Endpoint.Target(RegionName.from(region),
+ InstanceName.from(instance.get()),
+ 1));
}
- targets.add(new Endpoint.Target(RegionName.from(region),
- InstanceName.from(instanceFromAttribute.get()),
- weight));
}
if (targets.isEmpty() && level == Endpoint.Level.instance) {
// No explicit targets given for instance level endpoint. Include all declared regions by default