aboutsummaryrefslogtreecommitdiffstats
path: root/config-model
diff options
context:
space:
mode:
authorHarald Musum <musum@verizonmedia.com>2021-06-02 09:19:22 +0200
committerHarald Musum <musum@verizonmedia.com>2021-06-02 09:19:22 +0200
commit1cfc824bfae69e95613260578fa63ea39d0938b9 (patch)
treec2d24bcd332d4d610de30069ddcb41b4df318353 /config-model
parent939c9837cdec21fbe78d9740219138981ba025c2 (diff)
Validate that schemas/ dir is used for schemas, warns otherwise
Diffstat (limited to 'config-model')
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/application/validation/SchemasDirValidator.java32
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/application/validation/Validation.java5
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/test/VespaModelTestCase.java19
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/test/utils/VespaModelCreatorWithFilePkg.java5
4 files changed, 53 insertions, 8 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/SchemasDirValidator.java b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/SchemasDirValidator.java
new file mode 100644
index 00000000000..ffcad391e57
--- /dev/null
+++ b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/SchemasDirValidator.java
@@ -0,0 +1,32 @@
+// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.model.application.validation;
+
+import com.yahoo.config.application.api.ApplicationFile;
+import com.yahoo.config.application.api.ApplicationPackage;
+import com.yahoo.config.model.deploy.DeployState;
+import com.yahoo.vespa.model.VespaModel;
+
+import java.util.logging.Level;
+
+/**
+ * Validates that correct directory is used for schemas
+ *
+ * @author hmusum
+ */
+public class SchemasDirValidator extends Validator {
+
+ public SchemasDirValidator() {
+ }
+
+ @Override
+ public void validate(VespaModel model, DeployState deployState) {
+ ApplicationPackage app = deployState.getApplicationPackage();
+ ApplicationFile sdDir = app.getFile(ApplicationPackage.SEARCH_DEFINITIONS_DIR);
+ if (sdDir.exists() && sdDir.isDirectory())
+ deployState.getDeployLogger().logApplicationPackage(
+ Level.WARNING,
+ "Directory " + ApplicationPackage.SEARCH_DEFINITIONS_DIR.getRelative() +
+ "/ should not be used for schemas, use " + ApplicationPackage.SCHEMAS_DIR.getRelative() + "/ instead");
+ }
+
+}
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/Validation.java b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/Validation.java
index d1c93bcd611..55443d4b260 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/Validation.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/Validation.java
@@ -9,7 +9,6 @@ import com.yahoo.config.model.api.Model;
import com.yahoo.config.model.api.ValidationParameters;
import com.yahoo.config.model.deploy.DeployState;
import com.yahoo.config.provision.ClusterSpec;
-import com.yahoo.container.QrConfig;
import com.yahoo.vespa.model.VespaModel;
import com.yahoo.vespa.model.application.validation.change.ChangeValidator;
import com.yahoo.vespa.model.application.validation.change.ClusterSizeReductionValidator;
@@ -25,8 +24,6 @@ import com.yahoo.vespa.model.application.validation.change.ResourcesReductionVal
import com.yahoo.vespa.model.application.validation.change.StartupCommandChangeValidator;
import com.yahoo.vespa.model.application.validation.change.StreamingSearchClusterChangeValidator;
import com.yahoo.vespa.model.application.validation.first.AccessControlOnFirstDeploymentValidator;
-import com.yahoo.vespa.model.container.ApplicationContainerCluster;
-import com.yahoo.vespa.model.container.Container;
import java.time.Instant;
import java.util.Arrays;
@@ -43,7 +40,6 @@ import static java.util.stream.Collectors.groupingBy;
import static java.util.stream.Collectors.mapping;
import static java.util.stream.Collectors.toCollection;
import static java.util.stream.Collectors.toList;
-import static java.util.stream.Collectors.toSet;
/**
* Executor of validators. This defines the right order of validator execution.
@@ -63,6 +59,7 @@ public class Validation {
new RoutingValidator().validate(model, deployState);
new RoutingSelectorValidator().validate(model, deployState);
}
+ new SchemasDirValidator().validate(model, deployState);
new ComponentValidator().validate(model, deployState);
new SearchDataTypeValidator().validate(model, deployState);
new ComplexAttributeFieldsValidator().validate(model, deployState);
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/test/VespaModelTestCase.java b/config-model/src/test/java/com/yahoo/vespa/model/test/VespaModelTestCase.java
index f5250343afe..a3f7e973508 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/test/VespaModelTestCase.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/test/VespaModelTestCase.java
@@ -216,7 +216,7 @@ public class VespaModelTestCase {
"</hosts>");
}
- class MyLogger implements DeployLogger {
+ static class MyLogger implements DeployLogger {
List<Pair<Level, String>> msgs = new ArrayList<>();
@Override
public void log(Level level, String message) {
@@ -305,4 +305,21 @@ public class VespaModelTestCase {
assertThat(model.getContainerClusters().size(), is(1));
}
+ @Test
+ public void testThatDeployLogContainsWarninnWhenUsingSearchdefinitionsDir() throws IOException, SAXException {
+ ApplicationPackage app = FilesApplicationPackage.fromFile(
+ new File("src/test/cfg/application/app_qrserverandgw/"));
+ MyLogger logger = new MyLogger();
+ DeployState deployState = new DeployState.Builder()
+ .applicationPackage(app)
+ .deployLogger(logger)
+ .build();
+ VespaModel model = new VespaModel(new NullConfigModelRegistry(), deployState);
+ Validation.validate(model, new ValidationParameters(), deployState);
+
+ assertEquals(3, logger.msgs.size());
+ assertEquals("WARNING", logger.msgs.get(1).getFirst().getName());
+ assertEquals("Directory searchdefinitions/ should not be used for schemas, use schemas/ instead", logger.msgs.get(1).getSecond());
+ }
+
}
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/test/utils/VespaModelCreatorWithFilePkg.java b/config-model/src/test/java/com/yahoo/vespa/model/test/utils/VespaModelCreatorWithFilePkg.java
index 8147d2e00ca..eea3da0e096 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/test/utils/VespaModelCreatorWithFilePkg.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/test/utils/VespaModelCreatorWithFilePkg.java
@@ -24,9 +24,8 @@ import java.io.IOException;
*/
public class VespaModelCreatorWithFilePkg {
- private FilesApplicationPackage applicationPkg;
-
- private ConfigModelRegistry configModelRegistry;
+ private final FilesApplicationPackage applicationPkg;
+ private final ConfigModelRegistry configModelRegistry;
public VespaModelCreatorWithFilePkg(String directoryName) {
this(new File(directoryName));