diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2021-06-02 17:13:18 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-06-02 17:13:18 +0200 |
commit | 13c2349d824b2b65dc8d93458df5fff1480e6d3c (patch) | |
tree | 46191f9185f9d2e247bec91b7b10e8f1b7f80ecc /config-model/src | |
parent | c768419738b568ff6de1209920416837911bf3bf (diff) | |
parent | 1cfc824bfae69e95613260578fa63ea39d0938b9 (diff) |
Merge pull request #18081 from vespa-engine/hmusum/warn-when-using-searchdefinitions-dir
Validate that schemas/ dir is used for schemas, warns otherwise
Diffstat (limited to 'config-model/src')
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)); |