aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@gmail.com>2022-09-05 10:49:47 +0200
committerJon Bratseth <bratseth@gmail.com>2022-09-05 10:49:47 +0200
commit61c0b3e7ada17c586ccb7e526c398d92de7a9400 (patch)
tree06bb9c1d0b79ec3be8138d5904d926ddd823118f
parent79161e86b4d2f60dd4288e3669a704b0abd16820 (diff)
Warn oonce per summary
-rw-r--r--config-lib/src/main/java/com/yahoo/config/ModelReference.java2
-rw-r--r--config-model/src/main/java/com/yahoo/schema/processing/SummaryDiskAccessValidator.java18
-rw-r--r--config-model/src/test/java/com/yahoo/schema/SummaryTestCase.java7
3 files changed, 17 insertions, 10 deletions
diff --git a/config-lib/src/main/java/com/yahoo/config/ModelReference.java b/config-lib/src/main/java/com/yahoo/config/ModelReference.java
index f3adfbfb531..13bb5737c6f 100644
--- a/config-lib/src/main/java/com/yahoo/config/ModelReference.java
+++ b/config-lib/src/main/java/com/yahoo/config/ModelReference.java
@@ -92,7 +92,7 @@ public class ModelReference {
/**
* Creates a model reference from a three-part string on the form
* <code>modelId url path</code>
- * Each of the elements are either a value not containing space, or empty represented by "".
+ * Each of the elements is either a value not containing space, or empty represented by "".
*/
public static ModelReference valueOf(String s) {
String[] parts = s.split(" ");
diff --git a/config-model/src/main/java/com/yahoo/schema/processing/SummaryDiskAccessValidator.java b/config-model/src/main/java/com/yahoo/schema/processing/SummaryDiskAccessValidator.java
index 40c38a350b0..2294e8f3e09 100644
--- a/config-model/src/main/java/com/yahoo/schema/processing/SummaryDiskAccessValidator.java
+++ b/config-model/src/main/java/com/yahoo/schema/processing/SummaryDiskAccessValidator.java
@@ -11,7 +11,9 @@ import com.yahoo.vespa.documentmodel.SummaryField;
import com.yahoo.vespa.documentmodel.SummaryTransform;
import com.yahoo.vespa.model.container.search.QueryProfiles;
+import java.util.LinkedHashSet;
import java.util.Optional;
+import java.util.Set;
import java.util.logging.Level;
import static com.yahoo.schema.document.ComplexAttributeFieldUtils.isComplexFieldWithOnlyStructFieldAttributes;
@@ -38,6 +40,7 @@ public class SummaryDiskAccessValidator extends Processor {
for (DocumentSummary summary : schema.getSummaries().values()) {
for (SummaryField summaryField : summary.getSummaryFields().values()) {
+ Set<String> implicitDiskFields = new LinkedHashSet<>();
for (SummaryField.Source source : summaryField.getSources()) {
ImmutableSDField field = schema.getField(source.getName());
if (field == null)
@@ -45,13 +48,16 @@ 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, summaryField) && ! summary.isFromDisk()) {
- deployLogger.logApplicationPackage(Level.WARNING, summaryField + " in " + summary + " references " +
- source + ", which is not an attribute: Using this " +
- "summary will cause disk accesses. " +
- "Set 'from-disk' on this summary class to silence this warning.");
- }
+ if ( ! isInMemory(field, summaryField) && ! summary.isFromDisk())
+ implicitDiskFields.add(summaryField.getName());
}
+ if ( ! implicitDiskFields.isEmpty())
+ deployLogger.logApplicationPackage(Level.WARNING, "In " + schema + ", " + summary +
+ ": Fields " + implicitDiskFields + " references " +
+ "non-attribute fields: Using this " +
+ "summary will cause disk accesses. " +
+ "Set 'from-disk' on this summary class to silence this warning.");
+
}
}
}
diff --git a/config-model/src/test/java/com/yahoo/schema/SummaryTestCase.java b/config-model/src/test/java/com/yahoo/schema/SummaryTestCase.java
index f33dc46f29b..b5007bba494 100644
--- a/config-model/src/test/java/com/yahoo/schema/SummaryTestCase.java
+++ b/config-model/src/test/java/com/yahoo/schema/SummaryTestCase.java
@@ -63,9 +63,10 @@ public class SummaryTestCase {
ApplicationBuilder.createFromString(sd, logger);
assertEquals(1, logger.entries.size());
assertEquals(Level.WARNING, logger.entries.get(0).level);
- assertEquals("summary field 'foo2' in document summary 'foobar' references source field 'ondisk', " +
- "which is not an attribute: Using this summary will cause disk accesses. " +
- "Set 'from-disk' on this summary class to silence this warning.",
+ assertEquals("In schema 'disksummary', document summary 'foobar': " +
+ "Fields [foo2] references non-attribute fields: " +
+ "Using this summary will cause disk accesses. " +
+ "Set 'from-disk' on this summary class to silence this warning.",
logger.entries.get(0).message);
}