summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGeir Storli <geirst@vespa.ai>2024-03-26 15:44:22 +0100
committerGitHub <noreply@github.com>2024-03-26 15:44:22 +0100
commite0cdfbd76d9e8311811d021006862f93723ac30a (patch)
tree5db09bdf47167329133706c2309e40c0935b81aa
parent32ad1a732962c9ea9d7b0693dfa880ef74e9ddd0 (diff)
parent0377afe9749ca49bfb38c7b621df9e34db525e6c (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.
-rw-r--r--config-model/src/main/java/com/yahoo/schema/processing/PredicateProcessor.java2
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/application/validation/StreamingValidator.java37
-rw-r--r--config-model/src/test/java/com/yahoo/schema/PredicateDataTypeTestCase.java4
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/application/validation/StreamingValidatorTest.java23
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);