diff options
Diffstat (limited to 'config-provisioning/src/main/java/com/yahoo/config/provision/NodeFlavors.java')
-rw-r--r-- | config-provisioning/src/main/java/com/yahoo/config/provision/NodeFlavors.java | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/NodeFlavors.java b/config-provisioning/src/main/java/com/yahoo/config/provision/NodeFlavors.java index 9451e47cbc3..ae2e5710d2e 100644 --- a/config-provisioning/src/main/java/com/yahoo/config/provision/NodeFlavors.java +++ b/config-provisioning/src/main/java/com/yahoo/config/provision/NodeFlavors.java @@ -3,6 +3,7 @@ package com.yahoo.config.provision; import com.google.common.collect.ImmutableMap; import com.google.inject.Inject; +import com.yahoo.config.provisioning.FlavorsConfig; import java.util.Collection; import java.util.HashMap; @@ -11,8 +12,6 @@ import java.util.Map; import java.util.Optional; import java.util.stream.Collectors; -import com.yahoo.config.provisioning.FlavorsConfig; - /** * All the available node flavors. * @@ -38,9 +37,8 @@ public class NodeFlavors { /** Returns the flavor with the given name or throws an IllegalArgumentException if it does not exist */ public Flavor getFlavorOrThrow(String flavorName) { - Optional<Flavor> flavor = getFlavor(flavorName); - if ( flavor.isPresent()) return flavor.get(); - throw new IllegalArgumentException("Unknown flavor '" + flavorName + "'. Flavors are " + canonicalFlavorNames()); + return getFlavor(flavorName).orElseThrow(() -> new IllegalArgumentException("Unknown flavor '" + flavorName + + "'. Flavors are " + canonicalFlavorNames())); } private List<String> canonicalFlavorNames() { @@ -65,7 +63,21 @@ public class NodeFlavors { } flavor.freeze(); } + // Third pass, ensure that retired flavors have a replacement + for (Flavor flavor : flavors.values()) { + if (flavor.isRetired() && !hasReplacement(flavors.values(), flavor)) { + throw new IllegalStateException( + String.format("Flavor '%s' is retired, but has no replacement", flavor.name()) + ); + } + } return flavors.values(); } + private static boolean hasReplacement(Collection<Flavor> flavors, Flavor flavor) { + return flavors.stream() + .filter(f -> !f.equals(flavor)) + .anyMatch(f -> f.satisfies(flavor)); + } + } |