diff options
author | Geir Storli <geirst@vespa.ai> | 2024-03-26 15:44:22 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-03-26 15:44:22 +0100 |
commit | e0cdfbd76d9e8311811d021006862f93723ac30a (patch) | |
tree | 5db09bdf47167329133706c2309e40c0935b81aa | |
parent | 32ad1a732962c9ea9d7b0693dfa880ef74e9ddd0 (diff) | |
parent | 0377afe9749ca49bfb38c7b621df9e34db525e6c (diff) |
Merge pull request #30735 from vespa-engine/toregge/add-streaming-search-validator-warnings-for-predicate-and-uri-fields
Add streaming search validator warnings for predicate and uri fields.
4 files changed, 54 insertions, 12 deletions
diff --git a/config-model/src/main/java/com/yahoo/schema/processing/PredicateProcessor.java b/config-model/src/main/java/com/yahoo/schema/processing/PredicateProcessor.java index 26107ad2dca..2a654991835 100644 --- a/config-model/src/main/java/com/yahoo/schema/processing/PredicateProcessor.java +++ b/config-model/src/main/java/com/yahoo/schema/processing/PredicateProcessor.java @@ -45,7 +45,7 @@ public class PredicateProcessor extends Processor { for (SDField field : schema.allConcreteFields()) { if (field.getDataType() == DataType.PREDICATE) { if (validate && field.doesIndexing()) { - fail(schema, field, "Use 'attribute' instead of 'index'. This will require a refeed if you have upgraded."); + fail(schema, field, "Use 'attribute' instead of 'index'."); } if (field.doesAttributing()) { Attribute attribute = field.getAttributes().get(field.getName()); diff --git a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/StreamingValidator.java b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/StreamingValidator.java index 96b13782a7d..86384135e12 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/StreamingValidator.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/StreamingValidator.java @@ -31,6 +31,7 @@ public class StreamingValidator implements Validator { if (schemaInfo.getIndexMode() == SchemaInfo.IndexMode.STREAMING) { var deployLogger = context.deployState().getDeployLogger(); warnStreamingAttributes(cluster.getClusterName(), schemaInfo.fullSchema(), deployLogger); + warnStreamingIndexFields(cluster.getClusterName(), schemaInfo.fullSchema(), deployLogger); warnStreamingGramMatching(cluster.getClusterName(), schemaInfo.fullSchema(), deployLogger); failStreamingDocumentReferences(cluster.getClusterName(), cluster.getDocumentDB(schemaInfo.name()).getDerivedConfiguration(), context); } @@ -38,12 +39,15 @@ public class StreamingValidator implements Validator { } } + private static void logWarning(String cluster, Schema schema, ImmutableSDField sd, DeployLogger logger, String message) { + logger.logApplicationPackage(Level.WARNING, "For search cluster '" + cluster + + "', streaming schema '" + schema.getName() + "', SD field '" + sd.getName() + "': " + message); + } + private static void warnStreamingGramMatching(String cluster, Schema schema, DeployLogger logger) { for (ImmutableSDField sd : schema.allConcreteFields()) { if (sd.getMatching().getType() == MatchType.GRAM) { - logger.logApplicationPackage(Level.WARNING, "For search cluster '" + cluster + "', streaming schema '" + schema.getName() + - "', SD field '" + sd.getName() + - "': n-gram matching is not supported for streaming search."); + logWarning(cluster, schema, sd, logger, "n-gram matching is not supported for streaming search."); } } } @@ -54,12 +58,12 @@ public class StreamingValidator implements Validator { private static void warnStreamingAttributes(String cluster, Schema schema, DeployLogger logger) { for (ImmutableSDField sd : schema.allConcreteFields()) { if (sd.doesAttributing()) { - warnStreamingAttribute(cluster, schema.getName(), sd, logger); + warnStreamingAttribute(cluster, schema, sd, logger); } } } - private static void warnStreamingAttribute(String cluster, String schema, ImmutableSDField sd, DeployLogger logger) { + private static void warnStreamingAttribute(String cluster, Schema schema, ImmutableSDField sd, DeployLogger logger) { // If the field is numeric, we can't print this, because we may have converted the field to // attribute indexing ourselves (IntegerIndex2Attribute) if (sd.getDataType() instanceof NumericDataType) return; @@ -67,13 +71,13 @@ public class StreamingValidator implements Validator { if (sd.getDataType() instanceof TensorDataType) { for (var fieldAttribute : sd.getAttributes().values()) { if (fieldAttribute.hnswIndexParams().isPresent()) { - logger.logApplicationPackage(Level.WARNING, - "For search cluster '" + cluster + "', streaming schema '" + schema + - "', SD field '" + sd.getName() + - "': hnsw index is not relevant and not supported, ignoring setting"); + logWarning(cluster, schema, sd, logger, + "hnsw index is not relevant and not supported, ignoring setting"); } } return; + } else if (sd.getDataType() == DataType.PREDICATE) { + logWarning(cluster, schema, sd, logger, "field type predicate is not supported for streaming search"); } } @@ -89,4 +93,19 @@ public class StreamingValidator implements Validator { } } + private static void warnStreamingIndexFields(String cluster, Schema schema, DeployLogger logger) { + for (ImmutableSDField sd : schema.allConcreteFields()) { + if (sd.doesIndexing()) { + warnStreamingIndexField(cluster, schema, sd, logger); + } + } + } + + private static void warnStreamingIndexField(String cluster, Schema schema, ImmutableSDField sd, DeployLogger logger) { + if (sd.getDataType() == DataType.URI) { + logWarning(cluster, schema, sd, logger, + "field type uri is not supported for streaming search, it will be handled as a string field"); + + } + } } diff --git a/config-model/src/test/java/com/yahoo/schema/PredicateDataTypeTestCase.java b/config-model/src/test/java/com/yahoo/schema/PredicateDataTypeTestCase.java index 7b25c914c63..2ca597105d2 100644 --- a/config-model/src/test/java/com/yahoo/schema/PredicateDataTypeTestCase.java +++ b/config-model/src/test/java/com/yahoo/schema/PredicateDataTypeTestCase.java @@ -132,7 +132,7 @@ public class PredicateDataTypeTestCase { String sd = searchSd(predicateFieldSd("indexing: summary | index | attribute\nindex { arity: 2 }")); ApplicationBuilder.createFromString(sd); }); - assertTrue(exception.getMessage().contains("For schema 'p', field 'pf': Use 'attribute' instead of 'index'. This will require a refeed if you have upgraded.")); + assertTrue(exception.getMessage().contains("For schema 'p', field 'pf': Use 'attribute' instead of 'index'.")); } @Test @@ -141,7 +141,7 @@ public class PredicateDataTypeTestCase { String sd = searchSd(predicateFieldSd("indexing: summary | index \nindex { arity: 2 }")); ApplicationBuilder.createFromString(sd); }); - assertTrue(exception.getMessage().contains("For schema 'p', field 'pf': Use 'attribute' instead of 'index'. This will require a refeed if you have upgraded.")); + assertTrue(exception.getMessage().contains("For schema 'p', field 'pf': Use 'attribute' instead of 'index'.")); } 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 2879baf7b88..4260b40fa24 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 @@ -56,6 +56,29 @@ public class StreamingValidatorTest { warnings.get(0)); } + @Test + void uriFieldWithIndexTriggersWarningInStreamingSearch() { + var logger = new TestableDeployLogger(); + var model = createModel(logger, "field URI type uri { indexing: index | summary }"); + var warnings = filter(logger.warnings); + assertEquals(1, warnings.size()); + assertEquals("For search cluster 'content', streaming schema 'test', SD field 'URI': " + + "field type uri is not supported for streaming search, it will be handled as a string field", + warnings.get(0)); + } + + @Test + void predicateFieldWithAttributeTriggersWarningInStreamingSearch() { + var logger = new TestableDeployLogger(); + var model = createModel(logger, "field pred type predicate { indexing: attribute | summary }"); + var warnings = filter(logger.warnings); + assertEquals(1, warnings.size()); + assertEquals("For search cluster 'content', streaming schema 'test', SD field 'pred': " + + "field type predicate is not supported for streaming search", + warnings.get(0)); + + } + private static VespaModel createModel(DeployLogger logger, String sdContent) { var builder = new DeployState.Builder(); builder.deployLogger(logger); |