diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2024-03-06 08:37:32 +0100 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2024-03-06 09:09:57 +0100 |
commit | bd1de86cef2903a4918a88e31cad72ef428365ce (patch) | |
tree | 3887e712d437a2f475f9b671f1eec37c1db410d8 /config-model/src/main/java/com/yahoo/schema | |
parent | 266b744d85348796a6ca8e3586e8ac6e758f8cae (diff) |
- Set the complete list of the config where it contains the complete world.
- Append where it is intended.
This is a workaround for not having a map type in config. Sometimes it works to
have multiple producers produce the same config, sometimes not. This tries to make it more deterministic.
Currently other tricks have been employed to avoid appending more to the list than intended.
Diffstat (limited to 'config-model/src/main/java/com/yahoo/schema')
9 files changed, 69 insertions, 60 deletions
diff --git a/config-model/src/main/java/com/yahoo/schema/derived/ImportedFields.java b/config-model/src/main/java/com/yahoo/schema/derived/ImportedFields.java index 765ad858535..a781adcefb7 100644 --- a/config-model/src/main/java/com/yahoo/schema/derived/ImportedFields.java +++ b/config-model/src/main/java/com/yahoo/schema/derived/ImportedFields.java @@ -9,6 +9,8 @@ import com.yahoo.schema.document.ImportedComplexField; import com.yahoo.schema.document.ImportedField; import com.yahoo.vespa.config.search.ImportedFieldsConfig; +import java.util.ArrayList; +import java.util.List; import java.util.Optional; import static com.yahoo.schema.document.ComplexAttributeFieldUtils.isArrayOfSimpleStruct; @@ -40,8 +42,11 @@ public class ImportedFields extends Derived implements ImportedFieldsConfig.Prod @Override public void getConfig(ImportedFieldsConfig.Builder builder) { + // Replace if (importedFields.isPresent()) { - importedFields.get().fields().forEach( (name, field) -> considerField(builder, field)); + List<ImportedField> imported = new ArrayList<>(); + importedFields.get().fields().forEach( (name, field) -> considerField(imported, field)); + builder.attribute(imported.stream().map(ImportedFields::createAttributeBuilder).toList()); } } @@ -49,47 +54,46 @@ public class ImportedFields extends Derived implements ImportedFieldsConfig.Prod return fieldName.indexOf('.') != -1; } - private static void considerField(ImportedFieldsConfig.Builder builder, ImportedField field) { + private static void considerField(List<ImportedField> importedFields, ImportedField field) { if (field instanceof ImportedComplexField) { - considerComplexField(builder, (ImportedComplexField) field); + considerComplexField(importedFields, (ImportedComplexField) field); } else { - considerSimpleField(builder, field); + considerSimpleField(importedFields, field); } } - private static void considerComplexField(ImportedFieldsConfig.Builder builder, ImportedComplexField field) { + private static void considerComplexField(List<ImportedField> importedFields, ImportedComplexField field) { ImmutableSDField targetField = field.targetField(); if (GeoPos.isAnyPos(targetField)) { // no action needed } else if (isArrayOfSimpleStruct(targetField)) { - considerNestedFields(builder, field); + considerNestedFields(importedFields, field); } else if (isMapOfSimpleStruct(targetField)) { - considerSimpleField(builder, field.getNestedField("key")); - considerNestedFields(builder, field.getNestedField("value")); + considerSimpleField(importedFields, field.getNestedField("key")); + considerNestedFields(importedFields, field.getNestedField("value")); } else if (isMapOfPrimitiveType(targetField)) { - considerSimpleField(builder, field.getNestedField("key")); - considerSimpleField(builder, field.getNestedField("value")); + considerSimpleField(importedFields, field.getNestedField("key")); + considerSimpleField(importedFields, field.getNestedField("value")); } } - private static void considerNestedFields(ImportedFieldsConfig.Builder builder, ImportedField field) { - if (field instanceof ImportedComplexField) { - ImportedComplexField complexField = (ImportedComplexField) field; - complexField.getNestedFields().forEach(nestedField -> considerSimpleField(builder, nestedField)); + private static void considerNestedFields(List<ImportedField> importedFields, ImportedField field) { + if (field instanceof ImportedComplexField complexField) { + complexField.getNestedFields().forEach(nestedField -> considerSimpleField(importedFields, nestedField)); } } - private static void considerSimpleField(ImportedFieldsConfig.Builder builder, ImportedField field) { + private static void considerSimpleField(List<ImportedField> importedFields, ImportedField field) { ImmutableSDField targetField = field.targetField(); String targetFieldName = targetField.getName(); if (!isNestedFieldName(targetFieldName)) { if (targetField.doesAttributing()) { - builder.attribute.add(createAttributeBuilder(field)); + importedFields.add(field); } } else { Attribute attribute = targetField.getAttribute(); if (attribute != null) { - builder.attribute.add(createAttributeBuilder(field)); + importedFields.add(field); } } } diff --git a/config-model/src/main/java/com/yahoo/schema/derived/IndexInfo.java b/config-model/src/main/java/com/yahoo/schema/derived/IndexInfo.java index 34f485b7f02..b0cf4a0013c 100644 --- a/config-model/src/main/java/com/yahoo/schema/derived/IndexInfo.java +++ b/config-model/src/main/java/com/yahoo/schema/derived/IndexInfo.java @@ -316,6 +316,7 @@ public class IndexInfo extends Derived implements IndexInfoConfig.Producer { @Override public void getConfig(IndexInfoConfig.Builder builder) { + // Append IndexInfoConfig.Indexinfo.Builder iiB = new IndexInfoConfig.Indexinfo.Builder(); iiB.name(getName()); for (IndexCommand command : commands) { diff --git a/config-model/src/main/java/com/yahoo/schema/derived/IndexSchema.java b/config-model/src/main/java/com/yahoo/schema/derived/IndexSchema.java index d25ada26c6c..1c22e80e579 100644 --- a/config-model/src/main/java/com/yahoo/schema/derived/IndexSchema.java +++ b/config-model/src/main/java/com/yahoo/schema/derived/IndexSchema.java @@ -109,30 +109,33 @@ public class IndexSchema extends Derived implements IndexschemaConfig.Producer { return "indexschema"; } - @Override - public void getConfig(IndexschemaConfig.Builder icB) { - for (IndexField f : fields) { - IndexschemaConfig.Indexfield.Builder ifB = new IndexschemaConfig.Indexfield.Builder() + private static IndexschemaConfig.Indexfield.Builder createIndexFieldConfig(IndexField f) { + var ifB = new IndexschemaConfig.Indexfield.Builder() .name(f.getName()) .datatype(IndexschemaConfig.Indexfield.Datatype.Enum.valueOf(f.getType())) .prefix(f.hasPrefix()) .phrases(false) .positions(true) .interleavedfeatures(f.useInterleavedFeatures()); - if (!f.getCollectionType().equals("SINGLE")) { - ifB.collectiontype(IndexschemaConfig.Indexfield.Collectiontype.Enum.valueOf(f.getCollectionType())); - } - icB.indexfield(ifB); - } - for (FieldSet fieldSet : fieldSets.values()) { - IndexschemaConfig.Fieldset.Builder fsB = new IndexschemaConfig.Fieldset.Builder() - .name(fieldSet.getName()); - for (String f : fieldSet.getFieldNames()) { - fsB.field(new IndexschemaConfig.Fieldset.Field.Builder() - .name(f)); - } - icB.fieldset(fsB); + if (!f.getCollectionType().equals("SINGLE")) { + ifB.collectiontype(IndexschemaConfig.Indexfield.Collectiontype.Enum.valueOf(f.getCollectionType())); } + return ifB; + } + + private static IndexschemaConfig.Fieldset.Builder createFieldSetConfig(FieldSet fieldSet) { + var fsB = new IndexschemaConfig.Fieldset.Builder().name(fieldSet.getName()); + for (String f : fieldSet.getFieldNames()) { + fsB.field(new IndexschemaConfig.Fieldset.Field.Builder().name(f)); + } + return fsB; + } + + @Override + public void getConfig(IndexschemaConfig.Builder icB) { + // Replace + icB.indexfield(fields.stream().map(IndexSchema::createIndexFieldConfig).toList()); + icB.fieldset(fieldSets.values().stream().map(IndexSchema::createFieldSetConfig).toList()); } static List<Field> flattenField(Field field) { diff --git a/config-model/src/main/java/com/yahoo/schema/derived/IndexingScript.java b/config-model/src/main/java/com/yahoo/schema/derived/IndexingScript.java index 9f41f4d3542..7245e3f266d 100644 --- a/config-model/src/main/java/com/yahoo/schema/derived/IndexingScript.java +++ b/config-model/src/main/java/com/yahoo/schema/derived/IndexingScript.java @@ -95,6 +95,7 @@ public final class IndexingScript extends Derived implements IlscriptsConfig.Pro @Override public void getConfig(IlscriptsConfig.Builder configBuilder) { + // Append IlscriptsConfig.Ilscript.Builder ilscriptBuilder = new IlscriptsConfig.Ilscript.Builder(); ilscriptBuilder.doctype(getName()); ilscriptBuilder.docfield(docFields); diff --git a/config-model/src/main/java/com/yahoo/schema/derived/Juniperrc.java b/config-model/src/main/java/com/yahoo/schema/derived/Juniperrc.java index ab1bd256ef9..7eefb9e3396 100644 --- a/config-model/src/main/java/com/yahoo/schema/derived/Juniperrc.java +++ b/config-model/src/main/java/com/yahoo/schema/derived/Juniperrc.java @@ -44,18 +44,21 @@ public class Juniperrc extends Derived implements JuniperrcConfig.Producer { @Override protected String getDerivedName() { return "juniperrc"; } + private static JuniperrcConfig.Override.Builder createOverride(String name) { + return new JuniperrcConfig.Override.Builder() + .fieldname(name) + .length(64*Mb) + .max_matches(1) + .min_length(8192) + .surround_max(64*Mb); + } + @Override public void getConfig(JuniperrcConfig.Builder builder) { - if (boldingFields.size() != 0) { + // Replace + if (!boldingFields.isEmpty()) { builder.prefix(true); - for (String name : boldingFields) { - builder.override(new JuniperrcConfig.Override.Builder() - .fieldname(name) - .length(64*Mb) - .max_matches(1) - .min_length(8192) - .surround_max(64*Mb)); - } + builder.override(boldingFields.stream().map(Juniperrc::createOverride).toList()); } } diff --git a/config-model/src/main/java/com/yahoo/schema/derived/SchemaInfo.java b/config-model/src/main/java/com/yahoo/schema/derived/SchemaInfo.java index d51526a4ed4..fb6d7fb70ec 100644 --- a/config-model/src/main/java/com/yahoo/schema/derived/SchemaInfo.java +++ b/config-model/src/main/java/com/yahoo/schema/derived/SchemaInfo.java @@ -65,6 +65,7 @@ public final class SchemaInfo extends Derived implements SchemaInfoConfig.Produc @Override public void getConfig(SchemaInfoConfig.Builder builder) { + // Append var schemaBuilder = new SchemaInfoConfig.Schema.Builder(); schemaBuilder.name(schema.getName()); addFieldsConfig(schemaBuilder); diff --git a/config-model/src/main/java/com/yahoo/schema/derived/Summaries.java b/config-model/src/main/java/com/yahoo/schema/derived/Summaries.java index 7b96f5ab654..51c648aa1be 100644 --- a/config-model/src/main/java/com/yahoo/schema/derived/Summaries.java +++ b/config-model/src/main/java/com/yahoo/schema/derived/Summaries.java @@ -41,11 +41,10 @@ public class Summaries extends Derived implements SummaryConfig.Producer { @Override public void getConfig(SummaryConfig.Builder builder) { + // Replace builder.defaultsummaryid(summaries.isEmpty() ? -1 : summaries.get(0).hashCode()); builder.usev8geopositions(useV8GeoPositions); - for (SummaryClass summaryClass : summaries) { - builder.classes(summaryClass.getSummaryClassConfig()); - } + builder.classes(summaries.stream().map(SummaryClass::getSummaryClassConfig).toList()); } } diff --git a/config-model/src/main/java/com/yahoo/schema/derived/VsmFields.java b/config-model/src/main/java/com/yahoo/schema/derived/VsmFields.java index f2ad6a3ba2f..b2b2e9d3a14 100644 --- a/config-model/src/main/java/com/yahoo/schema/derived/VsmFields.java +++ b/config-model/src/main/java/com/yahoo/schema/derived/VsmFields.java @@ -108,12 +108,9 @@ public class VsmFields extends Derived implements VsmfieldsConfig.Producer { @Override public void getConfig(VsmfieldsConfig.Builder vsB) { - for (StreamingField streamingField : fields.values()) { - vsB.fieldspec(streamingField.getFieldSpecConfig()); - } - for (StreamingDocumentType streamingDocType : doctypes.values()) { - vsB.documenttype(streamingDocType.getDocTypeConfig()); - } + // Replace + vsB.fieldspec(fields.values().stream().map(StreamingField::getFieldSpecConfig).toList()); + vsB.documenttype(doctypes.values().stream().map(StreamingDocumentType::getDocTypeConfig).toList()); } private static boolean isAttributeField(ImmutableSDField field, boolean isStructField, boolean ignoreAttributeAspect) { diff --git a/config-model/src/main/java/com/yahoo/schema/derived/VsmSummary.java b/config-model/src/main/java/com/yahoo/schema/derived/VsmSummary.java index e3d7becd86a..248cca33bc6 100644 --- a/config-model/src/main/java/com/yahoo/schema/derived/VsmSummary.java +++ b/config-model/src/main/java/com/yahoo/schema/derived/VsmSummary.java @@ -96,14 +96,14 @@ public class VsmSummary extends Derived implements VsmsummaryConfig.Producer { @Override public void getConfig(VsmsummaryConfig.Builder vB) { - for (Map.Entry<SummaryField, List<String>> entry : summaryMap.entrySet()) { - VsmsummaryConfig.Fieldmap.Builder fmB = new VsmsummaryConfig.Fieldmap.Builder().summary(entry.getKey().getName()); - for (String field : entry.getValue()) { - fmB.document(new VsmsummaryConfig.Fieldmap.Document.Builder().field(field)); - } - fmB.command(VsmsummaryConfig.Fieldmap.Command.Enum.valueOf(entry.getKey().getVsmCommand().toString())); - vB.fieldmap(fmB); - } + // Replace + vB.fieldmap( + summaryMap.entrySet().stream().map(entry -> new VsmsummaryConfig.Fieldmap.Builder() + .summary(entry.getKey().getName()) + .document(entry.getValue().stream().map(field -> new VsmsummaryConfig.Fieldmap.Document.Builder().field(field)).toList()) + .command(VsmsummaryConfig.Fieldmap.Command.Enum.valueOf(entry.getKey().getVsmCommand().toString())) + ).toList() + ); } } |