diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2024-01-18 16:49:37 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-01-18 16:49:37 +0100 |
commit | f776ae0cc57ea8b330d0258aae85a5c000ee4536 (patch) | |
tree | cb864a35e8342b500171edddc7c8bf9fbf07c37d | |
parent | ab54f9c7cbd1bc3c1434717b875e1dfeb7b27dc4 (diff) | |
parent | c8763af3fa8e0c0d965a38eef5be3c7de419d59d (diff) |
Merge pull request #29960 from vespa-engine/arnej/streaming-validation
run verify for streaming clusters as well
2 files changed, 14 insertions, 13 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/RankSetupValidator.java b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/RankSetupValidator.java index f2d9c0fcd1c..98adde7b547 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/RankSetupValidator.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/RankSetupValidator.java @@ -63,18 +63,14 @@ public class RankSetupValidator implements Validator { context.deployState().getProperties().applicationId().toFullString() + ".") .toFile(); - for (SearchCluster cluster : context.model().getSearchClusters()) { - // Skipping ranking expression checking for streaming clusters, not implemented yet - if (cluster.isStreaming()) continue; - - IndexedSearchCluster sc = (IndexedSearchCluster) cluster; + for (SearchCluster sc : context.model().getSearchClusters()) { String clusterDir = cfgDir.getAbsolutePath() + "/" + sc.getClusterName() + "/"; for (DocumentDatabase docDb : sc.getDocumentDbs()) { String schemaName = docDb.getDerivedConfiguration().getSchema().getName(); String schemaDir = clusterDir + schemaName + "/"; writeConfigs(schemaDir, docDb); writeExtraVerifyRankSetupConfig(schemaDir, docDb); - if (!validate(context, "dir:" + schemaDir, sc, schemaName, cfgDir)) { + if (!validate(context, "dir:" + schemaDir, sc, schemaName, cfgDir, sc.isStreaming())) { return; } } @@ -87,11 +83,11 @@ public class RankSetupValidator implements Validator { } } - private boolean validate(Context context, String configId, SearchCluster searchCluster, String schema, File tempDir) { + private boolean validate(Context context, String configId, SearchCluster searchCluster, String schema, File tempDir, boolean isStreaming) { Instant start = Instant.now(); try { log.log(Level.FINE, () -> String.format("Validating schema '%s' for cluster %s with config id %s", schema, searchCluster, configId)); - boolean ret = execValidate(context, configId, searchCluster, schema); + boolean ret = execValidate(context, configId, searchCluster, schema, isStreaming); if (!ret) { // Give up, don't log same error msg repeatedly deleteTempDir(tempDir); @@ -175,8 +171,8 @@ public class RankSetupValidator implements Validator { IOUtils.writeFile(dir + configName, StringUtilities.implodeMultiline(ConfigInstance.serialize(config)), false); } - private boolean execValidate(Context context, String configId, SearchCluster sc, String sdName) { - String command = String.format("%s %s", binaryName, configId); + private boolean execValidate(Context context, String configId, SearchCluster sc, String sdName, boolean isStreaming) { + String command = String.format((isStreaming ? "%s %s -S" : "%s %s"), binaryName, configId); try { Pair<Integer, String> ret = new ProcessExecuter(true).exec(command); Integer exitCode = ret.getFirst(); diff --git a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/StreamingValidatorTest.java b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/StreamingValidatorTest.java index 6f66838ba47..5397c30f2bc 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/StreamingValidatorTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/StreamingValidatorTest.java @@ -33,12 +33,16 @@ public class StreamingValidatorTest { "Document references and imported fields are not allowed in streaming search.")); } + private static List<String> filter(List<String> warnings) { + return warnings.stream().filter(x -> x.indexOf("Cannot run program") == -1).toList(); + } + @Test void tensor_field_without_index_gives_no_warning() { var logger = new TestableDeployLogger(); var model = createModel(logger, "field nn type tensor(x[2]) { indexing: attribute | summary\n" + "attribute { distance-metric: euclidean } }"); - assertTrue(logger.warnings.isEmpty()); + assertTrue(filter(logger.warnings).isEmpty()); } @Test @@ -46,9 +50,10 @@ public class StreamingValidatorTest { var logger = new TestableDeployLogger(); var model = createModel(logger, "field nn type tensor(x[2]) { indexing: attribute | index | summary\n" + "attribute { distance-metric: euclidean } }"); - assertEquals(1, logger.warnings.size()); + var warnings = filter(logger.warnings); + assertEquals(1, warnings.size()); assertEquals("For streaming search cluster 'content.test', SD field 'nn': hnsw index is not relevant and not supported, ignoring setting", - logger.warnings.get(0)); + warnings.get(0)); } private static VespaModel createModel(DeployLogger logger, String sdContent) { |