diff options
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); } |