summaryrefslogtreecommitdiffstats
path: root/config-model
diff options
context:
space:
mode:
authorGeir Storli <geirst@verizonmedia.com>2019-10-24 16:33:56 +0200
committerGitHub <noreply@github.com>2019-10-24 16:33:56 +0200
commita51c511c0e1043acfcc7e1196cc8ead2829d7245 (patch)
tree7d8f0152f1273b753f56576ec8c6fcc9a9890557 /config-model
parentb5e789393f052d55378c09118c1bb64e39563c99 (diff)
parent8a89bb044db2823b84411daefe09afe65f4c13f1 (diff)
Merge pull request #11084 from vespa-engine/toregge/update-summary-disk-access-validator-for-struct-fields
Update SummaryDiskAccessValidator for struct fields.
Diffstat (limited to 'config-model')
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/SummaryDiskAccessValidator.java12
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/SummaryTestCase.java32
2 files changed, 42 insertions, 2 deletions
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/SummaryDiskAccessValidator.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/SummaryDiskAccessValidator.java
index 8c0c6a74037..2fab941b10e 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/SummaryDiskAccessValidator.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/SummaryDiskAccessValidator.java
@@ -7,11 +7,14 @@ import com.yahoo.searchdefinition.derived.SummaryClass;
import com.yahoo.searchdefinition.document.ImmutableSDField;
import com.yahoo.vespa.documentmodel.DocumentSummary;
import com.yahoo.vespa.documentmodel.SummaryField;
+import com.yahoo.vespa.documentmodel.SummaryTransform;
import com.yahoo.vespa.model.container.search.QueryProfiles;
import java.util.Optional;
import java.util.logging.Level;
+import static com.yahoo.searchdefinition.document.ComplexAttributeFieldUtils.isComplexFieldWithOnlyStructFieldAttributes;
+
/**
* Emits a warning for summaries which accesses disk.
*
@@ -41,7 +44,7 @@ public class SummaryDiskAccessValidator extends Processor {
if (field == null && ! source.getName().equals(SummaryClass.DOCUMENT_ID_FIELD))
throw new IllegalArgumentException(summaryField + " in " + summary + " references " +
source + ", but this field does not exist");
- if ( ! isInMemory(field) && ! summary.isFromDisk()) {
+ if ( ! isInMemory(field, summaryField) && ! summary.isFromDisk()) {
deployLogger.log(Level.WARNING, summaryField + " in " + summary + " references " +
source + ", which is not an attribute: Using this " +
"summary will cause disk accesses. " +
@@ -52,8 +55,13 @@ public class SummaryDiskAccessValidator extends Processor {
}
}
- private boolean isInMemory(ImmutableSDField field) {
+ private boolean isInMemory(ImmutableSDField field, SummaryField summaryField) {
if (field == null) return false; // For DOCUMENT_ID_FIELD, which may be implicit, but is then not in memory
+ if (isComplexFieldWithOnlyStructFieldAttributes(field) &&
+ (summaryField.getTransform() == SummaryTransform.ATTRIBUTECOMBINER ||
+ summaryField.getTransform() == SummaryTransform.MATCHED_ATTRIBUTE_ELEMENTS_FILTER)) {
+ return true;
+ }
return field.doesAttributing();
}
diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/SummaryTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/SummaryTestCase.java
index f94ac1c285c..6fbd80adaa9 100644
--- a/config-model/src/test/java/com/yahoo/searchdefinition/SummaryTestCase.java
+++ b/config-model/src/test/java/com/yahoo/searchdefinition/SummaryTestCase.java
@@ -97,4 +97,36 @@ public class SummaryTestCase {
assertTrue(logger.entries.isEmpty());
}
+ @Test
+ public void testStructMemorySummary() throws ParseException {
+ String sd =
+ "search structmemorysummary {\n" +
+ " document structmemorysummary {\n" +
+ " struct elem {\n" +
+ " field name type string {}\n" +
+ " field weight type int {}\n" +
+ " }\n" +
+ " field elem_array type array<elem> {\n" +
+ " indexing: summary\n" +
+ " struct-field name {\n" +
+ " indexing: attribute\n" +
+ " }\n" +
+ " struct-field weight {\n" +
+ " indexing: attribute\n" +
+ " }\n" +
+ " }\n" +
+ " }\n" +
+ " document-summary filtered {\n" +
+ " summary elem_array_filtered type array<elem> {\n" +
+ " source: elem_array\n" +
+ " matched-elements-only\n" +
+ " }\n" +
+ " }\n" +
+ "\n" +
+ "}";
+ DeployLoggerStub logger = new DeployLoggerStub();
+ SearchBuilder.createFromString(sd, logger);
+ assertTrue(logger.entries.isEmpty());
+ }
+
}