diff options
7 files changed, 30 insertions, 27 deletions
diff --git a/config-model/src/main/java/com/yahoo/config/model/deploy/ConfigDefinitionStore.java b/config-model/src/main/java/com/yahoo/config/model/deploy/ConfigDefinitionStore.java index 22ea054a27d..91beaebbdc4 100644 --- a/config-model/src/main/java/com/yahoo/config/model/deploy/ConfigDefinitionStore.java +++ b/config-model/src/main/java/com/yahoo/config/model/deploy/ConfigDefinitionStore.java @@ -4,12 +4,17 @@ package com.yahoo.config.model.deploy; import com.yahoo.vespa.config.ConfigDefinition; import com.yahoo.vespa.config.ConfigDefinitionKey; +import java.util.Optional; + /** * @author lulf * @since 5.1 */ public interface ConfigDefinitionStore { - ConfigDefinition getConfigDefinition(ConfigDefinitionKey defKey); + /** + * Returns a config definition, or empty if the config definition is not found. + */ + Optional<ConfigDefinition> getConfigDefinition(ConfigDefinitionKey defKey); } diff --git a/config-model/src/main/java/com/yahoo/config/model/deploy/DeployState.java b/config-model/src/main/java/com/yahoo/config/model/deploy/DeployState.java index 3f229835914..8c75f37623b 100644 --- a/config-model/src/main/java/com/yahoo/config/model/deploy/DeployState.java +++ b/config-model/src/main/java/com/yahoo/config/model/deploy/DeployState.java @@ -123,14 +123,8 @@ public class DeployState implements ConfigDefinitionStore { /** Returns the validation overrides of this. This is never null */ public ValidationOverrides validationOverrides() { return validationOverrides; } - /** - * Returns the config def with the given name and namespace. - * - * @param defKey The {@link ConfigDefinitionKey} that will uniquely identify a config definition. - * @return The definition with a matching name and namespace - * @throws java.lang.IllegalArgumentException if def is not found. - */ - public final ConfigDefinition getConfigDefinition(ConfigDefinitionKey defKey) { + @Override + public final Optional<ConfigDefinition> getConfigDefinition(ConfigDefinitionKey defKey) { if (existingConfigDefs == null) { existingConfigDefs = new LinkedHashMap<>(); if (configDefinitionRepo.isPresent()) { @@ -145,7 +139,7 @@ public class DeployState implements ConfigDefinitionStore { } ConfigDefinitionKey lookupKey = defKey; // Fall back to just using name - if (!existingConfigDefs.containsKey(lookupKey)) { + if ( ! existingConfigDefs.containsKey(lookupKey)) { int count = 0; for (ConfigDefinitionKey entry : existingConfigDefs.keySet()) { @@ -174,7 +168,7 @@ public class DeployState implements ConfigDefinitionStore { } if (defArchive.get(defKey) != null) { log.log(LogLevel.DEBUG, "Found in archive: " + defKey); - return defArchive.get(defKey); + return Optional.ofNullable(defArchive.get(defKey)); } log.log(LogLevel.DEBUG, "Retrieving config definition: " + defKey); @@ -182,7 +176,7 @@ public class DeployState implements ConfigDefinitionStore { log.log(LogLevel.DEBUG, "Adding " + def + " to archive"); defArchive.put(defKey, def); - return def; + return Optional.ofNullable(def); } private static Map<ConfigDefinitionKey, UnparsedConfigDefinition> createLazyMapping(final ConfigDefinitionRepo configDefinitionRepo) { diff --git a/config-model/src/main/java/com/yahoo/vespa/model/builder/UserConfigBuilder.java b/config-model/src/main/java/com/yahoo/vespa/model/builder/UserConfigBuilder.java index 612df56cfc9..bd93b733e1c 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/builder/UserConfigBuilder.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/builder/UserConfigBuilder.java @@ -66,7 +66,7 @@ public class UserConfigBuilder { */ private static ConfigDefinition getConfigDef(ConfigDefinitionKey configDefinitionKey, ConfigDefinitionStore configDefinitionStore) { try { - return configDefinitionStore.getConfigDefinition(configDefinitionKey); + return configDefinitionStore.getConfigDefinition(configDefinitionKey).orElse(null); } catch (IllegalArgumentException e) { log.log(LogLevel.DEBUG, "Unable to retrieve config definition: " + e.getMessage()); return null; diff --git a/config-model/src/test/java/com/yahoo/config/model/ApplicationDeployTest.java b/config-model/src/test/java/com/yahoo/config/model/ApplicationDeployTest.java index 8958300538b..b68b758b842 100644 --- a/config-model/src/test/java/com/yahoo/config/model/ApplicationDeployTest.java +++ b/config-model/src/test/java/com/yahoo/config/model/ApplicationDeployTest.java @@ -341,30 +341,30 @@ public class ApplicationDeployTest { DeployState deployState = new DeployState.Builder().applicationPackage(app).build(); - ConfigDefinition def = deployState.getConfigDefinition(new ConfigDefinitionKey("foo", CNode.DEFAULT_NAMESPACE)); + ConfigDefinition def = deployState.getConfigDefinition(new ConfigDefinitionKey("foo", CNode.DEFAULT_NAMESPACE)).get(); assertThat(def.getNamespace(), is(CNode.DEFAULT_NAMESPACE)); - def = deployState.getConfigDefinition(new ConfigDefinitionKey("baz", CNode.DEFAULT_NAMESPACE)); + def = deployState.getConfigDefinition(new ConfigDefinitionKey("baz", CNode.DEFAULT_NAMESPACE)).get(); assertThat(def.getNamespace(), is("xyzzy")); - def = deployState.getConfigDefinition(new ConfigDefinitionKey("foo", "qux")); + def = deployState.getConfigDefinition(new ConfigDefinitionKey("foo", "qux")).get(); assertThat(def.getNamespace(), is("qux")); // A config def without version in filename and version in file header - def = deployState.getConfigDefinition(new ConfigDefinitionKey("xyzzy", CNode.DEFAULT_NAMESPACE)); + def = deployState.getConfigDefinition(new ConfigDefinitionKey("xyzzy", CNode.DEFAULT_NAMESPACE)).get(); assertThat(def.getNamespace(), is(CNode.DEFAULT_NAMESPACE)); assertThat(def.getName(), is("xyzzy")); // Without giving namespace, namespace is really CNode.DEFAULT_NAMESPACE - def = deployState.getConfigDefinition(new ConfigDefinitionKey("baz", "")); + def = deployState.getConfigDefinition(new ConfigDefinitionKey("baz", "")).get(); assertThat(def.getNamespace(), is("xyzzy")); // Without giving namespace, namespace is really xyzzy - def = deployState.getConfigDefinition(new ConfigDefinitionKey("baz", "")); + def = deployState.getConfigDefinition(new ConfigDefinitionKey("baz", "")).get(); assertThat(def.getNamespace(), is("xyzzy")); // Two defs, one with and one without namespace. The one with namespace should have precedence. - def = deployState.getConfigDefinition(new ConfigDefinitionKey("bar", "xyzzy")); + def = deployState.getConfigDefinition(new ConfigDefinitionKey("bar", "xyzzy")).get(); assertThat(def.getNamespace(), is("xyzzy")); assertTrue(def.getIntDefs().containsKey("foo")); // xyzzy.baz.def has precedence before baz.def, so foo exists assertThat(def.getIntDefs().get("bar").getDefVal(), is(2)); diff --git a/config-model/src/test/java/com/yahoo/config/model/deploy/DeployStateTest.java b/config-model/src/test/java/com/yahoo/config/model/deploy/DeployStateTest.java index a84cb7ca7f6..a84333b0e92 100644 --- a/config-model/src/test/java/com/yahoo/config/model/deploy/DeployStateTest.java +++ b/config-model/src/test/java/com/yahoo/config/model/deploy/DeployStateTest.java @@ -36,6 +36,7 @@ import static org.junit.Assert.fail; * @since 5.12 */ public class DeployStateTest { + @Test public void testProvisionerIsSet() { DeployState.Builder builder = new DeployState.Builder(); @@ -86,7 +87,7 @@ public class DeployStateTest { assertNotNull(state.getConfigDefinition(new ConfigDefinitionKey("foo", "bar"))); assertNotNull(state.getConfigDefinition(new ConfigDefinitionKey("test1", ""))); - ConfigDefinition overridden = state.getConfigDefinition(new ConfigDefinitionKey("test2", "a.b")); + ConfigDefinition overridden = state.getConfigDefinition(new ConfigDefinitionKey("test2", "a.b")).get(); assertNotNull(overridden); Double defaultValue = overridden.getDoubleDefs().get("doubleVal").getDefVal(); assertNotNull(defaultValue); @@ -95,7 +96,7 @@ public class DeployStateTest { @Test public void testGetConfigDefinition() { - final Map<ConfigDefinitionKey, com.yahoo.vespa.config.buildergen.ConfigDefinition> defs = new LinkedHashMap<>(); + Map<ConfigDefinitionKey, com.yahoo.vespa.config.buildergen.ConfigDefinition> defs = new LinkedHashMap<>(); defs.put(new ConfigDefinitionKey("test2", "a.b"), new com.yahoo.vespa.config.buildergen.ConfigDefinition("test2", new String[]{"namespace=a.b", "doubleVal double default=1.0"})); defs.put(new ConfigDefinitionKey("test2", "c.d"), new com.yahoo.vespa.config.buildergen.ConfigDefinition("test2", new String[]{"namespace=c.d", "doubleVal double default=1.0"})); defs.put(new ConfigDefinitionKey("test3", "xyzzy"), new com.yahoo.vespa.config.buildergen.ConfigDefinition("test3", new String[]{"namespace=xyzzy", "message string"})); @@ -112,13 +113,13 @@ public class DeployStateTest { assertThat(e.getMessage(), is("Using config definition 'test2' is ambiguous, there are more than one config definitions with this name, please specify namespace")); } - final ConfigDefinition test1 = state.getConfigDefinition(new ConfigDefinitionKey("test2", "a.b")); + ConfigDefinition test1 = state.getConfigDefinition(new ConfigDefinitionKey("test2", "a.b")).get(); assertNotNull(test1); assertThat(test1.getName(), is("test2")); assertThat(test1.getNamespace(), is("a.b")); // Should fallback to using test3 with another namespace, since only one exists - ConfigDefinition test3 = state.getConfigDefinition(new ConfigDefinitionKey("test3", "")); + ConfigDefinition test3 = state.getConfigDefinition(new ConfigDefinitionKey("test3", "")).get(); assertNotNull(test3); assertThat(test3.getName(), is("test3")); assertThat(test3.getNamespace(), is("xyzzy")); @@ -126,7 +127,7 @@ public class DeployStateTest { @Test public void testRotations() { - final Set<Rotation> rotations = new HashSet<>(); + Set<Rotation> rotations = new HashSet<>(); assertThat(new DeployState.Builder().rotations(rotations).build().getRotations().size(), is(0)); for (String name : new String[]{"rotation-001.vespa.a02.yahoodns.net", "rotation-002.vespa.a02.yahoodns.net"}) { rotations.add(new Rotation(name)); @@ -134,7 +135,7 @@ public class DeployStateTest { assertThat(new DeployState.Builder().rotations(rotations).build().getRotations(), equalTo(rotations)); } - private DeployState createDeployState(ApplicationPackage app, final Map<ConfigDefinitionKey, com.yahoo.vespa.config.buildergen.ConfigDefinition> defs) { + private DeployState createDeployState(ApplicationPackage app, Map<ConfigDefinitionKey, com.yahoo.vespa.config.buildergen.ConfigDefinition> defs) { DeployState.Builder builder = new DeployState.Builder().applicationPackage(app); builder.configDefinitionRepo(new ConfigDefinitionRepo() { @Override @@ -144,5 +145,6 @@ public class DeployStateTest { }); return builder.build(); } + } diff --git a/config-model/src/test/java/com/yahoo/vespa/model/builder/UserConfigBuilderTest.java b/config-model/src/test/java/com/yahoo/vespa/model/builder/UserConfigBuilderTest.java index db35e2cac1e..a02a1c5677e 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/builder/UserConfigBuilderTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/builder/UserConfigBuilderTest.java @@ -23,6 +23,7 @@ import javax.xml.parsers.ParserConfigurationException; import java.io.IOException; import java.io.Reader; import java.io.StringReader; +import java.util.Optional; import static org.hamcrest.core.Is.is; import static org.junit.Assert.*; @@ -35,7 +36,7 @@ public class UserConfigBuilderTest { private final ConfigDefinitionStore configDefinitionStore = new ConfigDefinitionStore() { @Override - public ConfigDefinition getConfigDefinition(ConfigDefinitionKey defKey) { return null; } + public Optional<ConfigDefinition> getConfigDefinition(ConfigDefinitionKey defKey) { return Optional.empty(); } }; @Test diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/application/Application.java b/configserver/src/main/java/com/yahoo/vespa/config/server/application/Application.java index 1b3da039145..ba96deca187 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/application/Application.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/application/Application.java @@ -216,6 +216,7 @@ public class Application implements ModelResult { * legacy config namespace (or not using config namespace)) */ private static class ConfigDefinitionWrapper { + private final ConfigDefinitionKey defKey; private final ConfigDefinition def; |