summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--config-application-package/src/main/java/com/yahoo/config/model/application/provider/FilesApplicationPackage.java128
-rw-r--r--config-model-api/src/main/java/com/yahoo/config/application/api/ApplicationPackage.java4
-rw-r--r--config-model-api/src/main/java/com/yahoo/config/application/api/UnparsedConfigDefinition.java9
-rw-r--r--config-model/src/main/java/com/yahoo/config/model/deploy/DeployState.java2
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/builder/UserConfigBuilder.java2
-rw-r--r--config/src/main/java/com/yahoo/vespa/config/ConfigDefinitionKey.java27
6 files changed, 82 insertions, 90 deletions
diff --git a/config-application-package/src/main/java/com/yahoo/config/model/application/provider/FilesApplicationPackage.java b/config-application-package/src/main/java/com/yahoo/config/model/application/provider/FilesApplicationPackage.java
index 21e7de8fa7b..9971c8bf35f 100644
--- a/config-application-package/src/main/java/com/yahoo/config/model/application/provider/FilesApplicationPackage.java
+++ b/config-application-package/src/main/java/com/yahoo/config/model/application/provider/FilesApplicationPackage.java
@@ -164,7 +164,7 @@ public class FilesApplicationPackage implements ApplicationPackage {
File dir = new File(appDir, relativePath.getRelative());
if ( ! dir.isDirectory()) return readers;
- final File[] files = dir.listFiles();
+ File[] files = dir.listFiles();
if (files != null) {
for (File file : files) {
if (file.isDirectory()) {
@@ -213,18 +213,6 @@ public class FilesApplicationPackage implements ApplicationPackage {
return new File(appDir, ApplicationPackage.HOSTS);
}
- private File getFileWithFallback(String first, String second) {
- File firstFile = new File(appDir, first);
- File secondFile = new File(appDir, second);
- if (firstFile.exists()) {
- return firstFile;
- } else if (secondFile.exists()) {
- return secondFile;
- } else {
- return firstFile;
- }
- }
-
@Override
public String getServicesSource() {
return getServicesFile().getPath();
@@ -249,7 +237,6 @@ public class FilesApplicationPackage implements ApplicationPackage {
}
}
-
@Override
public List<String> getUserIncludeDirs() {
return Collections.unmodifiableList(userIncludeDirs);
@@ -380,7 +367,7 @@ public class FilesApplicationPackage implements ApplicationPackage {
String sdName = sdFile.getName();
if (usedNames.contains(sdName)) {
throw new IllegalArgumentException("The search definition name '"+sdName+
- "' found in classpath already used earlier in classpath.");
+ "' found in classpath already used earlier in classpath.");
}
usedNames.add(sdName);
String contents = IOUtils.readAll(new FileReader(sdFile));
@@ -395,7 +382,8 @@ public class FilesApplicationPackage implements ApplicationPackage {
String sdName = entry.getKey();
if (usedNames.contains(sdName)) {
throw new IllegalArgumentException("The search definitions name '"+sdName+
- "' used in bundle '"+jarFile.getName()+"' already used in classpath or previous bundle.");
+ "' used in bundle '"+jarFile.getName()+"' " +
+ "is already used in classpath or previous bundle.");
}
usedNames.add(sdName);
String sdPayload = entry.getValue();
@@ -405,23 +393,31 @@ public class FilesApplicationPackage implements ApplicationPackage {
}
}
- private Reader retrieveConfigDefReader(String defName) {
- File def = new File(configDefsDir + File.separator + defName);
+ /**
+ * Creates a reader for a config definition
+ *
+ * @param defPath the path to the application package
+ * @param insideApplicationPackage true if the path is relative to the config definition dire in the application
+ * package, false if it is absolute, or relative to the current path, which
+ * is useful when running out of source during development
+ * @return the reader of this config definition
+ */
+ private Reader retrieveConfigDefReader(String defPath, boolean insideApplicationPackage) {
+ File defFile = insideApplicationPackage ? new File(defPath) : new File(defPath);
try {
- return new NamedReader(def.getAbsolutePath(), new FileReader(def));
+ return new NamedReader(defFile.getAbsolutePath(), new FileReader(defFile));
} catch (IOException e) {
- throw new IllegalArgumentException("Could not read config definition file '" +
- def.getAbsolutePath() + "'", e);
+ throw new IllegalArgumentException("Could not read config definition file '" +
+ defFile.getAbsolutePath() + "'", e);
}
}
@Override
public Map<ConfigDefinitionKey, UnparsedConfigDefinition> getAllExistingConfigDefs() {
Map<ConfigDefinitionKey, UnparsedConfigDefinition> defs = new LinkedHashMap<>();
-
- if (configDefsDir.isDirectory()) {
- addAllDefsFromConfigDir(defs, configDefsDir);
- }
+ addAllDefsFromConfigDir(defs, configDefsDir, true);
+ addAllDefsFromConfigDir(defs, new File("src/main/resources/configdefinitions"), false);
+ addAllDefsFromConfigDir(defs, new File("src/test/resources/configdefinitions"), false);
addAllDefsFromBundles(defs, FilesApplicationPackage.getComponents(appDir));
return defs;
}
@@ -449,63 +445,59 @@ public class FilesApplicationPackage implements ApplicationPackage {
}
}
- private void addAllDefsFromConfigDir(Map<ConfigDefinitionKey, UnparsedConfigDefinition> defs, File configDefsDir) {
+ private void addAllDefsFromConfigDir(Map<ConfigDefinitionKey, UnparsedConfigDefinition> defs, File configDefsDir,
+ boolean insideApplicationPackage) {
+ if (! configDefsDir.isDirectory()) return;
+
log.log(LogLevel.DEBUG, "Getting all config definitions from '" + configDefsDir + "'");
- for (final File def : configDefsDir.listFiles(
- new FilenameFilter() { @Override public boolean accept(File dir, String name) {
+ for (File def : configDefsDir.listFiles(
+ new FilenameFilter() { @Override public boolean accept(File dir, String name) { // TODO: Fix
return name.matches(".*\\.def");}})) {
log.log(LogLevel.DEBUG, "Processing config definition '" + def + "'");
String[] nv = def.getName().split("\\.def");
- if (nv == null) {
- log.log(LogLevel.WARNING, "Skipping '" + def + "', cannot determine name");
- } else {
- ConfigDefinitionKey key;
- try {
- key = ConfigUtils.createConfigDefinitionKeyFromDefFile(def);
- } catch (IOException e) {
- e.printStackTrace();
- break;
- }
- if (key.getNamespace().isEmpty()) {
- throw new IllegalArgumentException("Config definition '" + nv + "' has no namespace");
- }
- boolean addFile = false;
- if (defs.containsKey(key)) {
- if (nv[0].contains(".")) {
- log.log(LogLevel.INFO, "Two config definitions found for the same name and namespace: " + key + ". The file '" + def + "' will take precedence");
- addFile = true;
- } else {
- log.log(LogLevel.INFO, "Two config definitions found for the same name and namespace: " + key + ". Skipping '" + def + "', as it does not contain namespace in filename");
- }
+ ConfigDefinitionKey key;
+ try {
+ key = ConfigUtils.createConfigDefinitionKeyFromDefFile(def);
+ } catch (IOException e) {
+ e.printStackTrace(); // TODO: Fix
+ break;
+ }
+ if (key.getNamespace().isEmpty())
+ throw new IllegalArgumentException("Config definition '" + def + "' has no namespace");
+
+ if (defs.containsKey(key)) {
+ if (nv[0].contains(".")) {
+ log.log(LogLevel.INFO, "Two config definitions found for the same name and namespace: " + key +
+ ". The file '" + def + "' will take precedence");
} else {
- addFile = true;
+ log.log(LogLevel.INFO, "Two config definitions found for the same name and namespace: " + key +
+ ". Skipping '" + def + "', as it does not contain namespace in filename");
+ continue; // skip
}
- if (addFile) {
- log.log(LogLevel.DEBUG, "Adding " + key + " to archive of all existing config defs");
- final ConfigDefinitionKey finalKey = key;
- defs.put(key, new UnparsedConfigDefinition() {
- @Override
- public ConfigDefinition parse() {
- DefParser parser = new DefParser(finalKey.getName(), retrieveConfigDefReader(def.getName()));
- return ConfigDefinitionBuilder.createConfigDefinition(parser.getTree());
- }
+ }
- @Override
- public String getUnparsedContent() {
- return readConfigDefinition(def.getName());
- }
- });
+ defs.put(key, new UnparsedConfigDefinition() {
+ @Override
+ public ConfigDefinition parse() {
+ DefParser parser = new DefParser(key.getName(), retrieveConfigDefReader(def.getPath(),
+ insideApplicationPackage));
+ return ConfigDefinitionBuilder.createConfigDefinition(parser.getTree());
}
- }
+
+ @Override
+ public String getUnparsedContent() {
+ return readConfigDefinition(def.getPath(), insideApplicationPackage);
+ }
+ });
}
}
- private String readConfigDefinition(String name) {
- try (Reader reader = retrieveConfigDefReader(name)) {
+ private String readConfigDefinition(String defPath, boolean insideApplicationPackage) {
+ try (Reader reader = retrieveConfigDefReader(defPath, insideApplicationPackage)) {
return IOUtils.readAll(reader);
} catch (IOException e) {
- throw new RuntimeException("Error reading config definition " + name, e);
+ throw new RuntimeException("Error reading config definition " + defPath, e);
}
}
diff --git a/config-model-api/src/main/java/com/yahoo/config/application/api/ApplicationPackage.java b/config-model-api/src/main/java/com/yahoo/config/application/api/ApplicationPackage.java
index 96f58bf140a..e2a77894f73 100644
--- a/config-model-api/src/main/java/com/yahoo/config/application/api/ApplicationPackage.java
+++ b/config-model-api/src/main/java/com/yahoo/config/application/api/ApplicationPackage.java
@@ -104,9 +104,7 @@ public interface ApplicationPackage {
Collection<NamedReader> searchDefinitionContents();
/**
- * Subclass hook.
- * Returns a mapping from def key to a file name that can be used for lookup.
- * @return An mapping of all config definition combos available in this package.
+ * Returns all the config definitions available in this package as unparsed data.
*/
Map<ConfigDefinitionKey, UnparsedConfigDefinition> getAllExistingConfigDefs();
diff --git a/config-model-api/src/main/java/com/yahoo/config/application/api/UnparsedConfigDefinition.java b/config-model-api/src/main/java/com/yahoo/config/application/api/UnparsedConfigDefinition.java
index 5954047c564..0bf790ce8a1 100644
--- a/config-model-api/src/main/java/com/yahoo/config/application/api/UnparsedConfigDefinition.java
+++ b/config-model-api/src/main/java/com/yahoo/config/application/api/UnparsedConfigDefinition.java
@@ -4,11 +4,14 @@ package com.yahoo.config.application.api;
import com.yahoo.vespa.config.ConfigDefinition;
/**
- * Represents a config definition that has not been parsed.
+ * A config definition that has not been parsed.
+ *
* @author lulf
* @since 5.20
*/
public interface UnparsedConfigDefinition {
- public ConfigDefinition parse();
- public String getUnparsedContent();
+
+ ConfigDefinition parse();
+ String getUnparsedContent();
+
}
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 fc3f1974c9f..4539f71490f 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
@@ -143,7 +143,7 @@ public class DeployState implements ConfigDefinitionStore {
return Optional.of(def);
}
- private static Map<ConfigDefinitionKey, UnparsedConfigDefinition> createLazyMapping(final ConfigDefinitionRepo configDefinitionRepo) {
+ private static Map<ConfigDefinitionKey, UnparsedConfigDefinition> createLazyMapping(ConfigDefinitionRepo configDefinitionRepo) {
Map<ConfigDefinitionKey, UnparsedConfigDefinition> keyToRepo = new LinkedHashMap<>();
for (final Map.Entry<ConfigDefinitionKey, com.yahoo.vespa.config.buildergen.ConfigDefinition> defEntry : configDefinitionRepo.getConfigDefinitions().entrySet()) {
keyToRepo.put(defEntry.getKey(), new UnparsedConfigDefinition() {
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 2f14db0ce74..835c4f7dc6d 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
@@ -40,7 +40,7 @@ public class UserConfigBuilder {
Optional<ConfigDefinition> def = configDefinitionStore.getConfigDefinition(key);
if ( ! def.isPresent()) { // TODO: Fail instead of warn
- logger.log(LogLevel.WARNING, "Unable to find config definition for config '" + key +
+ logger.log(LogLevel.WARNING, "Unable to find config definition '" + key.asFileName() +
"'. Please ensure that the name is spelled correctly, and that the def file is included in a bundle.");
}
ConfigPayloadBuilder payloadBuilder = new DomConfigPayloadBuilder(def.orElse(null)).build(element);
diff --git a/config/src/main/java/com/yahoo/vespa/config/ConfigDefinitionKey.java b/config/src/main/java/com/yahoo/vespa/config/ConfigDefinitionKey.java
index 56dba04d6ba..5ebfde612d3 100644
--- a/config/src/main/java/com/yahoo/vespa/config/ConfigDefinitionKey.java
+++ b/config/src/main/java/com/yahoo/vespa/config/ConfigDefinitionKey.java
@@ -4,9 +4,9 @@ package com.yahoo.vespa.config;
import java.util.Objects;
/**
- * Represents one config definition key (name, namespace)
+ * A config definition key: name, namespace)
*
- * @author vegardh
+ * @author bratseth
*/
public class ConfigDefinitionKey {
@@ -36,22 +36,21 @@ public class ConfigDefinitionKey {
this(key.getName(), key.getNamespace());
}
- public String getName() {
- return name;
- }
+ public String getName() { return name; }
+
+ public String getNamespace() { return namespace; }
- public String getNamespace() {
- return namespace;
+ public String asFileName() {
+ return namespace + "." + name + ".def";
}
@Override
- public boolean equals(Object oth) {
- if (!(oth instanceof ConfigDefinitionKey)) {
- return false;
- }
- ConfigDefinitionKey other = (ConfigDefinitionKey) oth;
- return name.equals(other.getName()) &&
- namespace.equals(other.getNamespace());
+ public boolean equals(Object o) {
+ if (o == this) return true;
+ if ( ! (o instanceof ConfigDefinitionKey)) return false;
+
+ ConfigDefinitionKey other = (ConfigDefinitionKey)o;
+ return name.equals(other.getName()) && namespace.equals(other.getNamespace());
}
@Override