diff options
37 files changed, 1400 insertions, 1867 deletions
diff --git a/application-preprocessor/src/test/java/com/yahoo/application/preprocessor/ApplicationPreprocessorTest.java b/application-preprocessor/src/test/java/com/yahoo/application/preprocessor/ApplicationPreprocessorTest.java index 1fc4d08b405..5039b05b393 100644 --- a/application-preprocessor/src/test/java/com/yahoo/application/preprocessor/ApplicationPreprocessorTest.java +++ b/application-preprocessor/src/test/java/com/yahoo/application/preprocessor/ApplicationPreprocessorTest.java @@ -2,17 +2,15 @@ package com.yahoo.application.preprocessor; import org.junit.Rule; -import org.junit.rules.TemporaryFolder; - -import java.io.File; -import java.io.IOException; -import java.util.Optional; - import org.junit.Test; +import org.junit.rules.TemporaryFolder; import org.xml.sax.SAXException; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.TransformerException; +import java.io.File; +import java.io.IOException; +import java.util.Optional; public class ApplicationPreprocessorTest { diff --git a/config-model/src/main/java/com/yahoo/vespa/configmodel/producers/DocumentTypes.java b/config-model/src/main/java/com/yahoo/vespa/configmodel/producers/DocumentTypes.java index 630e9f0c097..ba41fa0f5b3 100644 --- a/config-model/src/main/java/com/yahoo/vespa/configmodel/producers/DocumentTypes.java +++ b/config-model/src/main/java/com/yahoo/vespa/configmodel/producers/DocumentTypes.java @@ -27,29 +27,16 @@ public class DocumentTypes { } public DocumenttypesConfig.Builder produce(DocumentModel model, DocumenttypesConfig.Builder builder) { - /* later: - if (some flag) { - return produceDocTypes(model, builder); - } - */ builder.usev8geopositions(this.useV8GeoPositions); Map<NewDocumentType.Name, NewDocumentType> produced = new HashMap<>(); + var indexMap = new IdxMap(); for (NewDocumentType documentType : model.getDocumentManager().getTypes()) { - produceInheritOrder(documentType, builder, produced); + docTypeInheritOrder(documentType, builder, produced, indexMap); } + indexMap.verifyAllDone(); return builder; } - private void produceInheritOrder(NewDocumentType documentType, DocumenttypesConfig.Builder builder, Map<NewDocumentType.Name, NewDocumentType> produced) { - if (!produced.containsKey(documentType.getFullName())) { - for (NewDocumentType inherited : documentType.getInherited()) { - produceInheritOrder(inherited, builder, produced); - } - buildConfig(documentType, builder); - produced.put(documentType.getFullName(), documentType); - } - } - static private <T> List<T> sortedList(Collection<T> unsorted, Comparator<T> cmp) { var list = new ArrayList<T>(); list.addAll(unsorted); @@ -57,203 +44,6 @@ public class DocumentTypes { return list; } - private void buildConfig(NewDocumentType documentType, DocumenttypesConfig.Builder builder) { - if (documentType == VespaDocumentType.INSTANCE) { - return; - } - DocumenttypesConfig.Documenttype.Builder db = new DocumenttypesConfig.Documenttype.Builder(); - db. - id(documentType.getId()). - name(documentType.getName()). - headerstruct(documentType.getContentStruct().getId()); - Set<Integer> built = new HashSet<>(); - for (NewDocumentType inherited : documentType.getInherited()) { - db.inherits(new DocumenttypesConfig.Documenttype.Inherits.Builder().id(inherited.getId())); - markAsBuilt(built, inherited.getAllTypes()); - } - for (DataType dt : sortedList(documentType.getTypes(), (a,b) -> a.getName().compareTo(b.getName()))) { - buildConfig(dt, db, built); - } - for (AnnotationType annotation : sortedList(documentType.getAnnotations(), (a,b) -> a.getName().compareTo(b.getName()))) { - DocumenttypesConfig.Documenttype.Annotationtype.Builder atb = new DocumenttypesConfig.Documenttype.Annotationtype.Builder(); - db.annotationtype(atb); - buildConfig(annotation, atb); - } - buildConfig(documentType.getFieldSets(), db); - buildImportedFieldsConfig(documentType.getImportedFieldNames(), db); - builder.documenttype(db); - } - - private void buildConfig(Set<FieldSet> fieldSets, DocumenttypesConfig.Documenttype.Builder db) { - for (FieldSet fs : fieldSets) { - buildConfig(fs, db); - } - } - - private void buildConfig(FieldSet fs, DocumenttypesConfig.Documenttype.Builder db) { - db.fieldsets(fs.getName(), new DocumenttypesConfig.Documenttype.Fieldsets.Builder().fields(fs.getFieldNames())); - } - - private void markAsBuilt(Set<Integer> built, DataTypeCollection typeCollection) { - for (DataType type : typeCollection.getTypes()) { - built.add(type.getId()); - } - } - - private void buildConfig(AnnotationType annotation, DocumenttypesConfig.Documenttype.Annotationtype.Builder builder) { - builder. - id(annotation.getId()). - name(annotation.getName()); - DataType dt = annotation.getDataType(); - if (dt != null) { - builder.datatype(dt.getId()); - } - for (AnnotationType inherited : annotation.getInheritedTypes()) { - builder.inherits(new DocumenttypesConfig.Documenttype.Annotationtype.Inherits.Builder().id(inherited.getId())); - } - } - - private void buildConfig(DataType type, DocumenttypesConfig.Documenttype.Builder documentBuilder, Set<Integer> built) { - if ((VespaDocumentType.INSTANCE.getDataType(type.getId()) == null) && !built.contains(type.getId())) { - built.add(type.getId()); - DocumenttypesConfig.Documenttype.Datatype.Builder dataTypeBuilder = new DocumenttypesConfig.Documenttype.Datatype.Builder(); - dataTypeBuilder.id(type.getId()); - if (type instanceof TemporaryUnknownType) { - throw new IllegalArgumentException("Can not create config for temporary data type: " + type.getName()); - } - if (type instanceof OwnedTemporaryType) { - throw new IllegalArgumentException("Can not create config for temporary data type: " + type.getName()); - } - if (type instanceof StructDataType) { - buildConfig((StructDataType) type, dataTypeBuilder, documentBuilder, built); - } else if (type instanceof ArrayDataType) { - buildConfig((ArrayDataType) type, dataTypeBuilder, documentBuilder, built); - } else if (type instanceof WeightedSetDataType) { - buildConfig((WeightedSetDataType) type, dataTypeBuilder, documentBuilder, built); - } else if (type instanceof MapDataType) { - buildConfig((MapDataType) type, dataTypeBuilder, documentBuilder, built); - } else if (type instanceof AnnotationReferenceDataType) { - buildConfig((AnnotationReferenceDataType) type, dataTypeBuilder); - } else if (type instanceof TensorDataType) { - // The type of the tensor is not stored here but instead in each field as detailed type information - // to provide better compatibility. A tensor field can have its tensorType changed (in compatible ways) - // without changing the field type and thus requiring data refeed - return; - } else if (type instanceof NewDocumentReferenceDataType) { - var refType = (NewDocumentReferenceDataType) type; - if (refType.isTemporary()) { - throw new IllegalArgumentException("Still temporary: " + refType); - } - buildConfig(refType, documentBuilder); - return; - } else { - return; - } - documentBuilder.datatype(dataTypeBuilder); - } - } - - private void buildImportedFieldsConfig(Collection<String> fieldNames, DocumenttypesConfig.Documenttype.Builder builder) { - for (String fieldName : fieldNames) { - var ib = new DocumenttypesConfig.Documenttype.Importedfield.Builder(); - ib.name(fieldName); - builder.importedfield(ib); - } - } - - private void buildConfig(StructDataType type, - DocumenttypesConfig.Documenttype.Datatype.Builder dataTypeBuilder, - DocumenttypesConfig.Documenttype.Builder documentBuilder, - Set<Integer> built) { - dataTypeBuilder.type(DocumenttypesConfig.Documenttype.Datatype.Type.Enum.STRUCT); - DocumenttypesConfig.Documenttype.Datatype.Sstruct.Builder structBuilder = new DocumenttypesConfig.Documenttype.Datatype.Sstruct.Builder(); - dataTypeBuilder.sstruct(structBuilder); - structBuilder.name(type.getName()); - for (com.yahoo.document.Field field : type.getFields()) { - DocumenttypesConfig.Documenttype.Datatype.Sstruct.Field.Builder builder = - new DocumenttypesConfig.Documenttype.Datatype.Sstruct.Field.Builder(); - builder.name(field.getName()). - id(field.getId()). - datatype(field.getDataType().getId()); - if (field.getDataType() instanceof TensorDataType) { - builder.detailedtype(((TensorDataType) field.getDataType()).getTensorType().toString()); - } - structBuilder.field(builder); - buildConfig(field.getDataType(), documentBuilder, built); - } - } - - private void buildConfig(ArrayDataType type, - DocumenttypesConfig.Documenttype.Datatype.Builder dataTypeBuilder, - DocumenttypesConfig.Documenttype.Builder documentBuilder, - Set<Integer> built) { - dataTypeBuilder. - type(DocumenttypesConfig.Documenttype.Datatype.Type.Enum.ARRAY). - array(new DocumenttypesConfig.Documenttype.Datatype.Array.Builder(). - element(new DocumenttypesConfig.Documenttype.Datatype.Array.Element.Builder().id(type.getNestedType().getId()))); - buildConfig(type.getNestedType(), documentBuilder, built); - } - - private void buildConfig(WeightedSetDataType type, - DocumenttypesConfig.Documenttype.Datatype.Builder dataTypeBuilder, - DocumenttypesConfig.Documenttype.Builder documentBuilder, - Set<Integer> built) { - dataTypeBuilder.type(DocumenttypesConfig.Documenttype.Datatype.Type.Enum.WSET). - wset(new DocumenttypesConfig.Documenttype.Datatype.Wset.Builder(). - key(new DocumenttypesConfig.Documenttype.Datatype.Wset.Key.Builder(). - id(type.getNestedType().getId())). - createifnonexistent(type.createIfNonExistent()). - removeifzero(type.removeIfZero())); - buildConfig(type.getNestedType(), documentBuilder, built); - } - - private void buildConfig(MapDataType type, - DocumenttypesConfig.Documenttype.Datatype.Builder dataTypeBuilder, - DocumenttypesConfig.Documenttype.Builder documentBuilder, - Set<Integer> built) { - dataTypeBuilder. - type(DocumenttypesConfig.Documenttype.Datatype.Type.Enum.MAP). - map(new DocumenttypesConfig.Documenttype.Datatype.Map.Builder(). - key(new DocumenttypesConfig.Documenttype.Datatype.Map.Key.Builder(). - id(type.getKeyType().getId())). - value(new DocumenttypesConfig.Documenttype.Datatype.Map.Value.Builder(). - id(type.getValueType().getId()))); - buildConfig(type.getKeyType(), documentBuilder, built); - buildConfig(type.getValueType(), documentBuilder, built); - } - - private void buildConfig(AnnotationReferenceDataType type, - DocumenttypesConfig.Documenttype.Datatype.Builder dataTypeBuilder) { - dataTypeBuilder. - type(DocumenttypesConfig.Documenttype.Datatype.Type.Enum.ANNOTATIONREF). - annotationref(new DocumenttypesConfig.Documenttype.Datatype.Annotationref.Builder(). - annotation(new DocumenttypesConfig.Documenttype.Datatype.Annotationref.Annotation.Builder(). - id(type.getAnnotationType().getId()))); - } - - private void buildConfig(NewDocumentReferenceDataType type, - DocumenttypesConfig.Documenttype.Builder documentBuilder) { - NewDocumentReferenceDataType refType = type; - DocumenttypesConfig.Documenttype.Referencetype.Builder refBuilder = - new DocumenttypesConfig.Documenttype.Referencetype.Builder(); - refBuilder.id(refType.getId()); - refBuilder.target_type_id(type.getTargetTypeId()); - documentBuilder.referencetype(refBuilder); - } - - // Alternate (new) way to build config: - - private DocumenttypesConfig.Builder produceDocTypes(DocumentModel model, DocumenttypesConfig.Builder builder) { - builder.usev8geopositions(this.useV8GeoPositions); - Map<NewDocumentType.Name, NewDocumentType> produced = new HashMap<>(); - var indexMap = new IdxMap(); - for (NewDocumentType documentType : model.getDocumentManager().getTypes()) { - docTypeInheritOrder(documentType, builder, produced, indexMap); - } - indexMap.verifyAllDone(); - return builder; - } - private void docTypeInheritOrder(NewDocumentType documentType, DocumenttypesConfig.Builder builder, Map<NewDocumentType.Name, NewDocumentType> produced, diff --git a/config-model/src/test/configmodel/types/documenttypes.cfg b/config-model/src/test/configmodel/types/documenttypes.cfg index 0501aa58784..7ea2fa42a2a 100644 --- a/config-model/src/test/configmodel/types/documenttypes.cfg +++ b/config-model/src/test/configmodel/types/documenttypes.cfg @@ -1,577 +1,322 @@ enablecompression false usev8geopositions false -documenttype[0].id -853072901 -documenttype[0].name "types" -documenttype[0].version 0 -documenttype[0].headerstruct 1328581348 -documenttype[0].bodystruct 0 -documenttype[0].inherits[0].id 8 -documenttype[0].datatype[0].id -1486737430 -documenttype[0].datatype[0].type ARRAY -documenttype[0].datatype[0].array.element.id 2 -documenttype[0].datatype[0].map.key.id 0 -documenttype[0].datatype[0].map.value.id 0 -documenttype[0].datatype[0].wset.key.id 0 -documenttype[0].datatype[0].wset.createifnonexistent false -documenttype[0].datatype[0].wset.removeifzero false -documenttype[0].datatype[0].annotationref.annotation.id 0 -documenttype[0].datatype[0].sstruct.name "" -documenttype[0].datatype[0].sstruct.version 0 -documenttype[0].datatype[0].sstruct.compression.type NONE -documenttype[0].datatype[0].sstruct.compression.level 0 -documenttype[0].datatype[0].sstruct.compression.threshold 95 -documenttype[0].datatype[0].sstruct.compression.minsize 200 -documenttype[0].datatype[1].id 1707615575 -documenttype[0].datatype[1].type ARRAY -documenttype[0].datatype[1].array.element.id -1486737430 -documenttype[0].datatype[1].map.key.id 0 -documenttype[0].datatype[1].map.value.id 0 -documenttype[0].datatype[1].wset.key.id 0 -documenttype[0].datatype[1].wset.createifnonexistent false -documenttype[0].datatype[1].wset.removeifzero false -documenttype[0].datatype[1].annotationref.annotation.id 0 -documenttype[0].datatype[1].sstruct.name "" -documenttype[0].datatype[1].sstruct.version 0 -documenttype[0].datatype[1].sstruct.compression.type NONE -documenttype[0].datatype[1].sstruct.compression.level 0 -documenttype[0].datatype[1].sstruct.compression.threshold 95 -documenttype[0].datatype[1].sstruct.compression.minsize 200 -documenttype[0].datatype[2].id -794985308 -documenttype[0].datatype[2].type ARRAY -documenttype[0].datatype[2].array.element.id 1707615575 -documenttype[0].datatype[2].map.key.id 0 -documenttype[0].datatype[2].map.value.id 0 -documenttype[0].datatype[2].wset.key.id 0 -documenttype[0].datatype[2].wset.createifnonexistent false -documenttype[0].datatype[2].wset.removeifzero false -documenttype[0].datatype[2].annotationref.annotation.id 0 -documenttype[0].datatype[2].sstruct.name "" -documenttype[0].datatype[2].sstruct.version 0 -documenttype[0].datatype[2].sstruct.compression.type NONE -documenttype[0].datatype[2].sstruct.compression.level 0 -documenttype[0].datatype[2].sstruct.compression.threshold 95 -documenttype[0].datatype[2].sstruct.compression.minsize 200 -documenttype[0].datatype[3].id -372512406 -documenttype[0].datatype[3].type MAP -documenttype[0].datatype[3].array.element.id 0 -documenttype[0].datatype[3].map.key.id 0 -documenttype[0].datatype[3].map.value.id 1707615575 -documenttype[0].datatype[3].wset.key.id 0 -documenttype[0].datatype[3].wset.createifnonexistent false -documenttype[0].datatype[3].wset.removeifzero false -documenttype[0].datatype[3].annotationref.annotation.id 0 -documenttype[0].datatype[3].sstruct.name "" -documenttype[0].datatype[3].sstruct.version 0 -documenttype[0].datatype[3].sstruct.compression.type NONE -documenttype[0].datatype[3].sstruct.compression.level 0 -documenttype[0].datatype[3].sstruct.compression.threshold 95 -documenttype[0].datatype[3].sstruct.compression.minsize 200 -documenttype[0].datatype[4].id 1416345047 -documenttype[0].datatype[4].type ARRAY -documenttype[0].datatype[4].array.element.id -372512406 -documenttype[0].datatype[4].map.key.id 0 -documenttype[0].datatype[4].map.value.id 0 -documenttype[0].datatype[4].wset.key.id 0 -documenttype[0].datatype[4].wset.createifnonexistent false -documenttype[0].datatype[4].wset.removeifzero false -documenttype[0].datatype[4].annotationref.annotation.id 0 -documenttype[0].datatype[4].sstruct.name "" -documenttype[0].datatype[4].sstruct.version 0 -documenttype[0].datatype[4].sstruct.compression.type NONE -documenttype[0].datatype[4].sstruct.compression.level 0 -documenttype[0].datatype[4].sstruct.compression.threshold 95 -documenttype[0].datatype[4].sstruct.compression.minsize 200 -documenttype[0].datatype[5].id 339965458 -documenttype[0].datatype[5].type MAP -documenttype[0].datatype[5].array.element.id 0 -documenttype[0].datatype[5].map.key.id 2 -documenttype[0].datatype[5].map.value.id 2 -documenttype[0].datatype[5].wset.key.id 0 -documenttype[0].datatype[5].wset.createifnonexistent false -documenttype[0].datatype[5].wset.removeifzero false -documenttype[0].datatype[5].annotationref.annotation.id 0 -documenttype[0].datatype[5].sstruct.name "" -documenttype[0].datatype[5].sstruct.version 0 -documenttype[0].datatype[5].sstruct.compression.type NONE -documenttype[0].datatype[5].sstruct.compression.level 0 -documenttype[0].datatype[5].sstruct.compression.threshold 95 -documenttype[0].datatype[5].sstruct.compression.minsize 200 -documenttype[0].datatype[6].id 69621385 -documenttype[0].datatype[6].type ARRAY -documenttype[0].datatype[6].array.element.id 339965458 -documenttype[0].datatype[6].map.key.id 0 -documenttype[0].datatype[6].map.value.id 0 -documenttype[0].datatype[6].wset.key.id 0 -documenttype[0].datatype[6].wset.createifnonexistent false -documenttype[0].datatype[6].wset.removeifzero false -documenttype[0].datatype[6].annotationref.annotation.id 0 -documenttype[0].datatype[6].sstruct.name "" -documenttype[0].datatype[6].sstruct.version 0 -documenttype[0].datatype[6].sstruct.compression.type NONE -documenttype[0].datatype[6].sstruct.compression.level 0 -documenttype[0].datatype[6].sstruct.compression.threshold 95 -documenttype[0].datatype[6].sstruct.compression.minsize 200 -documenttype[0].datatype[7].id 49942803 -documenttype[0].datatype[7].type ARRAY -documenttype[0].datatype[7].array.element.id 16 -documenttype[0].datatype[7].map.key.id 0 -documenttype[0].datatype[7].map.value.id 0 -documenttype[0].datatype[7].wset.key.id 0 -documenttype[0].datatype[7].wset.createifnonexistent false -documenttype[0].datatype[7].wset.removeifzero false -documenttype[0].datatype[7].annotationref.annotation.id 0 -documenttype[0].datatype[7].sstruct.name "" -documenttype[0].datatype[7].sstruct.version 0 -documenttype[0].datatype[7].sstruct.compression.type NONE -documenttype[0].datatype[7].sstruct.compression.level 0 -documenttype[0].datatype[7].sstruct.compression.threshold 95 -documenttype[0].datatype[7].sstruct.compression.minsize 200 -documenttype[0].datatype[8].id -1245117006 -documenttype[0].datatype[8].type ARRAY -documenttype[0].datatype[8].array.element.id 0 -documenttype[0].datatype[8].map.key.id 0 -documenttype[0].datatype[8].map.value.id 0 -documenttype[0].datatype[8].wset.key.id 0 -documenttype[0].datatype[8].wset.createifnonexistent false -documenttype[0].datatype[8].wset.removeifzero false -documenttype[0].datatype[8].annotationref.annotation.id 0 -documenttype[0].datatype[8].sstruct.name "" -documenttype[0].datatype[8].sstruct.version 0 -documenttype[0].datatype[8].sstruct.compression.type NONE -documenttype[0].datatype[8].sstruct.compression.level 0 -documenttype[0].datatype[8].sstruct.compression.threshold 95 -documenttype[0].datatype[8].sstruct.compression.minsize 200 -documenttype[0].datatype[9].id -2092985853 -documenttype[0].datatype[9].type STRUCT -documenttype[0].datatype[9].array.element.id 0 -documenttype[0].datatype[9].map.key.id 0 -documenttype[0].datatype[9].map.value.id 0 -documenttype[0].datatype[9].wset.key.id 0 -documenttype[0].datatype[9].wset.createifnonexistent false -documenttype[0].datatype[9].wset.removeifzero false -documenttype[0].datatype[9].annotationref.annotation.id 0 -documenttype[0].datatype[9].sstruct.name "mystruct" -documenttype[0].datatype[9].sstruct.version 0 -documenttype[0].datatype[9].sstruct.compression.type NONE -documenttype[0].datatype[9].sstruct.compression.level 0 -documenttype[0].datatype[9].sstruct.compression.threshold 95 -documenttype[0].datatype[9].sstruct.compression.minsize 200 -documenttype[0].datatype[9].sstruct.field[0].name "bytearr" -documenttype[0].datatype[9].sstruct.field[0].id 1079701754 -documenttype[0].datatype[9].sstruct.field[0].datatype 49942803 -documenttype[0].datatype[9].sstruct.field[0].detailedtype "" -documenttype[0].datatype[9].sstruct.field[1].name "mymap" -documenttype[0].datatype[9].sstruct.field[1].id 1954178122 -documenttype[0].datatype[9].sstruct.field[1].datatype 339965458 -documenttype[0].datatype[9].sstruct.field[1].detailedtype "" -documenttype[0].datatype[9].sstruct.field[2].name "title" -documenttype[0].datatype[9].sstruct.field[2].id 567626448 -documenttype[0].datatype[9].sstruct.field[2].datatype 2 -documenttype[0].datatype[9].sstruct.field[2].detailedtype "" -documenttype[0].datatype[9].sstruct.field[3].name "structfield" -documenttype[0].datatype[9].sstruct.field[3].id 1726890940 -documenttype[0].datatype[9].sstruct.field[3].datatype 2 -documenttype[0].datatype[9].sstruct.field[3].detailedtype "" -documenttype[0].datatype[10].id 759956026 -documenttype[0].datatype[10].type ARRAY -documenttype[0].datatype[10].array.element.id -2092985853 -documenttype[0].datatype[10].map.key.id 0 -documenttype[0].datatype[10].map.value.id 0 -documenttype[0].datatype[10].wset.key.id 0 -documenttype[0].datatype[10].wset.createifnonexistent false -documenttype[0].datatype[10].wset.removeifzero false -documenttype[0].datatype[10].annotationref.annotation.id 0 -documenttype[0].datatype[10].sstruct.name "" -documenttype[0].datatype[10].sstruct.version 0 -documenttype[0].datatype[10].sstruct.compression.type NONE -documenttype[0].datatype[10].sstruct.compression.level 0 -documenttype[0].datatype[10].sstruct.compression.threshold 95 -documenttype[0].datatype[10].sstruct.compression.minsize 200 -documenttype[0].datatype[11].id 109267174 -documenttype[0].datatype[11].type STRUCT -documenttype[0].datatype[11].array.element.id 0 -documenttype[0].datatype[11].map.key.id 0 -documenttype[0].datatype[11].map.value.id 0 -documenttype[0].datatype[11].wset.key.id 0 -documenttype[0].datatype[11].wset.createifnonexistent false -documenttype[0].datatype[11].wset.removeifzero false -documenttype[0].datatype[11].annotationref.annotation.id 0 -documenttype[0].datatype[11].sstruct.name "sct" -documenttype[0].datatype[11].sstruct.version 0 -documenttype[0].datatype[11].sstruct.compression.type NONE -documenttype[0].datatype[11].sstruct.compression.level 0 -documenttype[0].datatype[11].sstruct.compression.threshold 95 -documenttype[0].datatype[11].sstruct.compression.minsize 200 -documenttype[0].datatype[11].sstruct.field[0].name "s1" -documenttype[0].datatype[11].sstruct.field[0].id 2146820765 -documenttype[0].datatype[11].sstruct.field[0].datatype 2 -documenttype[0].datatype[11].sstruct.field[0].detailedtype "" -documenttype[0].datatype[11].sstruct.field[1].name "s2" -documenttype[0].datatype[11].sstruct.field[1].id 45366795 -documenttype[0].datatype[11].sstruct.field[1].datatype 2 -documenttype[0].datatype[11].sstruct.field[1].detailedtype "" -documenttype[0].datatype[12].id -1244829667 -documenttype[0].datatype[12].type ARRAY -documenttype[0].datatype[12].array.element.id 109267174 -documenttype[0].datatype[12].map.key.id 0 -documenttype[0].datatype[12].map.value.id 0 -documenttype[0].datatype[12].wset.key.id 0 -documenttype[0].datatype[12].wset.createifnonexistent false -documenttype[0].datatype[12].wset.removeifzero false -documenttype[0].datatype[12].annotationref.annotation.id 0 -documenttype[0].datatype[12].sstruct.name "" -documenttype[0].datatype[12].sstruct.version 0 -documenttype[0].datatype[12].sstruct.compression.type NONE -documenttype[0].datatype[12].sstruct.compression.level 0 -documenttype[0].datatype[12].sstruct.compression.threshold 95 -documenttype[0].datatype[12].sstruct.compression.minsize 200 -documenttype[0].datatype[13].id 2138385264 -documenttype[0].datatype[13].type MAP -documenttype[0].datatype[13].array.element.id 0 -documenttype[0].datatype[13].map.key.id 0 -documenttype[0].datatype[13].map.value.id 5 -documenttype[0].datatype[13].wset.key.id 0 -documenttype[0].datatype[13].wset.createifnonexistent false -documenttype[0].datatype[13].wset.removeifzero false -documenttype[0].datatype[13].annotationref.annotation.id 0 -documenttype[0].datatype[13].sstruct.name "" -documenttype[0].datatype[13].sstruct.version 0 -documenttype[0].datatype[13].sstruct.compression.type NONE -documenttype[0].datatype[13].sstruct.compression.level 0 -documenttype[0].datatype[13].sstruct.compression.threshold 95 -documenttype[0].datatype[13].sstruct.compression.minsize 200 -documenttype[0].datatype[14].id -1865479609 -documenttype[0].datatype[14].type MAP -documenttype[0].datatype[14].array.element.id 0 -documenttype[0].datatype[14].map.key.id 2 -documenttype[0].datatype[14].map.value.id 4 -documenttype[0].datatype[14].wset.key.id 0 -documenttype[0].datatype[14].wset.createifnonexistent false -documenttype[0].datatype[14].wset.removeifzero false -documenttype[0].datatype[14].annotationref.annotation.id 0 -documenttype[0].datatype[14].sstruct.name "" -documenttype[0].datatype[14].sstruct.version 0 -documenttype[0].datatype[14].sstruct.compression.type NONE -documenttype[0].datatype[14].sstruct.compression.level 0 -documenttype[0].datatype[14].sstruct.compression.threshold 95 -documenttype[0].datatype[14].sstruct.compression.minsize 200 -documenttype[0].datatype[15].id 294108848 -documenttype[0].datatype[15].type STRUCT -documenttype[0].datatype[15].array.element.id 0 -documenttype[0].datatype[15].map.key.id 0 -documenttype[0].datatype[15].map.value.id 0 -documenttype[0].datatype[15].wset.key.id 0 -documenttype[0].datatype[15].wset.createifnonexistent false -documenttype[0].datatype[15].wset.removeifzero false -documenttype[0].datatype[15].annotationref.annotation.id 0 -documenttype[0].datatype[15].sstruct.name "folder" -documenttype[0].datatype[15].sstruct.version 0 -documenttype[0].datatype[15].sstruct.compression.type NONE -documenttype[0].datatype[15].sstruct.compression.level 0 -documenttype[0].datatype[15].sstruct.compression.threshold 95 -documenttype[0].datatype[15].sstruct.compression.minsize 200 -documenttype[0].datatype[15].sstruct.field[0].name "Version" -documenttype[0].datatype[15].sstruct.field[0].id 64430502 -documenttype[0].datatype[15].sstruct.field[0].datatype 0 -documenttype[0].datatype[15].sstruct.field[0].detailedtype "" -documenttype[0].datatype[15].sstruct.field[1].name "Name" -documenttype[0].datatype[15].sstruct.field[1].id 2002760220 -documenttype[0].datatype[15].sstruct.field[1].datatype 2 -documenttype[0].datatype[15].sstruct.field[1].detailedtype "" -documenttype[0].datatype[15].sstruct.field[2].name "FlagsCounter" -documenttype[0].datatype[15].sstruct.field[2].id 1741227606 -documenttype[0].datatype[15].sstruct.field[2].datatype -1865479609 -documenttype[0].datatype[15].sstruct.field[2].detailedtype "" -documenttype[0].datatype[15].sstruct.field[3].name "anotherfolder" -documenttype[0].datatype[15].sstruct.field[3].id 1582421848 -documenttype[0].datatype[15].sstruct.field[3].datatype 294108848 -documenttype[0].datatype[15].sstruct.field[3].detailedtype "" -documenttype[0].datatype[16].id -389833101 -documenttype[0].datatype[16].type MAP -documenttype[0].datatype[16].array.element.id 0 -documenttype[0].datatype[16].map.key.id 0 -documenttype[0].datatype[16].map.value.id 294108848 -documenttype[0].datatype[16].wset.key.id 0 -documenttype[0].datatype[16].wset.createifnonexistent false -documenttype[0].datatype[16].wset.removeifzero false -documenttype[0].datatype[16].annotationref.annotation.id 0 -documenttype[0].datatype[16].sstruct.name "" -documenttype[0].datatype[16].sstruct.version 0 -documenttype[0].datatype[16].sstruct.compression.type NONE -documenttype[0].datatype[16].sstruct.compression.level 0 -documenttype[0].datatype[16].sstruct.compression.threshold 95 -documenttype[0].datatype[16].sstruct.compression.minsize 200 -documenttype[0].datatype[17].id -1715531035 -documenttype[0].datatype[17].type MAP -documenttype[0].datatype[17].array.element.id 0 -documenttype[0].datatype[17].map.key.id 0 -documenttype[0].datatype[17].map.value.id 4 -documenttype[0].datatype[17].wset.key.id 0 -documenttype[0].datatype[17].wset.createifnonexistent false -documenttype[0].datatype[17].wset.removeifzero false -documenttype[0].datatype[17].annotationref.annotation.id 0 -documenttype[0].datatype[17].sstruct.name "" -documenttype[0].datatype[17].sstruct.version 0 -documenttype[0].datatype[17].sstruct.compression.type NONE -documenttype[0].datatype[17].sstruct.compression.level 0 -documenttype[0].datatype[17].sstruct.compression.threshold 95 -documenttype[0].datatype[17].sstruct.compression.minsize 200 -documenttype[0].datatype[18].id 1901258752 -documenttype[0].datatype[18].type MAP -documenttype[0].datatype[18].array.element.id 0 -documenttype[0].datatype[18].map.key.id 0 -documenttype[0].datatype[18].map.value.id -2092985853 -documenttype[0].datatype[18].wset.key.id 0 -documenttype[0].datatype[18].wset.createifnonexistent false -documenttype[0].datatype[18].wset.removeifzero false -documenttype[0].datatype[18].annotationref.annotation.id 0 -documenttype[0].datatype[18].sstruct.name "" -documenttype[0].datatype[18].sstruct.version 0 -documenttype[0].datatype[18].sstruct.compression.type NONE -documenttype[0].datatype[18].sstruct.compression.level 0 -documenttype[0].datatype[18].sstruct.compression.threshold 95 -documenttype[0].datatype[18].sstruct.compression.minsize 200 -documenttype[0].datatype[19].id 435886609 -documenttype[0].datatype[19].type MAP -documenttype[0].datatype[19].array.element.id 0 -documenttype[0].datatype[19].map.key.id 2 -documenttype[0].datatype[19].map.value.id -1245117006 -documenttype[0].datatype[19].wset.key.id 0 -documenttype[0].datatype[19].wset.createifnonexistent false -documenttype[0].datatype[19].wset.removeifzero false -documenttype[0].datatype[19].annotationref.annotation.id 0 -documenttype[0].datatype[19].sstruct.name "" -documenttype[0].datatype[19].sstruct.version 0 -documenttype[0].datatype[19].sstruct.compression.type NONE -documenttype[0].datatype[19].sstruct.compression.level 0 -documenttype[0].datatype[19].sstruct.compression.threshold 95 -documenttype[0].datatype[19].sstruct.compression.minsize 200 -documenttype[0].datatype[20].id 2125154557 -documenttype[0].datatype[20].type MAP -documenttype[0].datatype[20].array.element.id 0 -documenttype[0].datatype[20].map.key.id 2 -documenttype[0].datatype[20].map.value.id 1 -documenttype[0].datatype[20].wset.key.id 0 -documenttype[0].datatype[20].wset.createifnonexistent false -documenttype[0].datatype[20].wset.removeifzero false -documenttype[0].datatype[20].annotationref.annotation.id 0 -documenttype[0].datatype[20].sstruct.name "" -documenttype[0].datatype[20].sstruct.version 0 -documenttype[0].datatype[20].sstruct.compression.type NONE -documenttype[0].datatype[20].sstruct.compression.level 0 -documenttype[0].datatype[20].sstruct.compression.threshold 95 -documenttype[0].datatype[20].sstruct.compression.minsize 200 -documenttype[0].datatype[21].id -1584287606 -documenttype[0].datatype[21].type MAP -documenttype[0].datatype[21].array.element.id 0 -documenttype[0].datatype[21].map.key.id 2 -documenttype[0].datatype[21].map.value.id 0 -documenttype[0].datatype[21].wset.key.id 0 -documenttype[0].datatype[21].wset.createifnonexistent false -documenttype[0].datatype[21].wset.removeifzero false -documenttype[0].datatype[21].annotationref.annotation.id 0 -documenttype[0].datatype[21].sstruct.name "" -documenttype[0].datatype[21].sstruct.version 0 -documenttype[0].datatype[21].sstruct.compression.type NONE -documenttype[0].datatype[21].sstruct.compression.level 0 -documenttype[0].datatype[21].sstruct.compression.threshold 95 -documenttype[0].datatype[21].sstruct.compression.minsize 200 -documenttype[0].datatype[22].id 1328286588 -documenttype[0].datatype[22].type WSET -documenttype[0].datatype[22].array.element.id 0 -documenttype[0].datatype[22].map.key.id 0 -documenttype[0].datatype[22].map.value.id 0 -documenttype[0].datatype[22].wset.key.id 2 -documenttype[0].datatype[22].wset.createifnonexistent false -documenttype[0].datatype[22].wset.removeifzero false -documenttype[0].datatype[22].annotationref.annotation.id 0 -documenttype[0].datatype[22].sstruct.name "" -documenttype[0].datatype[22].sstruct.version 0 -documenttype[0].datatype[22].sstruct.compression.type NONE -documenttype[0].datatype[22].sstruct.compression.level 0 -documenttype[0].datatype[22].sstruct.compression.threshold 95 -documenttype[0].datatype[22].sstruct.compression.minsize 200 -documenttype[0].datatype[23].id 2065577986 -documenttype[0].datatype[23].type WSET -documenttype[0].datatype[23].array.element.id 0 -documenttype[0].datatype[23].map.key.id 0 -documenttype[0].datatype[23].map.value.id 0 -documenttype[0].datatype[23].wset.key.id 2 -documenttype[0].datatype[23].wset.createifnonexistent true -documenttype[0].datatype[23].wset.removeifzero false -documenttype[0].datatype[23].annotationref.annotation.id 0 -documenttype[0].datatype[23].sstruct.name "" -documenttype[0].datatype[23].sstruct.version 0 -documenttype[0].datatype[23].sstruct.compression.type NONE -documenttype[0].datatype[23].sstruct.compression.level 0 -documenttype[0].datatype[23].sstruct.compression.threshold 95 -documenttype[0].datatype[23].sstruct.compression.minsize 200 -documenttype[0].datatype[24].id 2125328771 -documenttype[0].datatype[24].type WSET -documenttype[0].datatype[24].array.element.id 0 -documenttype[0].datatype[24].map.key.id 0 -documenttype[0].datatype[24].map.value.id 0 -documenttype[0].datatype[24].wset.key.id 2 -documenttype[0].datatype[24].wset.createifnonexistent false -documenttype[0].datatype[24].wset.removeifzero true -documenttype[0].datatype[24].annotationref.annotation.id 0 -documenttype[0].datatype[24].sstruct.name "" -documenttype[0].datatype[24].sstruct.version 0 -documenttype[0].datatype[24].sstruct.compression.type NONE -documenttype[0].datatype[24].sstruct.compression.level 0 -documenttype[0].datatype[24].sstruct.compression.threshold 95 -documenttype[0].datatype[24].sstruct.compression.minsize 200 -documenttype[0].datatype[25].id 1328581348 -documenttype[0].datatype[25].type STRUCT -documenttype[0].datatype[25].array.element.id 0 -documenttype[0].datatype[25].map.key.id 0 -documenttype[0].datatype[25].map.value.id 0 -documenttype[0].datatype[25].wset.key.id 0 -documenttype[0].datatype[25].wset.createifnonexistent false -documenttype[0].datatype[25].wset.removeifzero false -documenttype[0].datatype[25].annotationref.annotation.id 0 -documenttype[0].datatype[25].sstruct.name "types.header" -documenttype[0].datatype[25].sstruct.version 0 -documenttype[0].datatype[25].sstruct.compression.type NONE -documenttype[0].datatype[25].sstruct.compression.level 0 -documenttype[0].datatype[25].sstruct.compression.threshold 95 -documenttype[0].datatype[25].sstruct.compression.minsize 200 -documenttype[0].datatype[25].sstruct.field[0].name "abyte" -documenttype[0].datatype[25].sstruct.field[0].id 110138156 -documenttype[0].datatype[25].sstruct.field[0].datatype 16 -documenttype[0].datatype[25].sstruct.field[0].detailedtype "" -documenttype[0].datatype[25].sstruct.field[1].name "along" -documenttype[0].datatype[25].sstruct.field[1].id 1206464520 -documenttype[0].datatype[25].sstruct.field[1].datatype 4 -documenttype[0].datatype[25].sstruct.field[1].detailedtype "" -documenttype[0].datatype[25].sstruct.field[2].name "arrayfield" -documenttype[0].datatype[25].sstruct.field[2].id 965790107 -documenttype[0].datatype[25].sstruct.field[2].datatype -1245117006 -documenttype[0].datatype[25].sstruct.field[2].detailedtype "" -documenttype[0].datatype[25].sstruct.field[3].name "setfield" -documenttype[0].datatype[25].sstruct.field[3].id 761581914 -documenttype[0].datatype[25].sstruct.field[3].datatype 1328286588 -documenttype[0].datatype[25].sstruct.field[3].detailedtype "" -documenttype[0].datatype[25].sstruct.field[4].name "pos" -documenttype[0].datatype[25].sstruct.field[4].id 1041567475 -documenttype[0].datatype[25].sstruct.field[4].datatype 1381038251 -documenttype[0].datatype[25].sstruct.field[4].detailedtype "" -documenttype[0].datatype[25].sstruct.field[5].name "setfield2" -documenttype[0].datatype[25].sstruct.field[5].id 1066659198 -documenttype[0].datatype[25].sstruct.field[5].datatype 18 -documenttype[0].datatype[25].sstruct.field[5].detailedtype "" -documenttype[0].datatype[25].sstruct.field[6].name "setfield3" -documenttype[0].datatype[25].sstruct.field[6].id 1180155772 -documenttype[0].datatype[25].sstruct.field[6].datatype 2125328771 -documenttype[0].datatype[25].sstruct.field[6].detailedtype "" -documenttype[0].datatype[25].sstruct.field[7].name "setfield4" -documenttype[0].datatype[25].sstruct.field[7].id 1254131631 -documenttype[0].datatype[25].sstruct.field[7].datatype 2065577986 -documenttype[0].datatype[25].sstruct.field[7].detailedtype "" -documenttype[0].datatype[25].sstruct.field[8].name "tagfield" -documenttype[0].datatype[25].sstruct.field[8].id 1653562069 -documenttype[0].datatype[25].sstruct.field[8].datatype 18 -documenttype[0].datatype[25].sstruct.field[8].detailedtype "" -documenttype[0].datatype[25].sstruct.field[9].name "structfield" -documenttype[0].datatype[25].sstruct.field[9].id 486207386 -documenttype[0].datatype[25].sstruct.field[9].datatype 109267174 -documenttype[0].datatype[25].sstruct.field[9].detailedtype "" -documenttype[0].datatype[25].sstruct.field[10].name "structarrayfield" -documenttype[0].datatype[25].sstruct.field[10].id 335048518 -documenttype[0].datatype[25].sstruct.field[10].datatype -1244829667 -documenttype[0].datatype[25].sstruct.field[10].detailedtype "" -documenttype[0].datatype[25].sstruct.field[11].name "stringmapfield" -documenttype[0].datatype[25].sstruct.field[11].id 117465687 -documenttype[0].datatype[25].sstruct.field[11].datatype 339965458 -documenttype[0].datatype[25].sstruct.field[11].detailedtype "" -documenttype[0].datatype[25].sstruct.field[12].name "intmapfield" -documenttype[0].datatype[25].sstruct.field[12].id 121004462 -documenttype[0].datatype[25].sstruct.field[12].datatype -1584287606 -documenttype[0].datatype[25].sstruct.field[12].detailedtype "" -documenttype[0].datatype[25].sstruct.field[13].name "floatmapfield" -documenttype[0].datatype[25].sstruct.field[13].id 1239120925 -documenttype[0].datatype[25].sstruct.field[13].datatype 2125154557 -documenttype[0].datatype[25].sstruct.field[13].detailedtype "" -documenttype[0].datatype[25].sstruct.field[14].name "longmapfield" -documenttype[0].datatype[25].sstruct.field[14].id 477718745 -documenttype[0].datatype[25].sstruct.field[14].datatype -1715531035 -documenttype[0].datatype[25].sstruct.field[14].detailedtype "" -documenttype[0].datatype[25].sstruct.field[15].name "doublemapfield" -documenttype[0].datatype[25].sstruct.field[15].id 877047192 -documenttype[0].datatype[25].sstruct.field[15].datatype 2138385264 -documenttype[0].datatype[25].sstruct.field[15].detailedtype "" -documenttype[0].datatype[25].sstruct.field[16].name "arraymapfield" -documenttype[0].datatype[25].sstruct.field[16].id 1670805928 -documenttype[0].datatype[25].sstruct.field[16].datatype 435886609 -documenttype[0].datatype[25].sstruct.field[16].detailedtype "" -documenttype[0].datatype[25].sstruct.field[17].name "arrarr" -documenttype[0].datatype[25].sstruct.field[17].id 1962567166 -documenttype[0].datatype[25].sstruct.field[17].datatype -794985308 -documenttype[0].datatype[25].sstruct.field[17].detailedtype "" -documenttype[0].datatype[25].sstruct.field[18].name "maparr" -documenttype[0].datatype[25].sstruct.field[18].id 904375219 -documenttype[0].datatype[25].sstruct.field[18].datatype 69621385 -documenttype[0].datatype[25].sstruct.field[18].detailedtype "" -documenttype[0].datatype[25].sstruct.field[19].name "complexarray" -documenttype[0].datatype[25].sstruct.field[19].id 795629533 -documenttype[0].datatype[25].sstruct.field[19].datatype 1416345047 -documenttype[0].datatype[25].sstruct.field[19].detailedtype "" -documenttype[0].datatype[25].sstruct.field[20].name "mystructfield" -documenttype[0].datatype[25].sstruct.field[20].id 1348513378 -documenttype[0].datatype[25].sstruct.field[20].datatype -2092985853 -documenttype[0].datatype[25].sstruct.field[20].detailedtype "" -documenttype[0].datatype[25].sstruct.field[21].name "mystructmap" -documenttype[0].datatype[25].sstruct.field[21].id 1511423250 -documenttype[0].datatype[25].sstruct.field[21].datatype 1901258752 -documenttype[0].datatype[25].sstruct.field[21].detailedtype "" -documenttype[0].datatype[25].sstruct.field[22].name "mystructarr" -documenttype[0].datatype[25].sstruct.field[22].id 595856991 -documenttype[0].datatype[25].sstruct.field[22].datatype 759956026 -documenttype[0].datatype[25].sstruct.field[22].detailedtype "" -documenttype[0].datatype[25].sstruct.field[23].name "Folders" -documenttype[0].datatype[25].sstruct.field[23].id 34575524 -documenttype[0].datatype[25].sstruct.field[23].datatype -389833101 -documenttype[0].datatype[25].sstruct.field[23].detailedtype "" -documenttype[0].datatype[25].sstruct.field[24].name "juletre" -documenttype[0].datatype[25].sstruct.field[24].id 1039981530 -documenttype[0].datatype[25].sstruct.field[24].datatype 4 -documenttype[0].datatype[25].sstruct.field[24].detailedtype "" -documenttype[0].datatype[25].sstruct.field[25].name "album0" -documenttype[0].datatype[25].sstruct.field[25].id 764312262 -documenttype[0].datatype[25].sstruct.field[25].datatype 18 -documenttype[0].datatype[25].sstruct.field[25].detailedtype "" -documenttype[0].datatype[25].sstruct.field[26].name "album1" -documenttype[0].datatype[25].sstruct.field[26].id 1967160809 -documenttype[0].datatype[25].sstruct.field[26].datatype 18 -documenttype[0].datatype[25].sstruct.field[26].detailedtype "" -documenttype[0].datatype[25].sstruct.field[27].name "other" -documenttype[0].datatype[25].sstruct.field[27].id 2443357 -documenttype[0].datatype[25].sstruct.field[27].datatype 4 -documenttype[0].datatype[25].sstruct.field[27].detailedtype "" -documenttype[0].fieldsets{[document]}.fields[0] "Folders" -documenttype[0].fieldsets{[document]}.fields[1] "abyte" -documenttype[0].fieldsets{[document]}.fields[2] "album0" -documenttype[0].fieldsets{[document]}.fields[3] "album1" -documenttype[0].fieldsets{[document]}.fields[4] "along" -documenttype[0].fieldsets{[document]}.fields[5] "arrarr" -documenttype[0].fieldsets{[document]}.fields[6] "arrayfield" -documenttype[0].fieldsets{[document]}.fields[7] "arraymapfield" -documenttype[0].fieldsets{[document]}.fields[8] "complexarray" -documenttype[0].fieldsets{[document]}.fields[9] "doublemapfield" -documenttype[0].fieldsets{[document]}.fields[10] "floatmapfield" -documenttype[0].fieldsets{[document]}.fields[11] "intmapfield" -documenttype[0].fieldsets{[document]}.fields[12] "juletre" -documenttype[0].fieldsets{[document]}.fields[13] "longmapfield" -documenttype[0].fieldsets{[document]}.fields[14] "maparr" -documenttype[0].fieldsets{[document]}.fields[15] "mystructarr" -documenttype[0].fieldsets{[document]}.fields[16] "mystructfield" -documenttype[0].fieldsets{[document]}.fields[17] "mystructmap" -documenttype[0].fieldsets{[document]}.fields[18] "pos" -documenttype[0].fieldsets{[document]}.fields[19] "setfield" -documenttype[0].fieldsets{[document]}.fields[20] "setfield2" -documenttype[0].fieldsets{[document]}.fields[21] "setfield3" -documenttype[0].fieldsets{[document]}.fields[22] "setfield4" -documenttype[0].fieldsets{[document]}.fields[23] "stringmapfield" -documenttype[0].fieldsets{[document]}.fields[24] "structarrayfield" -documenttype[0].fieldsets{[document]}.fields[25] "structfield" -documenttype[0].fieldsets{[document]}.fields[26] "tagfield" +doctype[0].name "document" +doctype[0].idx 10000 +doctype[0].internalid 8 +doctype[0].contentstruct 10001 +doctype[0].primitivetype[0].idx 10002 +doctype[0].primitivetype[0].name "bool" +doctype[0].primitivetype[1].idx 10003 +doctype[0].primitivetype[1].name "byte" +doctype[0].primitivetype[2].idx 10004 +doctype[0].primitivetype[2].name "double" +doctype[0].primitivetype[3].idx 10005 +doctype[0].primitivetype[3].name "float" +doctype[0].primitivetype[4].idx 10006 +doctype[0].primitivetype[4].name "float16" +doctype[0].primitivetype[5].idx 10007 +doctype[0].primitivetype[5].name "int" +doctype[0].primitivetype[6].idx 10008 +doctype[0].primitivetype[6].name "long" +doctype[0].primitivetype[7].idx 10010 +doctype[0].primitivetype[7].name "predicate" +doctype[0].primitivetype[8].idx 10011 +doctype[0].primitivetype[8].name "raw" +doctype[0].primitivetype[9].idx 10012 +doctype[0].primitivetype[9].name "string" +doctype[0].primitivetype[10].idx 10014 +doctype[0].primitivetype[10].name "uri" +doctype[0].wsettype[0].idx 10013 +doctype[0].wsettype[0].elementtype 10012 +doctype[0].wsettype[0].createifnonexistent true +doctype[0].wsettype[0].removeifzero true +doctype[0].wsettype[0].internalid 18 +doctype[0].structtype[0].idx 10001 +doctype[0].structtype[0].name "document.header" +doctype[0].structtype[0].internalid -284186494 +doctype[0].structtype[1].idx 10009 +doctype[0].structtype[1].name "position" +doctype[0].structtype[1].field[0].name "x" +doctype[0].structtype[1].field[0].internalid 914677694 +doctype[0].structtype[1].field[0].type 10007 +doctype[0].structtype[1].field[1].name "y" +doctype[0].structtype[1].field[1].internalid 900009410 +doctype[0].structtype[1].field[1].type 10007 +doctype[0].structtype[1].internalid 1381038251 +doctype[1].name "types" +doctype[1].idx 10015 +doctype[1].internalid -853072901 +doctype[1].inherits[0].idx 10000 +doctype[1].contentstruct 10016 +doctype[1].fieldsets{[document]}.fields[0] "Folders" +doctype[1].fieldsets{[document]}.fields[1] "abyte" +doctype[1].fieldsets{[document]}.fields[2] "album0" +doctype[1].fieldsets{[document]}.fields[3] "album1" +doctype[1].fieldsets{[document]}.fields[4] "along" +doctype[1].fieldsets{[document]}.fields[5] "arrarr" +doctype[1].fieldsets{[document]}.fields[6] "arrayfield" +doctype[1].fieldsets{[document]}.fields[7] "arraymapfield" +doctype[1].fieldsets{[document]}.fields[8] "complexarray" +doctype[1].fieldsets{[document]}.fields[9] "doublemapfield" +doctype[1].fieldsets{[document]}.fields[10] "floatmapfield" +doctype[1].fieldsets{[document]}.fields[11] "intmapfield" +doctype[1].fieldsets{[document]}.fields[12] "juletre" +doctype[1].fieldsets{[document]}.fields[13] "longmapfield" +doctype[1].fieldsets{[document]}.fields[14] "maparr" +doctype[1].fieldsets{[document]}.fields[15] "mystructarr" +doctype[1].fieldsets{[document]}.fields[16] "mystructfield" +doctype[1].fieldsets{[document]}.fields[17] "mystructmap" +doctype[1].fieldsets{[document]}.fields[18] "pos" +doctype[1].fieldsets{[document]}.fields[19] "setfield" +doctype[1].fieldsets{[document]}.fields[20] "setfield2" +doctype[1].fieldsets{[document]}.fields[21] "setfield3" +doctype[1].fieldsets{[document]}.fields[22] "setfield4" +doctype[1].fieldsets{[document]}.fields[23] "stringmapfield" +doctype[1].fieldsets{[document]}.fields[24] "structarrayfield" +doctype[1].fieldsets{[document]}.fields[25] "structfield" +doctype[1].fieldsets{[document]}.fields[26] "tagfield" +doctype[1].arraytype[0].idx 10017 +doctype[1].arraytype[0].elementtype 10007 +doctype[1].arraytype[0].internalid -1245117006 +doctype[1].arraytype[1].idx 10024 +doctype[1].arraytype[1].elementtype 10023 +doctype[1].arraytype[1].internalid -1244829667 +doctype[1].arraytype[2].idx 10031 +doctype[1].arraytype[2].elementtype 10007 +doctype[1].arraytype[2].internalid -1245117006 +doctype[1].arraytype[3].idx 10032 +doctype[1].arraytype[3].elementtype 10033 +doctype[1].arraytype[3].internalid -794985308 +doctype[1].arraytype[4].idx 10033 +doctype[1].arraytype[4].elementtype 10034 +doctype[1].arraytype[4].internalid 1707615575 +doctype[1].arraytype[5].idx 10034 +doctype[1].arraytype[5].elementtype 10012 +doctype[1].arraytype[5].internalid -1486737430 +doctype[1].arraytype[6].idx 10035 +doctype[1].arraytype[6].elementtype 10036 +doctype[1].arraytype[6].internalid 69621385 +doctype[1].arraytype[7].idx 10037 +doctype[1].arraytype[7].elementtype 10038 +doctype[1].arraytype[7].internalid 1416345047 +doctype[1].arraytype[8].idx 10039 +doctype[1].arraytype[8].elementtype 10040 +doctype[1].arraytype[8].internalid 1707615575 +doctype[1].arraytype[9].idx 10040 +doctype[1].arraytype[9].elementtype 10012 +doctype[1].arraytype[9].internalid -1486737430 +doctype[1].arraytype[10].idx 10042 +doctype[1].arraytype[10].elementtype 10003 +doctype[1].arraytype[10].internalid 49942803 +doctype[1].arraytype[11].idx 10045 +doctype[1].arraytype[11].elementtype 10041 +doctype[1].arraytype[11].internalid 759956026 +doctype[1].maptype[0].idx 10025 +doctype[1].maptype[0].keytype 10012 +doctype[1].maptype[0].valuetype 10012 +doctype[1].maptype[0].internalid 339965458 +doctype[1].maptype[1].idx 10026 +doctype[1].maptype[1].keytype 10012 +doctype[1].maptype[1].valuetype 10007 +doctype[1].maptype[1].internalid -1584287606 +doctype[1].maptype[2].idx 10027 +doctype[1].maptype[2].keytype 10012 +doctype[1].maptype[2].valuetype 10005 +doctype[1].maptype[2].internalid 2125154557 +doctype[1].maptype[3].idx 10028 +doctype[1].maptype[3].keytype 10007 +doctype[1].maptype[3].valuetype 10008 +doctype[1].maptype[3].internalid -1715531035 +doctype[1].maptype[4].idx 10029 +doctype[1].maptype[4].keytype 10007 +doctype[1].maptype[4].valuetype 10004 +doctype[1].maptype[4].internalid 2138385264 +doctype[1].maptype[5].idx 10030 +doctype[1].maptype[5].keytype 10012 +doctype[1].maptype[5].valuetype 10031 +doctype[1].maptype[5].internalid 435886609 +doctype[1].maptype[6].idx 10036 +doctype[1].maptype[6].keytype 10012 +doctype[1].maptype[6].valuetype 10012 +doctype[1].maptype[6].internalid 339965458 +doctype[1].maptype[7].idx 10038 +doctype[1].maptype[7].keytype 10007 +doctype[1].maptype[7].valuetype 10039 +doctype[1].maptype[7].internalid -372512406 +doctype[1].maptype[8].idx 10043 +doctype[1].maptype[8].keytype 10012 +doctype[1].maptype[8].valuetype 10012 +doctype[1].maptype[8].internalid 339965458 +doctype[1].maptype[9].idx 10044 +doctype[1].maptype[9].keytype 10007 +doctype[1].maptype[9].valuetype 10041 +doctype[1].maptype[9].internalid 1901258752 +doctype[1].maptype[10].idx 10046 +doctype[1].maptype[10].keytype 10007 +doctype[1].maptype[10].valuetype 10047 +doctype[1].maptype[10].internalid -389833101 +doctype[1].maptype[11].idx 10048 +doctype[1].maptype[11].keytype 10012 +doctype[1].maptype[11].valuetype 10008 +doctype[1].maptype[11].internalid -1865479609 +doctype[1].wsettype[0].idx 10018 +doctype[1].wsettype[0].elementtype 10012 +doctype[1].wsettype[0].createifnonexistent false +doctype[1].wsettype[0].removeifzero false +doctype[1].wsettype[0].internalid 1328286588 +doctype[1].wsettype[1].idx 10019 +doctype[1].wsettype[1].elementtype 10012 +doctype[1].wsettype[1].createifnonexistent true +doctype[1].wsettype[1].removeifzero true +doctype[1].wsettype[1].internalid 18 +doctype[1].wsettype[2].idx 10020 +doctype[1].wsettype[2].elementtype 10012 +doctype[1].wsettype[2].createifnonexistent false +doctype[1].wsettype[2].removeifzero true +doctype[1].wsettype[2].internalid 2125328771 +doctype[1].wsettype[3].idx 10021 +doctype[1].wsettype[3].elementtype 10012 +doctype[1].wsettype[3].createifnonexistent true +doctype[1].wsettype[3].removeifzero false +doctype[1].wsettype[3].internalid 2065577986 +doctype[1].wsettype[4].idx 10022 +doctype[1].wsettype[4].elementtype 10012 +doctype[1].wsettype[4].createifnonexistent true +doctype[1].wsettype[4].removeifzero true +doctype[1].wsettype[4].internalid 18 +doctype[1].wsettype[5].idx 10049 +doctype[1].wsettype[5].elementtype 10012 +doctype[1].wsettype[5].createifnonexistent true +doctype[1].wsettype[5].removeifzero true +doctype[1].wsettype[5].internalid 18 +doctype[1].wsettype[6].idx 10050 +doctype[1].wsettype[6].elementtype 10012 +doctype[1].wsettype[6].createifnonexistent true +doctype[1].wsettype[6].removeifzero true +doctype[1].wsettype[6].internalid 18 +doctype[1].structtype[0].idx 10023 +doctype[1].structtype[0].name "sct" +doctype[1].structtype[0].field[0].name "s1" +doctype[1].structtype[0].field[0].internalid 2146820765 +doctype[1].structtype[0].field[0].type 10012 +doctype[1].structtype[0].field[1].name "s2" +doctype[1].structtype[0].field[1].internalid 45366795 +doctype[1].structtype[0].field[1].type 10012 +doctype[1].structtype[0].internalid 109267174 +doctype[1].structtype[1].idx 10041 +doctype[1].structtype[1].name "mystruct" +doctype[1].structtype[1].field[0].name "bytearr" +doctype[1].structtype[1].field[0].internalid 1079701754 +doctype[1].structtype[1].field[0].type 10042 +doctype[1].structtype[1].field[1].name "mymap" +doctype[1].structtype[1].field[1].internalid 1954178122 +doctype[1].structtype[1].field[1].type 10043 +doctype[1].structtype[1].field[2].name "title" +doctype[1].structtype[1].field[2].internalid 567626448 +doctype[1].structtype[1].field[2].type 10012 +doctype[1].structtype[1].field[3].name "structfield" +doctype[1].structtype[1].field[3].internalid 1726890940 +doctype[1].structtype[1].field[3].type 10012 +doctype[1].structtype[1].internalid -2092985853 +doctype[1].structtype[2].idx 10047 +doctype[1].structtype[2].name "folder" +doctype[1].structtype[2].field[0].name "Version" +doctype[1].structtype[2].field[0].internalid 64430502 +doctype[1].structtype[2].field[0].type 10007 +doctype[1].structtype[2].field[1].name "Name" +doctype[1].structtype[2].field[1].internalid 2002760220 +doctype[1].structtype[2].field[1].type 10012 +doctype[1].structtype[2].field[2].name "FlagsCounter" +doctype[1].structtype[2].field[2].internalid 1741227606 +doctype[1].structtype[2].field[2].type 10048 +doctype[1].structtype[2].field[3].name "anotherfolder" +doctype[1].structtype[2].field[3].internalid 1582421848 +doctype[1].structtype[2].field[3].type 10047 +doctype[1].structtype[2].internalid 294108848 +doctype[1].structtype[3].idx 10016 +doctype[1].structtype[3].name "types.header" +doctype[1].structtype[3].field[0].name "abyte" +doctype[1].structtype[3].field[0].internalid 110138156 +doctype[1].structtype[3].field[0].type 10003 +doctype[1].structtype[3].field[1].name "along" +doctype[1].structtype[3].field[1].internalid 1206464520 +doctype[1].structtype[3].field[1].type 10008 +doctype[1].structtype[3].field[2].name "arrayfield" +doctype[1].structtype[3].field[2].internalid 965790107 +doctype[1].structtype[3].field[2].type 10017 +doctype[1].structtype[3].field[3].name "setfield" +doctype[1].structtype[3].field[3].internalid 761581914 +doctype[1].structtype[3].field[3].type 10018 +doctype[1].structtype[3].field[4].name "pos" +doctype[1].structtype[3].field[4].internalid 1041567475 +doctype[1].structtype[3].field[4].type 10009 +doctype[1].structtype[3].field[5].name "setfield2" +doctype[1].structtype[3].field[5].internalid 1066659198 +doctype[1].structtype[3].field[5].type 10019 +doctype[1].structtype[3].field[6].name "setfield3" +doctype[1].structtype[3].field[6].internalid 1180155772 +doctype[1].structtype[3].field[6].type 10020 +doctype[1].structtype[3].field[7].name "setfield4" +doctype[1].structtype[3].field[7].internalid 1254131631 +doctype[1].structtype[3].field[7].type 10021 +doctype[1].structtype[3].field[8].name "tagfield" +doctype[1].structtype[3].field[8].internalid 1653562069 +doctype[1].structtype[3].field[8].type 10022 +doctype[1].structtype[3].field[9].name "structfield" +doctype[1].structtype[3].field[9].internalid 486207386 +doctype[1].structtype[3].field[9].type 10023 +doctype[1].structtype[3].field[10].name "structarrayfield" +doctype[1].structtype[3].field[10].internalid 335048518 +doctype[1].structtype[3].field[10].type 10024 +doctype[1].structtype[3].field[11].name "stringmapfield" +doctype[1].structtype[3].field[11].internalid 117465687 +doctype[1].structtype[3].field[11].type 10025 +doctype[1].structtype[3].field[12].name "intmapfield" +doctype[1].structtype[3].field[12].internalid 121004462 +doctype[1].structtype[3].field[12].type 10026 +doctype[1].structtype[3].field[13].name "floatmapfield" +doctype[1].structtype[3].field[13].internalid 1239120925 +doctype[1].structtype[3].field[13].type 10027 +doctype[1].structtype[3].field[14].name "longmapfield" +doctype[1].structtype[3].field[14].internalid 477718745 +doctype[1].structtype[3].field[14].type 10028 +doctype[1].structtype[3].field[15].name "doublemapfield" +doctype[1].structtype[3].field[15].internalid 877047192 +doctype[1].structtype[3].field[15].type 10029 +doctype[1].structtype[3].field[16].name "arraymapfield" +doctype[1].structtype[3].field[16].internalid 1670805928 +doctype[1].structtype[3].field[16].type 10030 +doctype[1].structtype[3].field[17].name "arrarr" +doctype[1].structtype[3].field[17].internalid 1962567166 +doctype[1].structtype[3].field[17].type 10032 +doctype[1].structtype[3].field[18].name "maparr" +doctype[1].structtype[3].field[18].internalid 904375219 +doctype[1].structtype[3].field[18].type 10035 +doctype[1].structtype[3].field[19].name "complexarray" +doctype[1].structtype[3].field[19].internalid 795629533 +doctype[1].structtype[3].field[19].type 10037 +doctype[1].structtype[3].field[20].name "mystructfield" +doctype[1].structtype[3].field[20].internalid 1348513378 +doctype[1].structtype[3].field[20].type 10041 +doctype[1].structtype[3].field[21].name "mystructmap" +doctype[1].structtype[3].field[21].internalid 1511423250 +doctype[1].structtype[3].field[21].type 10044 +doctype[1].structtype[3].field[22].name "mystructarr" +doctype[1].structtype[3].field[22].internalid 595856991 +doctype[1].structtype[3].field[22].type 10045 +doctype[1].structtype[3].field[23].name "Folders" +doctype[1].structtype[3].field[23].internalid 34575524 +doctype[1].structtype[3].field[23].type 10046 +doctype[1].structtype[3].field[24].name "juletre" +doctype[1].structtype[3].field[24].internalid 1039981530 +doctype[1].structtype[3].field[24].type 10008 +doctype[1].structtype[3].field[25].name "album0" +doctype[1].structtype[3].field[25].internalid 764312262 +doctype[1].structtype[3].field[25].type 10049 +doctype[1].structtype[3].field[26].name "album1" +doctype[1].structtype[3].field[26].internalid 1967160809 +doctype[1].structtype[3].field[26].type 10050 +doctype[1].structtype[3].field[27].name "other" +doctype[1].structtype[3].field[27].internalid 2443357 +doctype[1].structtype[3].field[27].type 10008 +doctype[1].structtype[3].internalid 1328581348 diff --git a/config-model/src/test/configmodel/types/documenttypes_with_doc_field.cfg b/config-model/src/test/configmodel/types/documenttypes_with_doc_field.cfg index 61c92eee8d1..15430101553 100644 --- a/config-model/src/test/configmodel/types/documenttypes_with_doc_field.cfg +++ b/config-model/src/test/configmodel/types/documenttypes_with_doc_field.cfg @@ -1,49 +1,65 @@ enablecompression false usev8geopositions false -documenttype[0].id -1368624373 -documenttype[0].name "other_doc" -documenttype[0].version 0 -documenttype[0].headerstruct 1631005140 -documenttype[0].bodystruct 0 -documenttype[0].inherits[0].id 8 -documenttype[0].datatype[0].id 1631005140 -documenttype[0].datatype[0].type STRUCT -documenttype[0].datatype[0].array.element.id 0 -documenttype[0].datatype[0].map.key.id 0 -documenttype[0].datatype[0].map.value.id 0 -documenttype[0].datatype[0].wset.key.id 0 -documenttype[0].datatype[0].wset.createifnonexistent false -documenttype[0].datatype[0].wset.removeifzero false -documenttype[0].datatype[0].annotationref.annotation.id 0 -documenttype[0].datatype[0].sstruct.name "other_doc.header" -documenttype[0].datatype[0].sstruct.version 0 -documenttype[0].datatype[0].sstruct.compression.type NONE -documenttype[0].datatype[0].sstruct.compression.level 0 -documenttype[0].datatype[0].sstruct.compression.threshold 95 -documenttype[0].datatype[0].sstruct.compression.minsize 200 -documenttype[1].id -853072901 -documenttype[1].name "types" -documenttype[1].version 0 -documenttype[1].headerstruct 1328581348 -documenttype[1].bodystruct 0 -documenttype[1].inherits[0].id 8 -documenttype[1].datatype[0].id 1328581348 -documenttype[1].datatype[0].type STRUCT -documenttype[1].datatype[0].array.element.id 0 -documenttype[1].datatype[0].map.key.id 0 -documenttype[1].datatype[0].map.value.id 0 -documenttype[1].datatype[0].wset.key.id 0 -documenttype[1].datatype[0].wset.createifnonexistent false -documenttype[1].datatype[0].wset.removeifzero false -documenttype[1].datatype[0].annotationref.annotation.id 0 -documenttype[1].datatype[0].sstruct.name "types.header" -documenttype[1].datatype[0].sstruct.version 0 -documenttype[1].datatype[0].sstruct.compression.type NONE -documenttype[1].datatype[0].sstruct.compression.level 0 -documenttype[1].datatype[0].sstruct.compression.threshold 95 -documenttype[1].datatype[0].sstruct.compression.minsize 200 -documenttype[1].datatype[0].sstruct.field[0].name "doc_field" -documenttype[1].datatype[0].sstruct.field[0].id 819293364 -documenttype[1].datatype[0].sstruct.field[0].datatype -1368624373 -documenttype[1].datatype[0].sstruct.field[0].detailedtype "" -documenttype[1].fieldsets{[document]}.fields[0] "doc_field" +doctype[0].name "document" +doctype[0].idx 10000 +doctype[0].internalid 8 +doctype[0].contentstruct 10001 +doctype[0].primitivetype[0].idx 10002 +doctype[0].primitivetype[0].name "bool" +doctype[0].primitivetype[1].idx 10003 +doctype[0].primitivetype[1].name "byte" +doctype[0].primitivetype[2].idx 10004 +doctype[0].primitivetype[2].name "double" +doctype[0].primitivetype[3].idx 10005 +doctype[0].primitivetype[3].name "float" +doctype[0].primitivetype[4].idx 10006 +doctype[0].primitivetype[4].name "float16" +doctype[0].primitivetype[5].idx 10007 +doctype[0].primitivetype[5].name "int" +doctype[0].primitivetype[6].idx 10008 +doctype[0].primitivetype[6].name "long" +doctype[0].primitivetype[7].idx 10010 +doctype[0].primitivetype[7].name "predicate" +doctype[0].primitivetype[8].idx 10011 +doctype[0].primitivetype[8].name "raw" +doctype[0].primitivetype[9].idx 10012 +doctype[0].primitivetype[9].name "string" +doctype[0].primitivetype[10].idx 10014 +doctype[0].primitivetype[10].name "uri" +doctype[0].wsettype[0].idx 10013 +doctype[0].wsettype[0].elementtype 10012 +doctype[0].wsettype[0].createifnonexistent true +doctype[0].wsettype[0].removeifzero true +doctype[0].wsettype[0].internalid 18 +doctype[0].structtype[0].idx 10001 +doctype[0].structtype[0].name "document.header" +doctype[0].structtype[0].internalid -284186494 +doctype[0].structtype[1].idx 10009 +doctype[0].structtype[1].name "position" +doctype[0].structtype[1].field[0].name "x" +doctype[0].structtype[1].field[0].internalid 914677694 +doctype[0].structtype[1].field[0].type 10007 +doctype[0].structtype[1].field[1].name "y" +doctype[0].structtype[1].field[1].internalid 900009410 +doctype[0].structtype[1].field[1].type 10007 +doctype[0].structtype[1].internalid 1381038251 +doctype[1].name "other_doc" +doctype[1].idx 10015 +doctype[1].internalid -1368624373 +doctype[1].inherits[0].idx 10000 +doctype[1].contentstruct 10016 +doctype[1].structtype[0].idx 10016 +doctype[1].structtype[0].name "other_doc.header" +doctype[1].structtype[0].internalid 1631005140 +doctype[2].name "types" +doctype[2].idx 10017 +doctype[2].internalid -853072901 +doctype[2].inherits[0].idx 10000 +doctype[2].contentstruct 10018 +doctype[2].fieldsets{[document]}.fields[0] "doc_field" +doctype[2].structtype[0].idx 10018 +doctype[2].structtype[0].name "types.header" +doctype[2].structtype[0].field[0].name "doc_field" +doctype[2].structtype[0].field[0].internalid 819293364 +doctype[2].structtype[0].field[0].type 10015 +doctype[2].structtype[0].internalid 1328581348 diff --git a/config-model/src/test/configmodel/types/references/documenttypes_multiple_imported_fields.cfg b/config-model/src/test/configmodel/types/references/documenttypes_multiple_imported_fields.cfg index d992839d5d9..1b5817e6f39 100644 --- a/config-model/src/test/configmodel/types/references/documenttypes_multiple_imported_fields.cfg +++ b/config-model/src/test/configmodel/types/references/documenttypes_multiple_imported_fields.cfg @@ -1,97 +1,98 @@ enablecompression false usev8geopositions false -documenttype[0].id 2987301 -documenttype[0].name "ad" -documenttype[0].version 0 -documenttype[0].headerstruct 959075962 -documenttype[0].bodystruct 0 -documenttype[0].inherits[0].id 8 -documenttype[0].datatype[0].id 959075962 -documenttype[0].datatype[0].type STRUCT -documenttype[0].datatype[0].array.element.id 0 -documenttype[0].datatype[0].map.key.id 0 -documenttype[0].datatype[0].map.value.id 0 -documenttype[0].datatype[0].wset.key.id 0 -documenttype[0].datatype[0].wset.createifnonexistent false -documenttype[0].datatype[0].wset.removeifzero false -documenttype[0].datatype[0].annotationref.annotation.id 0 -documenttype[0].datatype[0].sstruct.name "ad.header" -documenttype[0].datatype[0].sstruct.version 0 -documenttype[0].datatype[0].sstruct.compression.type NONE -documenttype[0].datatype[0].sstruct.compression.level 0 -documenttype[0].datatype[0].sstruct.compression.threshold 95 -documenttype[0].datatype[0].sstruct.compression.minsize 200 -documenttype[0].datatype[0].sstruct.field[0].name "campaign_ref" -documenttype[0].datatype[0].sstruct.field[0].id 23963250 -documenttype[0].datatype[0].sstruct.field[0].datatype 595216861 -documenttype[0].datatype[0].sstruct.field[0].detailedtype "" -documenttype[0].datatype[0].sstruct.field[1].name "person_ref" -documenttype[0].datatype[0].sstruct.field[1].id 100779805 -documenttype[0].datatype[0].sstruct.field[1].datatype 542332920 -documenttype[0].datatype[0].sstruct.field[1].detailedtype "" -documenttype[0].fieldsets{[document]}.fields[0] "campaign_ref" -documenttype[0].fieldsets{[document]}.fields[1] "person_ref" -documenttype[0].referencetype[0].id 595216861 -documenttype[0].referencetype[0].target_type_id -1318255918 -documenttype[0].referencetype[1].id 542332920 -documenttype[0].referencetype[1].target_type_id 443162583 -documenttype[0].importedfield[0].name "my_cool_field" -documenttype[0].importedfield[1].name "my_swag_field" -documenttype[0].importedfield[2].name "my_name" -documenttype[1].id -1318255918 -documenttype[1].name "campaign" -documenttype[1].version 0 -documenttype[1].headerstruct -2041471955 -documenttype[1].bodystruct 0 -documenttype[1].inherits[0].id 8 -documenttype[1].datatype[0].id -2041471955 -documenttype[1].datatype[0].type STRUCT -documenttype[1].datatype[0].array.element.id 0 -documenttype[1].datatype[0].map.key.id 0 -documenttype[1].datatype[0].map.value.id 0 -documenttype[1].datatype[0].wset.key.id 0 -documenttype[1].datatype[0].wset.createifnonexistent false -documenttype[1].datatype[0].wset.removeifzero false -documenttype[1].datatype[0].annotationref.annotation.id 0 -documenttype[1].datatype[0].sstruct.name "campaign.header" -documenttype[1].datatype[0].sstruct.version 0 -documenttype[1].datatype[0].sstruct.compression.type NONE -documenttype[1].datatype[0].sstruct.compression.level 0 -documenttype[1].datatype[0].sstruct.compression.threshold 95 -documenttype[1].datatype[0].sstruct.compression.minsize 200 -documenttype[1].datatype[0].sstruct.field[0].name "cool_field" -documenttype[1].datatype[0].sstruct.field[0].id 1588702436 -documenttype[1].datatype[0].sstruct.field[0].datatype 2 -documenttype[1].datatype[0].sstruct.field[0].detailedtype "" -documenttype[1].datatype[0].sstruct.field[1].name "swag_field" -documenttype[1].datatype[0].sstruct.field[1].id 1691224741 -documenttype[1].datatype[0].sstruct.field[1].datatype 4 -documenttype[1].datatype[0].sstruct.field[1].detailedtype "" -documenttype[1].fieldsets{[document]}.fields[0] "cool_field" -documenttype[1].fieldsets{[document]}.fields[1] "swag_field" -documenttype[2].id 443162583 -documenttype[2].name "person" -documenttype[2].version 0 -documenttype[2].headerstruct 3129224 -documenttype[2].bodystruct 0 -documenttype[2].inherits[0].id 8 -documenttype[2].datatype[0].id 3129224 -documenttype[2].datatype[0].type STRUCT -documenttype[2].datatype[0].array.element.id 0 -documenttype[2].datatype[0].map.key.id 0 -documenttype[2].datatype[0].map.value.id 0 -documenttype[2].datatype[0].wset.key.id 0 -documenttype[2].datatype[0].wset.createifnonexistent false -documenttype[2].datatype[0].wset.removeifzero false -documenttype[2].datatype[0].annotationref.annotation.id 0 -documenttype[2].datatype[0].sstruct.name "person.header" -documenttype[2].datatype[0].sstruct.version 0 -documenttype[2].datatype[0].sstruct.compression.type NONE -documenttype[2].datatype[0].sstruct.compression.level 0 -documenttype[2].datatype[0].sstruct.compression.threshold 95 -documenttype[2].datatype[0].sstruct.compression.minsize 200 -documenttype[2].datatype[0].sstruct.field[0].name "name" -documenttype[2].datatype[0].sstruct.field[0].id 1160796772 -documenttype[2].datatype[0].sstruct.field[0].datatype 2 -documenttype[2].datatype[0].sstruct.field[0].detailedtype "" -documenttype[2].fieldsets{[document]}.fields[0] "name" +doctype[0].name "document" +doctype[0].idx 10000 +doctype[0].internalid 8 +doctype[0].contentstruct 10001 +doctype[0].primitivetype[0].idx 10002 +doctype[0].primitivetype[0].name "bool" +doctype[0].primitivetype[1].idx 10003 +doctype[0].primitivetype[1].name "byte" +doctype[0].primitivetype[2].idx 10004 +doctype[0].primitivetype[2].name "double" +doctype[0].primitivetype[3].idx 10005 +doctype[0].primitivetype[3].name "float" +doctype[0].primitivetype[4].idx 10006 +doctype[0].primitivetype[4].name "float16" +doctype[0].primitivetype[5].idx 10007 +doctype[0].primitivetype[5].name "int" +doctype[0].primitivetype[6].idx 10008 +doctype[0].primitivetype[6].name "long" +doctype[0].primitivetype[7].idx 10010 +doctype[0].primitivetype[7].name "predicate" +doctype[0].primitivetype[8].idx 10011 +doctype[0].primitivetype[8].name "raw" +doctype[0].primitivetype[9].idx 10012 +doctype[0].primitivetype[9].name "string" +doctype[0].primitivetype[10].idx 10014 +doctype[0].primitivetype[10].name "uri" +doctype[0].wsettype[0].idx 10013 +doctype[0].wsettype[0].elementtype 10012 +doctype[0].wsettype[0].createifnonexistent true +doctype[0].wsettype[0].removeifzero true +doctype[0].wsettype[0].internalid 18 +doctype[0].structtype[0].idx 10001 +doctype[0].structtype[0].name "document.header" +doctype[0].structtype[0].internalid -284186494 +doctype[0].structtype[1].idx 10009 +doctype[0].structtype[1].name "position" +doctype[0].structtype[1].field[0].name "x" +doctype[0].structtype[1].field[0].internalid 914677694 +doctype[0].structtype[1].field[0].type 10007 +doctype[0].structtype[1].field[1].name "y" +doctype[0].structtype[1].field[1].internalid 900009410 +doctype[0].structtype[1].field[1].type 10007 +doctype[0].structtype[1].internalid 1381038251 +doctype[1].name "ad" +doctype[1].idx 10015 +doctype[1].internalid 2987301 +doctype[1].inherits[0].idx 10000 +doctype[1].contentstruct 10016 +doctype[1].fieldsets{[document]}.fields[0] "campaign_ref" +doctype[1].fieldsets{[document]}.fields[1] "person_ref" +doctype[1].importedfield[0].name "my_cool_field" +doctype[1].importedfield[1].name "my_swag_field" +doctype[1].importedfield[2].name "my_name" +doctype[1].documentref[0].idx 10017 +doctype[1].documentref[0].targettype 10018 +doctype[1].documentref[0].internalid 595216861 +doctype[1].documentref[1].idx 10019 +doctype[1].documentref[1].targettype 10020 +doctype[1].documentref[1].internalid 542332920 +doctype[1].structtype[0].idx 10016 +doctype[1].structtype[0].name "ad.header" +doctype[1].structtype[0].field[0].name "campaign_ref" +doctype[1].structtype[0].field[0].internalid 23963250 +doctype[1].structtype[0].field[0].type 10017 +doctype[1].structtype[0].field[1].name "person_ref" +doctype[1].structtype[0].field[1].internalid 100779805 +doctype[1].structtype[0].field[1].type 10019 +doctype[1].structtype[0].internalid 959075962 +doctype[2].name "campaign" +doctype[2].idx 10018 +doctype[2].internalid -1318255918 +doctype[2].inherits[0].idx 10000 +doctype[2].contentstruct 10021 +doctype[2].fieldsets{[document]}.fields[0] "cool_field" +doctype[2].fieldsets{[document]}.fields[1] "swag_field" +doctype[2].structtype[0].idx 10021 +doctype[2].structtype[0].name "campaign.header" +doctype[2].structtype[0].field[0].name "cool_field" +doctype[2].structtype[0].field[0].internalid 1588702436 +doctype[2].structtype[0].field[0].type 10012 +doctype[2].structtype[0].field[1].name "swag_field" +doctype[2].structtype[0].field[1].internalid 1691224741 +doctype[2].structtype[0].field[1].type 10008 +doctype[2].structtype[0].internalid -2041471955 +doctype[3].name "person" +doctype[3].idx 10020 +doctype[3].internalid 443162583 +doctype[3].inherits[0].idx 10000 +doctype[3].contentstruct 10022 +doctype[3].fieldsets{[document]}.fields[0] "name" +doctype[3].structtype[0].idx 10022 +doctype[3].structtype[0].name "person.header" +doctype[3].structtype[0].field[0].name "name" +doctype[3].structtype[0].field[0].internalid 1160796772 +doctype[3].structtype[0].field[0].type 10012 +doctype[3].structtype[0].internalid 3129224 diff --git a/config-model/src/test/configmodel/types/references/documenttypes_refs_to_other_types.cfg b/config-model/src/test/configmodel/types/references/documenttypes_refs_to_other_types.cfg index 68ed924615f..1c5d4d41819 100644 --- a/config-model/src/test/configmodel/types/references/documenttypes_refs_to_other_types.cfg +++ b/config-model/src/test/configmodel/types/references/documenttypes_refs_to_other_types.cfg @@ -1,79 +1,83 @@ enablecompression false usev8geopositions false -documenttype[0].id 2987301 -documenttype[0].name "ad" -documenttype[0].version 0 -documenttype[0].headerstruct 959075962 -documenttype[0].bodystruct 0 -documenttype[0].inherits[0].id 8 -documenttype[0].datatype[0].id 959075962 -documenttype[0].datatype[0].type STRUCT -documenttype[0].datatype[0].array.element.id 0 -documenttype[0].datatype[0].map.key.id 0 -documenttype[0].datatype[0].map.value.id 0 -documenttype[0].datatype[0].wset.key.id 0 -documenttype[0].datatype[0].wset.createifnonexistent false -documenttype[0].datatype[0].wset.removeifzero false -documenttype[0].datatype[0].annotationref.annotation.id 0 -documenttype[0].datatype[0].sstruct.name "ad.header" -documenttype[0].datatype[0].sstruct.version 0 -documenttype[0].datatype[0].sstruct.compression.type NONE -documenttype[0].datatype[0].sstruct.compression.level 0 -documenttype[0].datatype[0].sstruct.compression.threshold 95 -documenttype[0].datatype[0].sstruct.compression.minsize 200 -documenttype[0].datatype[0].sstruct.field[0].name "campaign_ref" -documenttype[0].datatype[0].sstruct.field[0].id 23963250 -documenttype[0].datatype[0].sstruct.field[0].datatype 595216861 -documenttype[0].datatype[0].sstruct.field[0].detailedtype "" -documenttype[0].datatype[0].sstruct.field[1].name "person_ref" -documenttype[0].datatype[0].sstruct.field[1].id 100779805 -documenttype[0].datatype[0].sstruct.field[1].datatype 542332920 -documenttype[0].datatype[0].sstruct.field[1].detailedtype "" -documenttype[0].fieldsets{[document]}.fields[0] "campaign_ref" -documenttype[0].fieldsets{[document]}.fields[1] "person_ref" -documenttype[0].referencetype[0].id 595216861 -documenttype[0].referencetype[0].target_type_id -1318255918 -documenttype[0].referencetype[1].id 542332920 -documenttype[0].referencetype[1].target_type_id 443162583 -documenttype[1].id -1318255918 -documenttype[1].name "campaign" -documenttype[1].version 0 -documenttype[1].headerstruct -2041471955 -documenttype[1].bodystruct 0 -documenttype[1].inherits[0].id 8 -documenttype[1].datatype[0].id -2041471955 -documenttype[1].datatype[0].type STRUCT -documenttype[1].datatype[0].array.element.id 0 -documenttype[1].datatype[0].map.key.id 0 -documenttype[1].datatype[0].map.value.id 0 -documenttype[1].datatype[0].wset.key.id 0 -documenttype[1].datatype[0].wset.createifnonexistent false -documenttype[1].datatype[0].wset.removeifzero false -documenttype[1].datatype[0].annotationref.annotation.id 0 -documenttype[1].datatype[0].sstruct.name "campaign.header" -documenttype[1].datatype[0].sstruct.version 0 -documenttype[1].datatype[0].sstruct.compression.type NONE -documenttype[1].datatype[0].sstruct.compression.level 0 -documenttype[1].datatype[0].sstruct.compression.threshold 95 -documenttype[1].datatype[0].sstruct.compression.minsize 200 -documenttype[2].id 443162583 -documenttype[2].name "person" -documenttype[2].version 0 -documenttype[2].headerstruct 3129224 -documenttype[2].bodystruct 0 -documenttype[2].inherits[0].id 8 -documenttype[2].datatype[0].id 3129224 -documenttype[2].datatype[0].type STRUCT -documenttype[2].datatype[0].array.element.id 0 -documenttype[2].datatype[0].map.key.id 0 -documenttype[2].datatype[0].map.value.id 0 -documenttype[2].datatype[0].wset.key.id 0 -documenttype[2].datatype[0].wset.createifnonexistent false -documenttype[2].datatype[0].wset.removeifzero false -documenttype[2].datatype[0].annotationref.annotation.id 0 -documenttype[2].datatype[0].sstruct.name "person.header" -documenttype[2].datatype[0].sstruct.version 0 -documenttype[2].datatype[0].sstruct.compression.type NONE -documenttype[2].datatype[0].sstruct.compression.level 0 -documenttype[2].datatype[0].sstruct.compression.threshold 95 -documenttype[2].datatype[0].sstruct.compression.minsize 200 +doctype[0].name "document" +doctype[0].idx 10000 +doctype[0].internalid 8 +doctype[0].contentstruct 10001 +doctype[0].primitivetype[0].idx 10002 +doctype[0].primitivetype[0].name "bool" +doctype[0].primitivetype[1].idx 10003 +doctype[0].primitivetype[1].name "byte" +doctype[0].primitivetype[2].idx 10004 +doctype[0].primitivetype[2].name "double" +doctype[0].primitivetype[3].idx 10005 +doctype[0].primitivetype[3].name "float" +doctype[0].primitivetype[4].idx 10006 +doctype[0].primitivetype[4].name "float16" +doctype[0].primitivetype[5].idx 10007 +doctype[0].primitivetype[5].name "int" +doctype[0].primitivetype[6].idx 10008 +doctype[0].primitivetype[6].name "long" +doctype[0].primitivetype[7].idx 10010 +doctype[0].primitivetype[7].name "predicate" +doctype[0].primitivetype[8].idx 10011 +doctype[0].primitivetype[8].name "raw" +doctype[0].primitivetype[9].idx 10012 +doctype[0].primitivetype[9].name "string" +doctype[0].primitivetype[10].idx 10014 +doctype[0].primitivetype[10].name "uri" +doctype[0].wsettype[0].idx 10013 +doctype[0].wsettype[0].elementtype 10012 +doctype[0].wsettype[0].createifnonexistent true +doctype[0].wsettype[0].removeifzero true +doctype[0].wsettype[0].internalid 18 +doctype[0].structtype[0].idx 10001 +doctype[0].structtype[0].name "document.header" +doctype[0].structtype[0].internalid -284186494 +doctype[0].structtype[1].idx 10009 +doctype[0].structtype[1].name "position" +doctype[0].structtype[1].field[0].name "x" +doctype[0].structtype[1].field[0].internalid 914677694 +doctype[0].structtype[1].field[0].type 10007 +doctype[0].structtype[1].field[1].name "y" +doctype[0].structtype[1].field[1].internalid 900009410 +doctype[0].structtype[1].field[1].type 10007 +doctype[0].structtype[1].internalid 1381038251 +doctype[1].name "ad" +doctype[1].idx 10015 +doctype[1].internalid 2987301 +doctype[1].inherits[0].idx 10000 +doctype[1].contentstruct 10016 +doctype[1].fieldsets{[document]}.fields[0] "campaign_ref" +doctype[1].fieldsets{[document]}.fields[1] "person_ref" +doctype[1].documentref[0].idx 10017 +doctype[1].documentref[0].targettype 10018 +doctype[1].documentref[0].internalid 595216861 +doctype[1].documentref[1].idx 10019 +doctype[1].documentref[1].targettype 10020 +doctype[1].documentref[1].internalid 542332920 +doctype[1].structtype[0].idx 10016 +doctype[1].structtype[0].name "ad.header" +doctype[1].structtype[0].field[0].name "campaign_ref" +doctype[1].structtype[0].field[0].internalid 23963250 +doctype[1].structtype[0].field[0].type 10017 +doctype[1].structtype[0].field[1].name "person_ref" +doctype[1].structtype[0].field[1].internalid 100779805 +doctype[1].structtype[0].field[1].type 10019 +doctype[1].structtype[0].internalid 959075962 +doctype[2].name "campaign" +doctype[2].idx 10018 +doctype[2].internalid -1318255918 +doctype[2].inherits[0].idx 10000 +doctype[2].contentstruct 10021 +doctype[2].structtype[0].idx 10021 +doctype[2].structtype[0].name "campaign.header" +doctype[2].structtype[0].internalid -2041471955 +doctype[3].name "person" +doctype[3].idx 10020 +doctype[3].internalid 443162583 +doctype[3].inherits[0].idx 10000 +doctype[3].contentstruct 10022 +doctype[3].structtype[0].idx 10022 +doctype[3].structtype[0].name "person.header" +doctype[3].structtype[0].internalid 3129224 diff --git a/config-model/src/test/configmodel/types/references/documenttypes_refs_to_same_type.cfg b/config-model/src/test/configmodel/types/references/documenttypes_refs_to_same_type.cfg index 6415e62cd7e..2f178c55bfd 100644 --- a/config-model/src/test/configmodel/types/references/documenttypes_refs_to_same_type.cfg +++ b/config-model/src/test/configmodel/types/references/documenttypes_refs_to_same_type.cfg @@ -1,56 +1,72 @@ enablecompression false usev8geopositions false -documenttype[0].id 2987301 -documenttype[0].name "ad" -documenttype[0].version 0 -documenttype[0].headerstruct 959075962 -documenttype[0].bodystruct 0 -documenttype[0].inherits[0].id 8 -documenttype[0].datatype[0].id 959075962 -documenttype[0].datatype[0].type STRUCT -documenttype[0].datatype[0].array.element.id 0 -documenttype[0].datatype[0].map.key.id 0 -documenttype[0].datatype[0].map.value.id 0 -documenttype[0].datatype[0].wset.key.id 0 -documenttype[0].datatype[0].wset.createifnonexistent false -documenttype[0].datatype[0].wset.removeifzero false -documenttype[0].datatype[0].annotationref.annotation.id 0 -documenttype[0].datatype[0].sstruct.name "ad.header" -documenttype[0].datatype[0].sstruct.version 0 -documenttype[0].datatype[0].sstruct.compression.type NONE -documenttype[0].datatype[0].sstruct.compression.level 0 -documenttype[0].datatype[0].sstruct.compression.threshold 95 -documenttype[0].datatype[0].sstruct.compression.minsize 200 -documenttype[0].datatype[0].sstruct.field[0].name "campaign_ref" -documenttype[0].datatype[0].sstruct.field[0].id 23963250 -documenttype[0].datatype[0].sstruct.field[0].datatype 595216861 -documenttype[0].datatype[0].sstruct.field[0].detailedtype "" -documenttype[0].datatype[0].sstruct.field[1].name "other_campaign_ref" -documenttype[0].datatype[0].sstruct.field[1].id 874751172 -documenttype[0].datatype[0].sstruct.field[1].datatype 595216861 -documenttype[0].datatype[0].sstruct.field[1].detailedtype "" -documenttype[0].fieldsets{[document]}.fields[0] "campaign_ref" -documenttype[0].fieldsets{[document]}.fields[1] "other_campaign_ref" -documenttype[0].referencetype[0].id 595216861 -documenttype[0].referencetype[0].target_type_id -1318255918 -documenttype[1].id -1318255918 -documenttype[1].name "campaign" -documenttype[1].version 0 -documenttype[1].headerstruct -2041471955 -documenttype[1].bodystruct 0 -documenttype[1].inherits[0].id 8 -documenttype[1].datatype[0].id -2041471955 -documenttype[1].datatype[0].type STRUCT -documenttype[1].datatype[0].array.element.id 0 -documenttype[1].datatype[0].map.key.id 0 -documenttype[1].datatype[0].map.value.id 0 -documenttype[1].datatype[0].wset.key.id 0 -documenttype[1].datatype[0].wset.createifnonexistent false -documenttype[1].datatype[0].wset.removeifzero false -documenttype[1].datatype[0].annotationref.annotation.id 0 -documenttype[1].datatype[0].sstruct.name "campaign.header" -documenttype[1].datatype[0].sstruct.version 0 -documenttype[1].datatype[0].sstruct.compression.type NONE -documenttype[1].datatype[0].sstruct.compression.level 0 -documenttype[1].datatype[0].sstruct.compression.threshold 95 -documenttype[1].datatype[0].sstruct.compression.minsize 200 +doctype[0].name "document" +doctype[0].idx 10000 +doctype[0].internalid 8 +doctype[0].contentstruct 10001 +doctype[0].primitivetype[0].idx 10002 +doctype[0].primitivetype[0].name "bool" +doctype[0].primitivetype[1].idx 10003 +doctype[0].primitivetype[1].name "byte" +doctype[0].primitivetype[2].idx 10004 +doctype[0].primitivetype[2].name "double" +doctype[0].primitivetype[3].idx 10005 +doctype[0].primitivetype[3].name "float" +doctype[0].primitivetype[4].idx 10006 +doctype[0].primitivetype[4].name "float16" +doctype[0].primitivetype[5].idx 10007 +doctype[0].primitivetype[5].name "int" +doctype[0].primitivetype[6].idx 10008 +doctype[0].primitivetype[6].name "long" +doctype[0].primitivetype[7].idx 10010 +doctype[0].primitivetype[7].name "predicate" +doctype[0].primitivetype[8].idx 10011 +doctype[0].primitivetype[8].name "raw" +doctype[0].primitivetype[9].idx 10012 +doctype[0].primitivetype[9].name "string" +doctype[0].primitivetype[10].idx 10014 +doctype[0].primitivetype[10].name "uri" +doctype[0].wsettype[0].idx 10013 +doctype[0].wsettype[0].elementtype 10012 +doctype[0].wsettype[0].createifnonexistent true +doctype[0].wsettype[0].removeifzero true +doctype[0].wsettype[0].internalid 18 +doctype[0].structtype[0].idx 10001 +doctype[0].structtype[0].name "document.header" +doctype[0].structtype[0].internalid -284186494 +doctype[0].structtype[1].idx 10009 +doctype[0].structtype[1].name "position" +doctype[0].structtype[1].field[0].name "x" +doctype[0].structtype[1].field[0].internalid 914677694 +doctype[0].structtype[1].field[0].type 10007 +doctype[0].structtype[1].field[1].name "y" +doctype[0].structtype[1].field[1].internalid 900009410 +doctype[0].structtype[1].field[1].type 10007 +doctype[0].structtype[1].internalid 1381038251 +doctype[1].name "ad" +doctype[1].idx 10015 +doctype[1].internalid 2987301 +doctype[1].inherits[0].idx 10000 +doctype[1].contentstruct 10016 +doctype[1].fieldsets{[document]}.fields[0] "campaign_ref" +doctype[1].fieldsets{[document]}.fields[1] "other_campaign_ref" +doctype[1].documentref[0].idx 10017 +doctype[1].documentref[0].targettype 10018 +doctype[1].documentref[0].internalid 595216861 +doctype[1].structtype[0].idx 10016 +doctype[1].structtype[0].name "ad.header" +doctype[1].structtype[0].field[0].name "campaign_ref" +doctype[1].structtype[0].field[0].internalid 23963250 +doctype[1].structtype[0].field[0].type 10017 +doctype[1].structtype[0].field[1].name "other_campaign_ref" +doctype[1].structtype[0].field[1].internalid 874751172 +doctype[1].structtype[0].field[1].type 10017 +doctype[1].structtype[0].internalid 959075962 +doctype[2].name "campaign" +doctype[2].idx 10018 +doctype[2].internalid -1318255918 +doctype[2].inherits[0].idx 10000 +doctype[2].contentstruct 10019 +doctype[2].structtype[0].idx 10019 +doctype[2].structtype[0].name "campaign.header" +doctype[2].structtype[0].internalid -2041471955 diff --git a/config-model/src/test/derived/duplicate_struct/documenttypes.cfg b/config-model/src/test/derived/duplicate_struct/documenttypes.cfg index 1b897214d73..867e1e70e7a 100644 --- a/config-model/src/test/derived/duplicate_struct/documenttypes.cfg +++ b/config-model/src/test/derived/duplicate_struct/documenttypes.cfg @@ -1,100 +1,88 @@ enablecompression false usev8geopositions false -documenttype[].id 97614088 -documenttype[].name "foo" -documenttype[].version 0 -documenttype[].headerstruct -308552393 -documenttype[].bodystruct 0 -documenttype[].inherits[].id 8 -documenttype[].datatype[].id -2092985853 -documenttype[].datatype[].type STRUCT -documenttype[].datatype[].array.element.id 0 -documenttype[].datatype[].map.key.id 0 -documenttype[].datatype[].map.value.id 0 -documenttype[].datatype[].wset.key.id 0 -documenttype[].datatype[].wset.createifnonexistent false -documenttype[].datatype[].wset.removeifzero false -documenttype[].datatype[].annotationref.annotation.id 0 -documenttype[].datatype[].sstruct.name "mystruct" -documenttype[].datatype[].sstruct.version 0 -documenttype[].datatype[].sstruct.compression.type NONE -documenttype[].datatype[].sstruct.compression.level 0 -documenttype[].datatype[].sstruct.compression.threshold 95 -documenttype[].datatype[].sstruct.compression.minsize 200 -documenttype[].datatype[].sstruct.field[].name "name" -documenttype[].datatype[].sstruct.field[].id 1160796772 -documenttype[].datatype[].sstruct.field[].datatype 2 -documenttype[].datatype[].sstruct.field[].detailedtype "" -documenttype[].datatype[].sstruct.field[].name "company" -documenttype[].datatype[].sstruct.field[].id 2010814026 -documenttype[].datatype[].sstruct.field[].datatype 2 -documenttype[].datatype[].sstruct.field[].detailedtype "" -documenttype[].datatype[].id 759956026 -documenttype[].datatype[].type ARRAY -documenttype[].datatype[].array.element.id -2092985853 -documenttype[].datatype[].map.key.id 0 -documenttype[].datatype[].map.value.id 0 -documenttype[].datatype[].wset.key.id 0 -documenttype[].datatype[].wset.createifnonexistent false -documenttype[].datatype[].wset.removeifzero false -documenttype[].datatype[].annotationref.annotation.id 0 -documenttype[].datatype[].sstruct.name "" -documenttype[].datatype[].sstruct.version 0 -documenttype[].datatype[].sstruct.compression.type NONE -documenttype[].datatype[].sstruct.compression.level 0 -documenttype[].datatype[].sstruct.compression.threshold 95 -documenttype[].datatype[].sstruct.compression.minsize 200 -documenttype[].datatype[].id -308552393 -documenttype[].datatype[].type STRUCT -documenttype[].datatype[].array.element.id 0 -documenttype[].datatype[].map.key.id 0 -documenttype[].datatype[].map.value.id 0 -documenttype[].datatype[].wset.key.id 0 -documenttype[].datatype[].wset.createifnonexistent false -documenttype[].datatype[].wset.removeifzero false -documenttype[].datatype[].annotationref.annotation.id 0 -documenttype[].datatype[].sstruct.name "foo.header" -documenttype[].datatype[].sstruct.version 0 -documenttype[].datatype[].sstruct.compression.type NONE -documenttype[].datatype[].sstruct.compression.level 0 -documenttype[].datatype[].sstruct.compression.threshold 95 -documenttype[].datatype[].sstruct.compression.minsize 200 -documenttype[].datatype[].sstruct.field[].name "timestamp" -documenttype[].datatype[].sstruct.field[].id 808678733 -documenttype[].datatype[].sstruct.field[].datatype 4 -documenttype[].datatype[].sstruct.field[].detailedtype "" -documenttype[].datatype[].sstruct.field[].name "mystuff" -documenttype[].datatype[].sstruct.field[].id 885106505 -documenttype[].datatype[].sstruct.field[].datatype 759956026 -documenttype[].datatype[].sstruct.field[].detailedtype "" -documenttype[].fieldsets{[document]}.fields[] "mystuff" -documenttype[].fieldsets{[document]}.fields[] "timestamp" -documenttype[].id 378030095 -documenttype[].name "foobar" -documenttype[].version 0 -documenttype[].headerstruct -1365874608 -documenttype[].bodystruct 0 -documenttype[].inherits[].id 8 -documenttype[].inherits[].id 97614088 -documenttype[].datatype[].id -1365874608 -documenttype[].datatype[].type STRUCT -documenttype[].datatype[].array.element.id 0 -documenttype[].datatype[].map.key.id 0 -documenttype[].datatype[].map.value.id 0 -documenttype[].datatype[].wset.key.id 0 -documenttype[].datatype[].wset.createifnonexistent false -documenttype[].datatype[].wset.removeifzero false -documenttype[].datatype[].annotationref.annotation.id 0 -documenttype[].datatype[].sstruct.name "foobar.header" -documenttype[].datatype[].sstruct.version 0 -documenttype[].datatype[].sstruct.compression.type NONE -documenttype[].datatype[].sstruct.compression.level 0 -documenttype[].datatype[].sstruct.compression.threshold 95 -documenttype[].datatype[].sstruct.compression.minsize 200 -documenttype[].datatype[].sstruct.field[].name "title" -documenttype[].datatype[].sstruct.field[].id 567626448 -documenttype[].datatype[].sstruct.field[].datatype 2 -documenttype[].datatype[].sstruct.field[].detailedtype "" -documenttype[].fieldsets{[document]}.fields[] "mystuff" -documenttype[].fieldsets{[document]}.fields[] "timestamp" -documenttype[].fieldsets{[document]}.fields[] "title" +doctype[].name "document" +doctype[].idx 10000 +doctype[].internalid 8 +doctype[].contentstruct 10001 +doctype[].primitivetype[].idx 10002 +doctype[].primitivetype[].name "bool" +doctype[].primitivetype[].idx 10003 +doctype[].primitivetype[].name "byte" +doctype[].primitivetype[].idx 10004 +doctype[].primitivetype[].name "double" +doctype[].primitivetype[].idx 10005 +doctype[].primitivetype[].name "float" +doctype[].primitivetype[].idx 10006 +doctype[].primitivetype[].name "float16" +doctype[].primitivetype[].idx 10007 +doctype[].primitivetype[].name "int" +doctype[].primitivetype[].idx 10008 +doctype[].primitivetype[].name "long" +doctype[].primitivetype[].idx 10010 +doctype[].primitivetype[].name "predicate" +doctype[].primitivetype[].idx 10011 +doctype[].primitivetype[].name "raw" +doctype[].primitivetype[].idx 10012 +doctype[].primitivetype[].name "string" +doctype[].primitivetype[].idx 10014 +doctype[].primitivetype[].name "uri" +doctype[].wsettype[].idx 10013 +doctype[].wsettype[].elementtype 10012 +doctype[].wsettype[].createifnonexistent true +doctype[].wsettype[].removeifzero true +doctype[].wsettype[].internalid 18 +doctype[].structtype[].idx 10001 +doctype[].structtype[].name "document.header" +doctype[].structtype[].internalid -284186494 +doctype[].structtype[].idx 10009 +doctype[].structtype[].name "position" +doctype[].structtype[].field[].name "x" +doctype[].structtype[].field[].internalid 914677694 +doctype[].structtype[].field[].type 10007 +doctype[].structtype[].field[].name "y" +doctype[].structtype[].field[].internalid 900009410 +doctype[].structtype[].field[].type 10007 +doctype[].structtype[].internalid 1381038251 +doctype[].name "foo" +doctype[].idx 10015 +doctype[].internalid 97614088 +doctype[].inherits[].idx 10000 +doctype[].contentstruct 10016 +doctype[].fieldsets{[document]}.fields[] "mystuff" +doctype[].fieldsets{[document]}.fields[] "timestamp" +doctype[].arraytype[].idx 10017 +doctype[].arraytype[].elementtype 10018 +doctype[].arraytype[].internalid 759956026 +doctype[].structtype[].idx 10018 +doctype[].structtype[].name "mystruct" +doctype[].structtype[].field[].name "name" +doctype[].structtype[].field[].internalid 1160796772 +doctype[].structtype[].field[].type 10012 +doctype[].structtype[].field[].name "company" +doctype[].structtype[].field[].internalid 2010814026 +doctype[].structtype[].field[].type 10012 +doctype[].structtype[].internalid -2092985853 +doctype[].structtype[].idx 10016 +doctype[].structtype[].name "foo.header" +doctype[].structtype[].field[].name "timestamp" +doctype[].structtype[].field[].internalid 808678733 +doctype[].structtype[].field[].type 10008 +doctype[].structtype[].field[].name "mystuff" +doctype[].structtype[].field[].internalid 885106505 +doctype[].structtype[].field[].type 10017 +doctype[].structtype[].internalid -308552393 +doctype[].name "foobar" +doctype[].idx 10019 +doctype[].internalid 378030095 +doctype[].inherits[].idx 10000 +doctype[].inherits[].idx 10015 +doctype[].contentstruct 10020 +doctype[].fieldsets{[document]}.fields[] "mystuff" +doctype[].fieldsets{[document]}.fields[] "timestamp" +doctype[].fieldsets{[document]}.fields[] "title" +doctype[].structtype[].idx 10020 +doctype[].structtype[].name "foobar.header" +doctype[].structtype[].field[].name "title" +doctype[].structtype[].field[].internalid 567626448 +doctype[].structtype[].field[].type 10012 +doctype[].structtype[].internalid -1365874608 diff --git a/config-model/src/test/derived/imported_fields_inherited_reference/documenttypes.cfg b/config-model/src/test/derived/imported_fields_inherited_reference/documenttypes.cfg index c3ea1318d33..7a67640adfe 100644 --- a/config-model/src/test/derived/imported_fields_inherited_reference/documenttypes.cfg +++ b/config-model/src/test/derived/imported_fields_inherited_reference/documenttypes.cfg @@ -1,110 +1,99 @@ enablecompression false usev8geopositions false -documenttype[].id -94853056 -documenttype[].name "child_a" -documenttype[].version 0 -documenttype[].headerstruct 867409663 -documenttype[].bodystruct 0 -documenttype[].inherits[].id 8 -documenttype[].datatype[].id 867409663 -documenttype[].datatype[].type STRUCT -documenttype[].datatype[].array.element.id 0 -documenttype[].datatype[].map.key.id 0 -documenttype[].datatype[].map.value.id 0 -documenttype[].datatype[].wset.key.id 0 -documenttype[].datatype[].wset.createifnonexistent false -documenttype[].datatype[].wset.removeifzero false -documenttype[].datatype[].annotationref.annotation.id 0 -documenttype[].datatype[].sstruct.name "child_a.header" -documenttype[].datatype[].sstruct.version 0 -documenttype[].datatype[].sstruct.compression.type NONE -documenttype[].datatype[].sstruct.compression.level 0 -documenttype[].datatype[].sstruct.compression.threshold 95 -documenttype[].datatype[].sstruct.compression.minsize 200 -documenttype[].datatype[].sstruct.field[].name "ref_from_a" -documenttype[].datatype[].sstruct.field[].id 300427062 -documenttype[].datatype[].sstruct.field[].datatype 427398467 -documenttype[].datatype[].sstruct.field[].detailedtype "" -documenttype[].fieldsets{[document]}.fields[] "ref_from_a" -documenttype[].referencetype[].id 427398467 -documenttype[].referencetype[].target_type_id 1175161836 -documenttype[].id -94852095 -documenttype[].name "child_b" -documenttype[].version 0 -documenttype[].headerstruct 670896158 -documenttype[].bodystruct 0 -documenttype[].inherits[].id 8 -documenttype[].inherits[].id -94853056 -documenttype[].datatype[].id 670896158 -documenttype[].datatype[].type STRUCT -documenttype[].datatype[].array.element.id 0 -documenttype[].datatype[].map.key.id 0 -documenttype[].datatype[].map.value.id 0 -documenttype[].datatype[].wset.key.id 0 -documenttype[].datatype[].wset.createifnonexistent false -documenttype[].datatype[].wset.removeifzero false -documenttype[].datatype[].annotationref.annotation.id 0 -documenttype[].datatype[].sstruct.name "child_b.header" -documenttype[].datatype[].sstruct.version 0 -documenttype[].datatype[].sstruct.compression.type NONE -documenttype[].datatype[].sstruct.compression.level 0 -documenttype[].datatype[].sstruct.compression.threshold 95 -documenttype[].datatype[].sstruct.compression.minsize 200 -documenttype[].datatype[].sstruct.field[].name "ref_from_b" -documenttype[].datatype[].sstruct.field[].id 185778735 -documenttype[].datatype[].sstruct.field[].datatype 427398467 -documenttype[].datatype[].sstruct.field[].detailedtype "" -documenttype[].fieldsets{[document]}.fields[] "ref_from_a" -documenttype[].fieldsets{[document]}.fields[] "ref_from_b" -documenttype[].id -94851134 -documenttype[].name "child_c" -documenttype[].version 0 -documenttype[].headerstruct 474382653 -documenttype[].bodystruct 0 -documenttype[].inherits[].id 8 -documenttype[].inherits[].id -94852095 -documenttype[].datatype[].id 474382653 -documenttype[].datatype[].type STRUCT -documenttype[].datatype[].array.element.id 0 -documenttype[].datatype[].map.key.id 0 -documenttype[].datatype[].map.value.id 0 -documenttype[].datatype[].wset.key.id 0 -documenttype[].datatype[].wset.createifnonexistent false -documenttype[].datatype[].wset.removeifzero false -documenttype[].datatype[].annotationref.annotation.id 0 -documenttype[].datatype[].sstruct.name "child_c.header" -documenttype[].datatype[].sstruct.version 0 -documenttype[].datatype[].sstruct.compression.type NONE -documenttype[].datatype[].sstruct.compression.level 0 -documenttype[].datatype[].sstruct.compression.threshold 95 -documenttype[].datatype[].sstruct.compression.minsize 200 -documenttype[].fieldsets{[document]}.fields[] "ref_from_a" -documenttype[].fieldsets{[document]}.fields[] "ref_from_b" -documenttype[].importedfield[].name "from_a_int_field" -documenttype[].importedfield[].name "from_b_int_field" -documenttype[].id 1175161836 -documenttype[].name "parent" -documenttype[].version 0 -documenttype[].headerstruct 836075987 -documenttype[].bodystruct 0 -documenttype[].inherits[].id 8 -documenttype[].datatype[].id 836075987 -documenttype[].datatype[].type STRUCT -documenttype[].datatype[].array.element.id 0 -documenttype[].datatype[].map.key.id 0 -documenttype[].datatype[].map.value.id 0 -documenttype[].datatype[].wset.key.id 0 -documenttype[].datatype[].wset.createifnonexistent false -documenttype[].datatype[].wset.removeifzero false -documenttype[].datatype[].annotationref.annotation.id 0 -documenttype[].datatype[].sstruct.name "parent.header" -documenttype[].datatype[].sstruct.version 0 -documenttype[].datatype[].sstruct.compression.type NONE -documenttype[].datatype[].sstruct.compression.level 0 -documenttype[].datatype[].sstruct.compression.threshold 95 -documenttype[].datatype[].sstruct.compression.minsize 200 -documenttype[].datatype[].sstruct.field[].name "int_field" -documenttype[].datatype[].sstruct.field[].id 2128822283 -documenttype[].datatype[].sstruct.field[].datatype 0 -documenttype[].datatype[].sstruct.field[].detailedtype "" -documenttype[].fieldsets{[document]}.fields[] "int_field" +doctype[].name "document" +doctype[].idx 10000 +doctype[].internalid 8 +doctype[].contentstruct 10001 +doctype[].primitivetype[].idx 10002 +doctype[].primitivetype[].name "bool" +doctype[].primitivetype[].idx 10003 +doctype[].primitivetype[].name "byte" +doctype[].primitivetype[].idx 10004 +doctype[].primitivetype[].name "double" +doctype[].primitivetype[].idx 10005 +doctype[].primitivetype[].name "float" +doctype[].primitivetype[].idx 10006 +doctype[].primitivetype[].name "float16" +doctype[].primitivetype[].idx 10007 +doctype[].primitivetype[].name "int" +doctype[].primitivetype[].idx 10008 +doctype[].primitivetype[].name "long" +doctype[].primitivetype[].idx 10010 +doctype[].primitivetype[].name "predicate" +doctype[].primitivetype[].idx 10011 +doctype[].primitivetype[].name "raw" +doctype[].primitivetype[].idx 10012 +doctype[].primitivetype[].name "string" +doctype[].primitivetype[].idx 10014 +doctype[].primitivetype[].name "uri" +doctype[].wsettype[].idx 10013 +doctype[].wsettype[].elementtype 10012 +doctype[].wsettype[].createifnonexistent true +doctype[].wsettype[].removeifzero true +doctype[].wsettype[].internalid 18 +doctype[].structtype[].idx 10001 +doctype[].structtype[].name "document.header" +doctype[].structtype[].internalid -284186494 +doctype[].structtype[].idx 10009 +doctype[].structtype[].name "position" +doctype[].structtype[].field[].name "x" +doctype[].structtype[].field[].internalid 914677694 +doctype[].structtype[].field[].type 10007 +doctype[].structtype[].field[].name "y" +doctype[].structtype[].field[].internalid 900009410 +doctype[].structtype[].field[].type 10007 +doctype[].structtype[].internalid 1381038251 +doctype[].name "child_a" +doctype[].idx 10015 +doctype[].internalid -94853056 +doctype[].inherits[].idx 10000 +doctype[].contentstruct 10016 +doctype[].fieldsets{[document]}.fields[] "ref_from_a" +doctype[].documentref[].idx 10017 +doctype[].documentref[].targettype 10018 +doctype[].documentref[].internalid 427398467 +doctype[].structtype[].idx 10016 +doctype[].structtype[].name "child_a.header" +doctype[].structtype[].field[].name "ref_from_a" +doctype[].structtype[].field[].internalid 300427062 +doctype[].structtype[].field[].type 10017 +doctype[].structtype[].internalid 867409663 +doctype[].name "child_b" +doctype[].idx 10019 +doctype[].internalid -94852095 +doctype[].inherits[].idx 10000 +doctype[].inherits[].idx 10015 +doctype[].contentstruct 10020 +doctype[].fieldsets{[document]}.fields[] "ref_from_a" +doctype[].fieldsets{[document]}.fields[] "ref_from_b" +doctype[].structtype[].idx 10020 +doctype[].structtype[].name "child_b.header" +doctype[].structtype[].field[].name "ref_from_b" +doctype[].structtype[].field[].internalid 185778735 +doctype[].structtype[].field[].type 10017 +doctype[].structtype[].internalid 670896158 +doctype[].name "child_c" +doctype[].idx 10021 +doctype[].internalid -94851134 +doctype[].inherits[].idx 10000 +doctype[].inherits[].idx 10019 +doctype[].contentstruct 10022 +doctype[].fieldsets{[document]}.fields[] "ref_from_a" +doctype[].fieldsets{[document]}.fields[] "ref_from_b" +doctype[].importedfield[].name "from_a_int_field" +doctype[].importedfield[].name "from_b_int_field" +doctype[].structtype[].idx 10022 +doctype[].structtype[].name "child_c.header" +doctype[].structtype[].internalid 474382653 +doctype[].name "parent" +doctype[].idx 10018 +doctype[].internalid 1175161836 +doctype[].inherits[].idx 10000 +doctype[].contentstruct 10023 +doctype[].fieldsets{[document]}.fields[] "int_field" +doctype[].structtype[].idx 10023 +doctype[].structtype[].name "parent.header" +doctype[].structtype[].field[].name "int_field" +doctype[].structtype[].field[].internalid 2128822283 +doctype[].structtype[].field[].type 10007 +doctype[].structtype[].internalid 836075987 diff --git a/config-model/src/test/derived/inheritfromparent/documenttypes.cfg b/config-model/src/test/derived/inheritfromparent/documenttypes.cfg index da65510ee5a..e8fd97671ff 100644 --- a/config-model/src/test/derived/inheritfromparent/documenttypes.cfg +++ b/config-model/src/test/derived/inheritfromparent/documenttypes.cfg @@ -1,79 +1,80 @@ enablecompression false usev8geopositions false -documenttype[].id 1175161836 -documenttype[].name "parent" -documenttype[].version 0 -documenttype[].headerstruct 836075987 -documenttype[].bodystruct 0 -documenttype[].inherits[].id 8 -documenttype[].datatype[].id 836075987 -documenttype[].datatype[].type STRUCT -documenttype[].datatype[].array.element.id 0 -documenttype[].datatype[].map.key.id 0 -documenttype[].datatype[].map.value.id 0 -documenttype[].datatype[].wset.key.id 0 -documenttype[].datatype[].wset.createifnonexistent false -documenttype[].datatype[].wset.removeifzero false -documenttype[].datatype[].annotationref.annotation.id 0 -documenttype[].datatype[].sstruct.name "parent.header" -documenttype[].datatype[].sstruct.version 0 -documenttype[].datatype[].sstruct.compression.type NONE -documenttype[].datatype[].sstruct.compression.level 0 -documenttype[].datatype[].sstruct.compression.threshold 95 -documenttype[].datatype[].sstruct.compression.minsize 200 -documenttype[].datatype[].sstruct.field[].name "weight_src" -documenttype[].datatype[].sstruct.field[].id 1225660233 -documenttype[].datatype[].sstruct.field[].datatype 1 -documenttype[].datatype[].sstruct.field[].detailedtype "" -documenttype[].datatype[].sstruct.field[].name "weight" -documenttype[].datatype[].sstruct.field[].id 1001392207 -documenttype[].datatype[].sstruct.field[].datatype 1 -documenttype[].datatype[].sstruct.field[].detailedtype "" -documenttype[].datatype[].id 1091188812 -documenttype[].datatype[].type STRUCT -documenttype[].datatype[].array.element.id 0 -documenttype[].datatype[].map.key.id 0 -documenttype[].datatype[].map.value.id 0 -documenttype[].datatype[].wset.key.id 0 -documenttype[].datatype[].wset.createifnonexistent false -documenttype[].datatype[].wset.removeifzero false -documenttype[].datatype[].annotationref.annotation.id 0 -documenttype[].datatype[].sstruct.name "parent_struct" -documenttype[].datatype[].sstruct.version 0 -documenttype[].datatype[].sstruct.compression.type NONE -documenttype[].datatype[].sstruct.compression.level 0 -documenttype[].datatype[].sstruct.compression.threshold 95 -documenttype[].datatype[].sstruct.compression.minsize 200 -documenttype[].datatype[].sstruct.field[].name "parent_field" -documenttype[].datatype[].sstruct.field[].id 933533022 -documenttype[].datatype[].sstruct.field[].datatype 2 -documenttype[].datatype[].sstruct.field[].detailedtype "" -documenttype[].fieldsets{[document]}.fields[] "weight_src" -documenttype[].id 746267614 -documenttype[].name "child" -documenttype[].version 0 -documenttype[].headerstruct 81425825 -documenttype[].bodystruct 0 -documenttype[].inherits[].id 8 -documenttype[].inherits[].id 1175161836 -documenttype[].datatype[].id 81425825 -documenttype[].datatype[].type STRUCT -documenttype[].datatype[].array.element.id 0 -documenttype[].datatype[].map.key.id 0 -documenttype[].datatype[].map.value.id 0 -documenttype[].datatype[].wset.key.id 0 -documenttype[].datatype[].wset.createifnonexistent false -documenttype[].datatype[].wset.removeifzero false -documenttype[].datatype[].annotationref.annotation.id 0 -documenttype[].datatype[].sstruct.name "child.header" -documenttype[].datatype[].sstruct.version 0 -documenttype[].datatype[].sstruct.compression.type NONE -documenttype[].datatype[].sstruct.compression.level 0 -documenttype[].datatype[].sstruct.compression.threshold 95 -documenttype[].datatype[].sstruct.compression.minsize 200 -documenttype[].datatype[].sstruct.field[].name "child_field" -documenttype[].datatype[].sstruct.field[].id 1814271363 -documenttype[].datatype[].sstruct.field[].datatype 1091188812 -documenttype[].datatype[].sstruct.field[].detailedtype "" -documenttype[].fieldsets{[document]}.fields[] "child_field" -documenttype[].fieldsets{[document]}.fields[] "weight_src" +doctype[].name "document" +doctype[].idx 10000 +doctype[].internalid 8 +doctype[].contentstruct 10001 +doctype[].primitivetype[].idx 10002 +doctype[].primitivetype[].name "bool" +doctype[].primitivetype[].idx 10003 +doctype[].primitivetype[].name "byte" +doctype[].primitivetype[].idx 10004 +doctype[].primitivetype[].name "double" +doctype[].primitivetype[].idx 10005 +doctype[].primitivetype[].name "float" +doctype[].primitivetype[].idx 10006 +doctype[].primitivetype[].name "float16" +doctype[].primitivetype[].idx 10007 +doctype[].primitivetype[].name "int" +doctype[].primitivetype[].idx 10008 +doctype[].primitivetype[].name "long" +doctype[].primitivetype[].idx 10010 +doctype[].primitivetype[].name "predicate" +doctype[].primitivetype[].idx 10011 +doctype[].primitivetype[].name "raw" +doctype[].primitivetype[].idx 10012 +doctype[].primitivetype[].name "string" +doctype[].primitivetype[].idx 10014 +doctype[].primitivetype[].name "uri" +doctype[].wsettype[].idx 10013 +doctype[].wsettype[].elementtype 10012 +doctype[].wsettype[].createifnonexistent true +doctype[].wsettype[].removeifzero true +doctype[].wsettype[].internalid 18 +doctype[].structtype[].idx 10001 +doctype[].structtype[].name "document.header" +doctype[].structtype[].internalid -284186494 +doctype[].structtype[].idx 10009 +doctype[].structtype[].name "position" +doctype[].structtype[].field[].name "x" +doctype[].structtype[].field[].internalid 914677694 +doctype[].structtype[].field[].type 10007 +doctype[].structtype[].field[].name "y" +doctype[].structtype[].field[].internalid 900009410 +doctype[].structtype[].field[].type 10007 +doctype[].structtype[].internalid 1381038251 +doctype[].name "parent" +doctype[].idx 10015 +doctype[].internalid 1175161836 +doctype[].inherits[].idx 10000 +doctype[].contentstruct 10016 +doctype[].fieldsets{[document]}.fields[] "weight_src" +doctype[].structtype[].idx 10016 +doctype[].structtype[].name "parent.header" +doctype[].structtype[].field[].name "weight_src" +doctype[].structtype[].field[].internalid 1225660233 +doctype[].structtype[].field[].type 10005 +doctype[].structtype[].field[].name "weight" +doctype[].structtype[].field[].internalid 1001392207 +doctype[].structtype[].field[].type 10005 +doctype[].structtype[].internalid 836075987 +doctype[].structtype[].idx 10017 +doctype[].structtype[].name "parent_struct" +doctype[].structtype[].field[].name "parent_field" +doctype[].structtype[].field[].internalid 933533022 +doctype[].structtype[].field[].type 10012 +doctype[].structtype[].internalid 1091188812 +doctype[].name "child" +doctype[].idx 10018 +doctype[].internalid 746267614 +doctype[].inherits[].idx 10000 +doctype[].inherits[].idx 10015 +doctype[].contentstruct 10019 +doctype[].fieldsets{[document]}.fields[] "child_field" +doctype[].fieldsets{[document]}.fields[] "weight_src" +doctype[].structtype[].idx 10019 +doctype[].structtype[].name "child.header" +doctype[].structtype[].field[].name "child_field" +doctype[].structtype[].field[].internalid 1814271363 +doctype[].structtype[].field[].type 10017 +doctype[].structtype[].internalid 81425825 diff --git a/config-model/src/test/derived/multi_struct/documenttypes.cfg b/config-model/src/test/derived/multi_struct/documenttypes.cfg index c358b2854ee..9ce19079177 100644 --- a/config-model/src/test/derived/multi_struct/documenttypes.cfg +++ b/config-model/src/test/derived/multi_struct/documenttypes.cfg @@ -1,194 +1,128 @@ enablecompression false usev8geopositions false -documenttype[].id 2987301 -documenttype[].name "ad" -documenttype[].version 0 -documenttype[].headerstruct 959075962 -documenttype[].bodystruct 0 -documenttype[].inherits[].id 8 -documenttype[].datatype[].id 959075962 -documenttype[].datatype[].type STRUCT -documenttype[].datatype[].array.element.id 0 -documenttype[].datatype[].map.key.id 0 -documenttype[].datatype[].map.value.id 0 -documenttype[].datatype[].wset.key.id 0 -documenttype[].datatype[].wset.createifnonexistent false -documenttype[].datatype[].wset.removeifzero false -documenttype[].datatype[].annotationref.annotation.id 0 -documenttype[].datatype[].sstruct.name "ad.header" -documenttype[].datatype[].sstruct.version 0 -documenttype[].datatype[].sstruct.compression.type NONE -documenttype[].datatype[].sstruct.compression.level 0 -documenttype[].datatype[].sstruct.compression.threshold 95 -documenttype[].datatype[].sstruct.compression.minsize 200 -documenttype[].datatype[].sstruct.field[].name "e" -documenttype[].datatype[].sstruct.field[].id 970377814 -documenttype[].datatype[].sstruct.field[].datatype 2 -documenttype[].datatype[].sstruct.field[].detailedtype "" -documenttype[].fieldsets{[document]}.fields[] "e" -documenttype[].id -1051831567 -documenttype[].name "product" -documenttype[].version 0 -documenttype[].headerstruct -107300050 -documenttype[].bodystruct 0 -documenttype[].inherits[].id 8 -documenttype[].datatype[].id -2092985853 -documenttype[].datatype[].type STRUCT -documenttype[].datatype[].array.element.id 0 -documenttype[].datatype[].map.key.id 0 -documenttype[].datatype[].map.value.id 0 -documenttype[].datatype[].wset.key.id 0 -documenttype[].datatype[].wset.createifnonexistent false -documenttype[].datatype[].wset.removeifzero false -documenttype[].datatype[].annotationref.annotation.id 0 -documenttype[].datatype[].sstruct.name "mystruct" -documenttype[].datatype[].sstruct.version 0 -documenttype[].datatype[].sstruct.compression.type NONE -documenttype[].datatype[].sstruct.compression.level 0 -documenttype[].datatype[].sstruct.compression.threshold 95 -documenttype[].datatype[].sstruct.compression.minsize 200 -documenttype[].datatype[].sstruct.field[].name "zero" -documenttype[].datatype[].sstruct.field[].id 2128579715 -documenttype[].datatype[].sstruct.field[].datatype 2 -documenttype[].datatype[].sstruct.field[].detailedtype "" -documenttype[].datatype[].sstruct.field[].name "one" -documenttype[].datatype[].sstruct.field[].id 997119011 -documenttype[].datatype[].sstruct.field[].datatype 2 -documenttype[].datatype[].sstruct.field[].detailedtype "" -documenttype[].datatype[].sstruct.field[].name "two" -documenttype[].datatype[].sstruct.field[].id 2054688289 -documenttype[].datatype[].sstruct.field[].datatype 2 -documenttype[].datatype[].sstruct.field[].detailedtype "" -documenttype[].datatype[].sstruct.field[].name "three" -documenttype[].datatype[].sstruct.field[].id 814368361 -documenttype[].datatype[].sstruct.field[].datatype 2 -documenttype[].datatype[].sstruct.field[].detailedtype "" -documenttype[].datatype[].id -420192670 -documenttype[].datatype[].type MAP -documenttype[].datatype[].array.element.id 0 -documenttype[].datatype[].map.key.id 2 -documenttype[].datatype[].map.value.id -2092985853 -documenttype[].datatype[].wset.key.id 0 -documenttype[].datatype[].wset.createifnonexistent false -documenttype[].datatype[].wset.removeifzero false -documenttype[].datatype[].annotationref.annotation.id 0 -documenttype[].datatype[].sstruct.name "" -documenttype[].datatype[].sstruct.version 0 -documenttype[].datatype[].sstruct.compression.type NONE -documenttype[].datatype[].sstruct.compression.level 0 -documenttype[].datatype[].sstruct.compression.threshold 95 -documenttype[].datatype[].sstruct.compression.minsize 200 -documenttype[].datatype[].id -107300050 -documenttype[].datatype[].type STRUCT -documenttype[].datatype[].array.element.id 0 -documenttype[].datatype[].map.key.id 0 -documenttype[].datatype[].map.value.id 0 -documenttype[].datatype[].wset.key.id 0 -documenttype[].datatype[].wset.createifnonexistent false -documenttype[].datatype[].wset.removeifzero false -documenttype[].datatype[].annotationref.annotation.id 0 -documenttype[].datatype[].sstruct.name "product.header" -documenttype[].datatype[].sstruct.version 0 -documenttype[].datatype[].sstruct.compression.type NONE -documenttype[].datatype[].sstruct.compression.level 0 -documenttype[].datatype[].sstruct.compression.threshold 95 -documenttype[].datatype[].sstruct.compression.minsize 200 -documenttype[].datatype[].sstruct.field[].name "more_stuff" -documenttype[].datatype[].sstruct.field[].id 278342855 -documenttype[].datatype[].sstruct.field[].datatype -420192670 -documenttype[].datatype[].sstruct.field[].detailedtype "" -documenttype[].fieldsets{[document]}.fields[] "more_stuff" -documenttype[].id -903152840 -documenttype[].name "shop" -documenttype[].version 0 -documenttype[].headerstruct 371492103 -documenttype[].bodystruct 0 -documenttype[].inherits[].id 8 -documenttype[].datatype[].id -2092985853 -documenttype[].datatype[].type STRUCT -documenttype[].datatype[].array.element.id 0 -documenttype[].datatype[].map.key.id 0 -documenttype[].datatype[].map.value.id 0 -documenttype[].datatype[].wset.key.id 0 -documenttype[].datatype[].wset.createifnonexistent false -documenttype[].datatype[].wset.removeifzero false -documenttype[].datatype[].annotationref.annotation.id 0 -documenttype[].datatype[].sstruct.name "mystruct" -documenttype[].datatype[].sstruct.version 0 -documenttype[].datatype[].sstruct.compression.type NONE -documenttype[].datatype[].sstruct.compression.level 0 -documenttype[].datatype[].sstruct.compression.threshold 95 -documenttype[].datatype[].sstruct.compression.minsize 200 -documenttype[].datatype[].sstruct.field[].name "one" -documenttype[].datatype[].sstruct.field[].id 997119011 -documenttype[].datatype[].sstruct.field[].datatype 2 -documenttype[].datatype[].sstruct.field[].detailedtype "" -documenttype[].datatype[].sstruct.field[].name "two" -documenttype[].datatype[].sstruct.field[].id 2054688289 -documenttype[].datatype[].sstruct.field[].datatype 2 -documenttype[].datatype[].sstruct.field[].detailedtype "" -documenttype[].datatype[].sstruct.field[].name "three" -documenttype[].datatype[].sstruct.field[].id 814368361 -documenttype[].datatype[].sstruct.field[].datatype 2 -documenttype[].datatype[].sstruct.field[].detailedtype "" -documenttype[].datatype[].id -420192670 -documenttype[].datatype[].type MAP -documenttype[].datatype[].array.element.id 0 -documenttype[].datatype[].map.key.id 2 -documenttype[].datatype[].map.value.id -2092985853 -documenttype[].datatype[].wset.key.id 0 -documenttype[].datatype[].wset.createifnonexistent false -documenttype[].datatype[].wset.removeifzero false -documenttype[].datatype[].annotationref.annotation.id 0 -documenttype[].datatype[].sstruct.name "" -documenttype[].datatype[].sstruct.version 0 -documenttype[].datatype[].sstruct.compression.type NONE -documenttype[].datatype[].sstruct.compression.level 0 -documenttype[].datatype[].sstruct.compression.threshold 95 -documenttype[].datatype[].sstruct.compression.minsize 200 -documenttype[].datatype[].id 371492103 -documenttype[].datatype[].type STRUCT -documenttype[].datatype[].array.element.id 0 -documenttype[].datatype[].map.key.id 0 -documenttype[].datatype[].map.value.id 0 -documenttype[].datatype[].wset.key.id 0 -documenttype[].datatype[].wset.createifnonexistent false -documenttype[].datatype[].wset.removeifzero false -documenttype[].datatype[].annotationref.annotation.id 0 -documenttype[].datatype[].sstruct.name "shop.header" -documenttype[].datatype[].sstruct.version 0 -documenttype[].datatype[].sstruct.compression.type NONE -documenttype[].datatype[].sstruct.compression.level 0 -documenttype[].datatype[].sstruct.compression.threshold 95 -documenttype[].datatype[].sstruct.compression.minsize 200 -documenttype[].datatype[].sstruct.field[].name "some_stuff" -documenttype[].datatype[].sstruct.field[].id 1543312381 -documenttype[].datatype[].sstruct.field[].datatype -420192670 -documenttype[].datatype[].sstruct.field[].detailedtype "" -documenttype[].fieldsets{[document]}.fields[] "some_stuff" -documenttype[].id -836031795 -documenttype[].name "user" -documenttype[].version 0 -documenttype[].headerstruct 1601213394 -documenttype[].bodystruct 0 -documenttype[].inherits[].id 8 -documenttype[].datatype[].id 1601213394 -documenttype[].datatype[].type STRUCT -documenttype[].datatype[].array.element.id 0 -documenttype[].datatype[].map.key.id 0 -documenttype[].datatype[].map.value.id 0 -documenttype[].datatype[].wset.key.id 0 -documenttype[].datatype[].wset.createifnonexistent false -documenttype[].datatype[].wset.removeifzero false -documenttype[].datatype[].annotationref.annotation.id 0 -documenttype[].datatype[].sstruct.name "user.header" -documenttype[].datatype[].sstruct.version 0 -documenttype[].datatype[].sstruct.compression.type NONE -documenttype[].datatype[].sstruct.compression.level 0 -documenttype[].datatype[].sstruct.compression.threshold 95 -documenttype[].datatype[].sstruct.compression.minsize 200 -documenttype[].datatype[].sstruct.field[].name "a" -documenttype[].datatype[].sstruct.field[].id 493339625 -documenttype[].datatype[].sstruct.field[].datatype 2 -documenttype[].datatype[].sstruct.field[].detailedtype "" -documenttype[].fieldsets{[document]}.fields[] "a" +doctype[].name "document" +doctype[].idx 10000 +doctype[].internalid 8 +doctype[].contentstruct 10001 +doctype[].primitivetype[].idx 10002 +doctype[].primitivetype[].name "bool" +doctype[].primitivetype[].idx 10003 +doctype[].primitivetype[].name "byte" +doctype[].primitivetype[].idx 10004 +doctype[].primitivetype[].name "double" +doctype[].primitivetype[].idx 10005 +doctype[].primitivetype[].name "float" +doctype[].primitivetype[].idx 10006 +doctype[].primitivetype[].name "float16" +doctype[].primitivetype[].idx 10007 +doctype[].primitivetype[].name "int" +doctype[].primitivetype[].idx 10008 +doctype[].primitivetype[].name "long" +doctype[].primitivetype[].idx 10010 +doctype[].primitivetype[].name "predicate" +doctype[].primitivetype[].idx 10011 +doctype[].primitivetype[].name "raw" +doctype[].primitivetype[].idx 10012 +doctype[].primitivetype[].name "string" +doctype[].primitivetype[].idx 10014 +doctype[].primitivetype[].name "uri" +doctype[].wsettype[].idx 10013 +doctype[].wsettype[].elementtype 10012 +doctype[].wsettype[].createifnonexistent true +doctype[].wsettype[].removeifzero true +doctype[].wsettype[].internalid 18 +doctype[].structtype[].idx 10001 +doctype[].structtype[].name "document.header" +doctype[].structtype[].internalid -284186494 +doctype[].structtype[].idx 10009 +doctype[].structtype[].name "position" +doctype[].structtype[].field[].name "x" +doctype[].structtype[].field[].internalid 914677694 +doctype[].structtype[].field[].type 10007 +doctype[].structtype[].field[].name "y" +doctype[].structtype[].field[].internalid 900009410 +doctype[].structtype[].field[].type 10007 +doctype[].structtype[].internalid 1381038251 +doctype[].name "ad" +doctype[].idx 10015 +doctype[].internalid 2987301 +doctype[].inherits[].idx 10000 +doctype[].contentstruct 10016 +doctype[].fieldsets{[document]}.fields[] "e" +doctype[].structtype[].idx 10016 +doctype[].structtype[].name "ad.header" +doctype[].structtype[].field[].name "e" +doctype[].structtype[].field[].internalid 970377814 +doctype[].structtype[].field[].type 10012 +doctype[].structtype[].internalid 959075962 +doctype[].name "product" +doctype[].idx 10017 +doctype[].internalid -1051831567 +doctype[].inherits[].idx 10000 +doctype[].contentstruct 10018 +doctype[].fieldsets{[document]}.fields[] "more_stuff" +doctype[].maptype[].idx 10019 +doctype[].maptype[].keytype 10012 +doctype[].maptype[].valuetype 10020 +doctype[].maptype[].internalid -420192670 +doctype[].structtype[].idx 10020 +doctype[].structtype[].name "mystruct" +doctype[].structtype[].field[].name "zero" +doctype[].structtype[].field[].internalid 2128579715 +doctype[].structtype[].field[].type 10012 +doctype[].structtype[].field[].name "one" +doctype[].structtype[].field[].internalid 997119011 +doctype[].structtype[].field[].type 10012 +doctype[].structtype[].field[].name "two" +doctype[].structtype[].field[].internalid 2054688289 +doctype[].structtype[].field[].type 10012 +doctype[].structtype[].field[].name "three" +doctype[].structtype[].field[].internalid 814368361 +doctype[].structtype[].field[].type 10012 +doctype[].structtype[].internalid -2092985853 +doctype[].structtype[].idx 10018 +doctype[].structtype[].name "product.header" +doctype[].structtype[].field[].name "more_stuff" +doctype[].structtype[].field[].internalid 278342855 +doctype[].structtype[].field[].type 10019 +doctype[].structtype[].internalid -107300050 +doctype[].name "shop" +doctype[].idx 10021 +doctype[].internalid -903152840 +doctype[].inherits[].idx 10000 +doctype[].contentstruct 10022 +doctype[].fieldsets{[document]}.fields[] "some_stuff" +doctype[].maptype[].idx 10023 +doctype[].maptype[].keytype 10012 +doctype[].maptype[].valuetype 10024 +doctype[].maptype[].internalid -420192670 +doctype[].structtype[].idx 10024 +doctype[].structtype[].name "mystruct" +doctype[].structtype[].field[].name "one" +doctype[].structtype[].field[].internalid 997119011 +doctype[].structtype[].field[].type 10012 +doctype[].structtype[].field[].name "two" +doctype[].structtype[].field[].internalid 2054688289 +doctype[].structtype[].field[].type 10012 +doctype[].structtype[].field[].name "three" +doctype[].structtype[].field[].internalid 814368361 +doctype[].structtype[].field[].type 10012 +doctype[].structtype[].internalid -2092985853 +doctype[].structtype[].idx 10022 +doctype[].structtype[].name "shop.header" +doctype[].structtype[].field[].name "some_stuff" +doctype[].structtype[].field[].internalid 1543312381 +doctype[].structtype[].field[].type 10023 +doctype[].structtype[].internalid 371492103 +doctype[].name "user" +doctype[].idx 10025 +doctype[].internalid -836031795 +doctype[].inherits[].idx 10000 +doctype[].contentstruct 10026 +doctype[].fieldsets{[document]}.fields[] "a" +doctype[].structtype[].idx 10026 +doctype[].structtype[].name "user.header" +doctype[].structtype[].field[].name "a" +doctype[].structtype[].field[].internalid 493339625 +doctype[].structtype[].field[].type 10012 +doctype[].structtype[].internalid 1601213394 diff --git a/config-model/src/test/derived/structinheritance/documenttypes.cfg b/config-model/src/test/derived/structinheritance/documenttypes.cfg index cf4bc89866f..8b343665289 100644 --- a/config-model/src/test/derived/structinheritance/documenttypes.cfg +++ b/config-model/src/test/derived/structinheritance/documenttypes.cfg @@ -1,102 +1,81 @@ enablecompression false usev8geopositions false -documenttype[].id 485659380 -documenttype[].name "simple" -documenttype[].version 0 -documenttype[].headerstruct -2142109237 -documenttype[].bodystruct 0 -documenttype[].inherits[].id 8 -documenttype[].datatype[].id -1396204461 -documenttype[].datatype[].type STRUCT -documenttype[].datatype[].array.element.id 0 -documenttype[].datatype[].map.key.id 0 -documenttype[].datatype[].map.value.id 0 -documenttype[].datatype[].wset.key.id 0 -documenttype[].datatype[].wset.createifnonexistent false -documenttype[].datatype[].wset.removeifzero false -documenttype[].datatype[].annotationref.annotation.id 0 -documenttype[].datatype[].sstruct.name "base" -documenttype[].datatype[].sstruct.version 0 -documenttype[].datatype[].sstruct.compression.type NONE -documenttype[].datatype[].sstruct.compression.level 0 -documenttype[].datatype[].sstruct.compression.threshold 95 -documenttype[].datatype[].sstruct.compression.minsize 200 -documenttype[].datatype[].sstruct.field[].name "name" -documenttype[].datatype[].sstruct.field[].id 1160796772 -documenttype[].datatype[].sstruct.field[].datatype 2 -documenttype[].datatype[].sstruct.field[].detailedtype "" -documenttype[].datatype[].id 746267614 -documenttype[].datatype[].type STRUCT -documenttype[].datatype[].array.element.id 0 -documenttype[].datatype[].map.key.id 0 -documenttype[].datatype[].map.value.id 0 -documenttype[].datatype[].wset.key.id 0 -documenttype[].datatype[].wset.createifnonexistent false -documenttype[].datatype[].wset.removeifzero false -documenttype[].datatype[].annotationref.annotation.id 0 -documenttype[].datatype[].sstruct.name "child" -documenttype[].datatype[].sstruct.version 0 -documenttype[].datatype[].sstruct.compression.type NONE -documenttype[].datatype[].sstruct.compression.level 0 -documenttype[].datatype[].sstruct.compression.threshold 95 -documenttype[].datatype[].sstruct.compression.minsize 200 -documenttype[].datatype[].sstruct.field[].name "age" -documenttype[].datatype[].sstruct.field[].id 1862473705 -documenttype[].datatype[].sstruct.field[].datatype 0 -documenttype[].datatype[].sstruct.field[].detailedtype "" -documenttype[].datatype[].sstruct.field[].name "name" -documenttype[].datatype[].sstruct.field[].id 1160796772 -documenttype[].datatype[].sstruct.field[].datatype 2 -documenttype[].datatype[].sstruct.field[].detailedtype "" -documenttype[].datatype[].id 1811766610 -documenttype[].datatype[].type STRUCT -documenttype[].datatype[].array.element.id 0 -documenttype[].datatype[].map.key.id 0 -documenttype[].datatype[].map.value.id 0 -documenttype[].datatype[].wset.key.id 0 -documenttype[].datatype[].wset.createifnonexistent false -documenttype[].datatype[].wset.removeifzero false -documenttype[].datatype[].annotationref.annotation.id 0 -documenttype[].datatype[].sstruct.name "grandchild" -documenttype[].datatype[].sstruct.version 0 -documenttype[].datatype[].sstruct.compression.type NONE -documenttype[].datatype[].sstruct.compression.level 0 -documenttype[].datatype[].sstruct.compression.threshold 95 -documenttype[].datatype[].sstruct.compression.minsize 200 -documenttype[].datatype[].sstruct.field[].name "toy" -documenttype[].datatype[].sstruct.field[].id 536645790 -documenttype[].datatype[].sstruct.field[].datatype 2 -documenttype[].datatype[].sstruct.field[].detailedtype "" -documenttype[].datatype[].sstruct.field[].name "age" -documenttype[].datatype[].sstruct.field[].id 1862473705 -documenttype[].datatype[].sstruct.field[].datatype 0 -documenttype[].datatype[].sstruct.field[].detailedtype "" -documenttype[].datatype[].sstruct.field[].name "name" -documenttype[].datatype[].sstruct.field[].id 1160796772 -documenttype[].datatype[].sstruct.field[].datatype 2 -documenttype[].datatype[].sstruct.field[].detailedtype "" -documenttype[].datatype[].id -2142109237 -documenttype[].datatype[].type STRUCT -documenttype[].datatype[].array.element.id 0 -documenttype[].datatype[].map.key.id 0 -documenttype[].datatype[].map.value.id 0 -documenttype[].datatype[].wset.key.id 0 -documenttype[].datatype[].wset.createifnonexistent false -documenttype[].datatype[].wset.removeifzero false -documenttype[].datatype[].annotationref.annotation.id 0 -documenttype[].datatype[].sstruct.name "simple.header" -documenttype[].datatype[].sstruct.version 0 -documenttype[].datatype[].sstruct.compression.type NONE -documenttype[].datatype[].sstruct.compression.level 0 -documenttype[].datatype[].sstruct.compression.threshold 95 -documenttype[].datatype[].sstruct.compression.minsize 200 -documenttype[].datatype[].sstruct.field[].name "f1" -documenttype[].datatype[].sstruct.field[].id 750623154 -documenttype[].datatype[].sstruct.field[].datatype 746267614 -documenttype[].datatype[].sstruct.field[].detailedtype "" -documenttype[].datatype[].sstruct.field[].name "f2" -documenttype[].datatype[].sstruct.field[].id 1523850983 -documenttype[].datatype[].sstruct.field[].datatype 1811766610 -documenttype[].datatype[].sstruct.field[].detailedtype "" -documenttype[].fieldsets{[document]}.fields[] "f1" -documenttype[].fieldsets{[document]}.fields[] "f2" +doctype[].name "document" +doctype[].idx 10000 +doctype[].internalid 8 +doctype[].contentstruct 10001 +doctype[].primitivetype[].idx 10002 +doctype[].primitivetype[].name "bool" +doctype[].primitivetype[].idx 10003 +doctype[].primitivetype[].name "byte" +doctype[].primitivetype[].idx 10004 +doctype[].primitivetype[].name "double" +doctype[].primitivetype[].idx 10005 +doctype[].primitivetype[].name "float" +doctype[].primitivetype[].idx 10006 +doctype[].primitivetype[].name "float16" +doctype[].primitivetype[].idx 10007 +doctype[].primitivetype[].name "int" +doctype[].primitivetype[].idx 10008 +doctype[].primitivetype[].name "long" +doctype[].primitivetype[].idx 10010 +doctype[].primitivetype[].name "predicate" +doctype[].primitivetype[].idx 10011 +doctype[].primitivetype[].name "raw" +doctype[].primitivetype[].idx 10012 +doctype[].primitivetype[].name "string" +doctype[].primitivetype[].idx 10014 +doctype[].primitivetype[].name "uri" +doctype[].wsettype[].idx 10013 +doctype[].wsettype[].elementtype 10012 +doctype[].wsettype[].createifnonexistent true +doctype[].wsettype[].removeifzero true +doctype[].wsettype[].internalid 18 +doctype[].structtype[].idx 10001 +doctype[].structtype[].name "document.header" +doctype[].structtype[].internalid -284186494 +doctype[].structtype[].idx 10009 +doctype[].structtype[].name "position" +doctype[].structtype[].field[].name "x" +doctype[].structtype[].field[].internalid 914677694 +doctype[].structtype[].field[].type 10007 +doctype[].structtype[].field[].name "y" +doctype[].structtype[].field[].internalid 900009410 +doctype[].structtype[].field[].type 10007 +doctype[].structtype[].internalid 1381038251 +doctype[].name "simple" +doctype[].idx 10015 +doctype[].internalid 485659380 +doctype[].inherits[].idx 10000 +doctype[].contentstruct 10016 +doctype[].fieldsets{[document]}.fields[] "f1" +doctype[].fieldsets{[document]}.fields[] "f2" +doctype[].structtype[].idx 10018 +doctype[].structtype[].name "base" +doctype[].structtype[].field[].name "name" +doctype[].structtype[].field[].internalid 1160796772 +doctype[].structtype[].field[].type 10012 +doctype[].structtype[].internalid -1396204461 +doctype[].structtype[].idx 10017 +doctype[].structtype[].name "child" +doctype[].structtype[].inherits[].type 10018 +doctype[].structtype[].field[].name "age" +doctype[].structtype[].field[].internalid 1862473705 +doctype[].structtype[].field[].type 10007 +doctype[].structtype[].internalid 746267614 +doctype[].structtype[].idx 10019 +doctype[].structtype[].name "grandchild" +doctype[].structtype[].inherits[].type 10017 +doctype[].structtype[].field[].name "toy" +doctype[].structtype[].field[].internalid 536645790 +doctype[].structtype[].field[].type 10012 +doctype[].structtype[].internalid 1811766610 +doctype[].structtype[].idx 10016 +doctype[].structtype[].name "simple.header" +doctype[].structtype[].field[].name "f1" +doctype[].structtype[].field[].internalid 750623154 +doctype[].structtype[].field[].type 10017 +doctype[].structtype[].field[].name "f2" +doctype[].structtype[].field[].internalid 1523850983 +doctype[].structtype[].field[].type 10019 +doctype[].structtype[].internalid -2142109237 diff --git a/config-model/src/test/derived/tensor/documenttypes.cfg b/config-model/src/test/derived/tensor/documenttypes.cfg index 879b455a711..9ee6a82245f 100644 --- a/config-model/src/test/derived/tensor/documenttypes.cfg +++ b/config-model/src/test/derived/tensor/documenttypes.cfg @@ -1,53 +1,87 @@ enablecompression false usev8geopositions false -documenttype[].id -1290043429 -documenttype[].name "tensor" -documenttype[].version 0 -documenttype[].headerstruct 2125927172 -documenttype[].bodystruct 0 -documenttype[].inherits[].id 8 -documenttype[].datatype[].id 2125927172 -documenttype[].datatype[].type STRUCT -documenttype[].datatype[].array.element.id 0 -documenttype[].datatype[].map.key.id 0 -documenttype[].datatype[].map.value.id 0 -documenttype[].datatype[].wset.key.id 0 -documenttype[].datatype[].wset.createifnonexistent false -documenttype[].datatype[].wset.removeifzero false -documenttype[].datatype[].annotationref.annotation.id 0 -documenttype[].datatype[].sstruct.name "tensor.header" -documenttype[].datatype[].sstruct.version 0 -documenttype[].datatype[].sstruct.compression.type NONE -documenttype[].datatype[].sstruct.compression.level 0 -documenttype[].datatype[].sstruct.compression.threshold 95 -documenttype[].datatype[].sstruct.compression.minsize 200 -documenttype[].datatype[].sstruct.field[].name "f1" -documenttype[].datatype[].sstruct.field[].id 26661415 -documenttype[].datatype[].sstruct.field[].datatype 21 -documenttype[].datatype[].sstruct.field[].detailedtype "tensor(x[3])" -documenttype[].datatype[].sstruct.field[].name "f2" -documenttype[].datatype[].sstruct.field[].id 2080644671 -documenttype[].datatype[].sstruct.field[].datatype 21 -documenttype[].datatype[].sstruct.field[].detailedtype "tensor<float>(x[2],y[1])" -documenttype[].datatype[].sstruct.field[].name "f3" -documenttype[].datatype[].sstruct.field[].id 1295091863 -documenttype[].datatype[].sstruct.field[].datatype 21 -documenttype[].datatype[].sstruct.field[].detailedtype "tensor(x{})" -documenttype[].datatype[].sstruct.field[].name "f4" -documenttype[].datatype[].sstruct.field[].id 1224191509 -documenttype[].datatype[].sstruct.field[].datatype 21 -documenttype[].datatype[].sstruct.field[].detailedtype "tensor(x[10],y[10])" -documenttype[].datatype[].sstruct.field[].name "f5" -documenttype[].datatype[].sstruct.field[].id 329055840 -documenttype[].datatype[].sstruct.field[].datatype 21 -documenttype[].datatype[].sstruct.field[].detailedtype "tensor<float>(x[10])" -documenttype[].datatype[].sstruct.field[].name "f6" -documenttype[].datatype[].sstruct.field[].id 596352344 -documenttype[].datatype[].sstruct.field[].datatype 1 -documenttype[].datatype[].sstruct.field[].detailedtype "" -documenttype[].fieldsets{[document]}.fields[] "f1" -documenttype[].fieldsets{[document]}.fields[] "f2" -documenttype[].fieldsets{[document]}.fields[] "f3" -documenttype[].fieldsets{[document]}.fields[] "f4" -documenttype[].fieldsets{[document]}.fields[] "f5" -documenttype[].fieldsets{[document]}.fields[] "f6" +doctype[].name "document" +doctype[].idx 10000 +doctype[].internalid 8 +doctype[].contentstruct 10001 +doctype[].primitivetype[].idx 10002 +doctype[].primitivetype[].name "bool" +doctype[].primitivetype[].idx 10003 +doctype[].primitivetype[].name "byte" +doctype[].primitivetype[].idx 10004 +doctype[].primitivetype[].name "double" +doctype[].primitivetype[].idx 10005 +doctype[].primitivetype[].name "float" +doctype[].primitivetype[].idx 10006 +doctype[].primitivetype[].name "float16" +doctype[].primitivetype[].idx 10007 +doctype[].primitivetype[].name "int" +doctype[].primitivetype[].idx 10008 +doctype[].primitivetype[].name "long" +doctype[].primitivetype[].idx 10010 +doctype[].primitivetype[].name "predicate" +doctype[].primitivetype[].idx 10011 +doctype[].primitivetype[].name "raw" +doctype[].primitivetype[].idx 10012 +doctype[].primitivetype[].name "string" +doctype[].primitivetype[].idx 10014 +doctype[].primitivetype[].name "uri" +doctype[].wsettype[].idx 10013 +doctype[].wsettype[].elementtype 10012 +doctype[].wsettype[].createifnonexistent true +doctype[].wsettype[].removeifzero true +doctype[].wsettype[].internalid 18 +doctype[].structtype[].idx 10001 +doctype[].structtype[].name "document.header" +doctype[].structtype[].internalid -284186494 +doctype[].structtype[].idx 10009 +doctype[].structtype[].name "position" +doctype[].structtype[].field[].name "x" +doctype[].structtype[].field[].internalid 914677694 +doctype[].structtype[].field[].type 10007 +doctype[].structtype[].field[].name "y" +doctype[].structtype[].field[].internalid 900009410 +doctype[].structtype[].field[].type 10007 +doctype[].structtype[].internalid 1381038251 +doctype[].name "tensor" +doctype[].idx 10015 +doctype[].internalid -1290043429 +doctype[].inherits[].idx 10000 +doctype[].contentstruct 10016 +doctype[].fieldsets{[document]}.fields[] "f1" +doctype[].fieldsets{[document]}.fields[] "f2" +doctype[].fieldsets{[document]}.fields[] "f3" +doctype[].fieldsets{[document]}.fields[] "f4" +doctype[].fieldsets{[document]}.fields[] "f5" +doctype[].fieldsets{[document]}.fields[] "f6" +doctype[].tensortype[].idx 10017 +doctype[].tensortype[].detailedtype "tensor(x[3])" +doctype[].tensortype[].idx 10018 +doctype[].tensortype[].detailedtype "tensor<float>(x[2],y[1])" +doctype[].tensortype[].idx 10019 +doctype[].tensortype[].detailedtype "tensor(x{})" +doctype[].tensortype[].idx 10020 +doctype[].tensortype[].detailedtype "tensor(x[10],y[10])" +doctype[].tensortype[].idx 10021 +doctype[].tensortype[].detailedtype "tensor<float>(x[10])" +doctype[].structtype[].idx 10016 +doctype[].structtype[].name "tensor.header" +doctype[].structtype[].field[].name "f1" +doctype[].structtype[].field[].internalid 26661415 +doctype[].structtype[].field[].type 10017 +doctype[].structtype[].field[].name "f2" +doctype[].structtype[].field[].internalid 2080644671 +doctype[].structtype[].field[].type 10018 +doctype[].structtype[].field[].name "f3" +doctype[].structtype[].field[].internalid 1295091863 +doctype[].structtype[].field[].type 10019 +doctype[].structtype[].field[].name "f4" +doctype[].structtype[].field[].internalid 1224191509 +doctype[].structtype[].field[].type 10020 +doctype[].structtype[].field[].name "f5" +doctype[].structtype[].field[].internalid 329055840 +doctype[].structtype[].field[].type 10021 +doctype[].structtype[].field[].name "f6" +doctype[].structtype[].field[].internalid 596352344 +doctype[].structtype[].field[].type 10005 +doctype[].structtype[].internalid 2125927172 diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/application/CompressedApplicationInputStreamTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/application/CompressedApplicationInputStreamTest.java index 1e8005c8af6..c7662ac9ee4 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/application/CompressedApplicationInputStreamTest.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/application/CompressedApplicationInputStreamTest.java @@ -7,12 +7,16 @@ import com.yahoo.yolean.Exceptions; import org.apache.commons.compress.archivers.ArchiveOutputStream; import org.apache.commons.compress.archivers.tar.TarArchiveOutputStream; import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream; +import org.junit.Rule; import org.junit.Test; +import org.junit.rules.TemporaryFolder; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; import java.util.Arrays; import java.util.List; import java.util.zip.GZIPOutputStream; @@ -26,6 +30,9 @@ import static org.junit.Assert.assertTrue; */ public class CompressedApplicationInputStreamTest { + @Rule + public TemporaryFolder temporaryFolder = new TemporaryFolder(); + private static void writeFileToTar(ArchiveOutputStream taos, File file) throws IOException { taos.putArchiveEntry(taos.createArchiveEntry(file, file.getName())); ByteStreams.copy(new FileInputStream(file), taos); @@ -41,14 +48,14 @@ public class CompressedApplicationInputStreamTest { return outFile; } - public static File createTarFile() throws IOException { - File outFile = File.createTempFile("testapp", ".tar.gz"); + public static File createTarFile(Path dir) throws IOException { + File outFile = Files.createTempFile(dir, "testapp", ".tar.gz").toFile(); ArchiveOutputStream archiveOutputStream = new TarArchiveOutputStream(new GZIPOutputStream(new FileOutputStream(outFile))); return createArchiveFile(archiveOutputStream, outFile); } - private static File createZipFile() throws IOException { - File outFile = File.createTempFile("testapp", ".tar.gz"); + private File createZipFile(Path dir) throws IOException { + File outFile = Files.createTempFile(dir, "testapp", ".tar.gz").toFile(); ArchiveOutputStream archiveOutputStream = new ZipArchiveOutputStream(new FileOutputStream(outFile)); return createArchiveFile(archiveOutputStream, outFile); } @@ -62,7 +69,7 @@ public class CompressedApplicationInputStreamTest { @Test public void require_that_valid_tar_application_can_be_unpacked() throws IOException { - File outFile = createTarFile(); + File outFile = createTarFile(temporaryFolder.getRoot().toPath()); try (CompressedApplicationInputStream unpacked = streamFromTarGz(outFile)) { File outApp = unpacked.decompress(); assertTestApp(outApp); @@ -71,7 +78,7 @@ public class CompressedApplicationInputStreamTest { @Test public void require_that_valid_tar_application_in_subdir_can_be_unpacked() throws IOException { - File outFile = File.createTempFile("testapp", ".tar.gz"); + File outFile = Files.createTempFile(temporaryFolder.getRoot().toPath(), "testapp", ".tar.gz").toFile(); ArchiveOutputStream archiveOutputStream = new TarArchiveOutputStream(new GZIPOutputStream(new FileOutputStream(outFile))); File app = new File("src/test/resources/deploy/validapp"); @@ -100,7 +107,7 @@ public class CompressedApplicationInputStreamTest { @Test public void require_that_valid_zip_application_can_be_unpacked() throws IOException { - File outFile = createZipFile(); + File outFile = createZipFile(temporaryFolder.getRoot().toPath()); try (CompressedApplicationInputStream unpacked = streamFromZip(outFile)) { File outApp = unpacked.decompress(); assertTestApp(outApp); @@ -161,8 +168,8 @@ public class CompressedApplicationInputStreamTest { streamFromTarGz(app).close(); } - private static File createTarGz(String appDir) throws IOException, InterruptedException { - File tmpTar = File.createTempFile("myapp", ".tar"); + private File createTarGz(String appDir) throws IOException, InterruptedException { + File tmpTar = Files.createTempFile(temporaryFolder.getRoot().toPath(), "myapp", ".tar").toFile(); Process p = new ProcessBuilder("tar", "-C", appDir, "-cvf", tmpTar.getAbsolutePath(), ".").start(); p.waitFor(); p = new ProcessBuilder("gzip", tmpTar.getAbsolutePath()).start(); diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionCreateHandlerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionCreateHandlerTest.java index 702dd2792da..6043dddc1db 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionCreateHandlerTest.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/http/v2/SessionCreateHandlerTest.java @@ -109,20 +109,20 @@ public class SessionCreateHandlerTest extends SessionHandlerTest { @Test public void require_that_post_request_must_have_correct_content_type() throws IOException { HashMap<String, String> headers = new HashMap<>(); // no Content-Type header - File outFile = CompressedApplicationInputStreamTest.createTarFile(); + File outFile = CompressedApplicationInputStreamTest.createTarFile(temporaryFolder.getRoot().toPath()); HttpResponse response = createHandler().handle(post(outFile, headers, null)); assertHttpStatusCodeErrorCodeAndMessage(response, BAD_REQUEST, HttpErrorResponse.ErrorCode.BAD_REQUEST, "Request contains no Content-Type header"); } private void assertIllegalFromParameter(String fromValue) throws IOException { - File outFile = CompressedApplicationInputStreamTest.createTarFile(); + File outFile = CompressedApplicationInputStreamTest.createTarFile(temporaryFolder.getRoot().toPath()); HttpRequest request = post(outFile, postHeaders, Collections.singletonMap("from", fromValue)); assertHttpStatusCodeErrorCodeAndMessage(createHandler().handle(request), BAD_REQUEST, HttpErrorResponse.ErrorCode.BAD_REQUEST, "Parameter 'from' has illegal value '" + fromValue + "'"); } @Test public void require_that_prepare_url_is_returned_on_success() throws IOException { - File outFile = CompressedApplicationInputStreamTest.createTarFile(); + File outFile = CompressedApplicationInputStreamTest.createTarFile(temporaryFolder.getRoot().toPath()); Map<String, String> parameters = Collections.singletonMap("name", "foo"); HttpResponse response = createHandler().handle(post(outFile, postHeaders, parameters)); assertNotNull(response); @@ -143,7 +143,7 @@ public class SessionCreateHandlerTest extends SessionHandlerTest { @Test public void require_internal_error_when_exception() throws IOException { - File outFile = CompressedApplicationInputStreamTest.createTarFile(); + File outFile = CompressedApplicationInputStreamTest.createTarFile(temporaryFolder.getRoot().toPath()); new FileWriter(outFile).write("rubbish"); HttpResponse response = createHandler().handle(post(outFile)); assertHttpStatusCodeErrorCodeAndMessage(response, INTERNAL_SERVER_ERROR, @@ -153,7 +153,7 @@ public class SessionCreateHandlerTest extends SessionHandlerTest { @Test public void require_that_handler_unpacks_application() throws IOException { - File outFile = CompressedApplicationInputStreamTest.createTarFile(); + File outFile = CompressedApplicationInputStreamTest.createTarFile(temporaryFolder.getRoot().toPath()); createHandler().handle(post(outFile)); ApplicationFile applicationFile = applicationRepository.getApplicationFileFromSession(tenant, 2, "services.xml", Session.Mode.READ); assertTrue(applicationFile.exists()); diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/Bill.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/Bill.java index 1788154b9e2..01488711f59 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/Bill.java +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/Bill.java @@ -2,6 +2,7 @@ package com.yahoo.vespa.hosted.controller.api.integration.billing; import com.yahoo.config.provision.ApplicationId; +import com.yahoo.config.provision.NodeResources; import com.yahoo.config.provision.TenantName; import com.yahoo.config.provision.zone.ZoneId; @@ -187,6 +188,7 @@ public class Bill { private BigDecimal cpuCost; private BigDecimal memoryCost; private BigDecimal diskCost; + private NodeResources.Architecture architecture; public LineItem(String id, String description, BigDecimal amount, String plan, String agent, ZonedDateTime addedAt) { this.id = id; @@ -198,7 +200,7 @@ public class Bill { } public LineItem(String id, String description, BigDecimal amount, String plan, String agent, ZonedDateTime addedAt, ZonedDateTime startedAt, ZonedDateTime endedAt, ApplicationId applicationId, ZoneId zoneId, - BigDecimal cpuHours, BigDecimal memoryHours, BigDecimal diskHours, BigDecimal cpuCost, BigDecimal memoryCost, BigDecimal diskCost) { + BigDecimal cpuHours, BigDecimal memoryHours, BigDecimal diskHours, BigDecimal cpuCost, BigDecimal memoryCost, BigDecimal diskCost, NodeResources.Architecture architecture) { this(id, description, amount, plan, agent, addedAt); this.startedAt = startedAt; this.endedAt = endedAt; @@ -214,6 +216,7 @@ public class Bill { this.cpuCost = cpuCost; this.memoryCost = memoryCost; this.diskCost = diskCost; + this.architecture = architecture; } /** The opaque ID of this */ @@ -290,6 +293,10 @@ public class Bill { return Optional.ofNullable(diskCost); } + public Optional<NodeResources.Architecture> getArchitecture() { + return Optional.ofNullable(architecture); + } + @Override public boolean equals(Object o) { if (this == o) return true; diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/PlanRegistryMock.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/PlanRegistryMock.java index 5fb4d853e67..4757fa76224 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/PlanRegistryMock.java +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/billing/PlanRegistryMock.java @@ -117,7 +117,8 @@ public class PlanRegistryMock implements PlanRegistry { usage.getDiskMillis().divide(millisPerHour, RoundingMode.HALF_UP), cpuCost, memCost, - dgbCost + dgbCost, + usage.getArchitecture() ); } diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/resource/CostInfo.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/resource/CostInfo.java index 3bc9580307b..c756100e563 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/resource/CostInfo.java +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/resource/CostInfo.java @@ -2,6 +2,7 @@ package com.yahoo.vespa.hosted.controller.api.integration.resource; import com.yahoo.config.provision.ApplicationId; +import com.yahoo.config.provision.NodeResources; import com.yahoo.config.provision.zone.ZoneId; import java.math.BigDecimal; @@ -19,11 +20,12 @@ public class CostInfo { private final BigDecimal cpuCost; private final BigDecimal memoryCost; private final BigDecimal diskCost; + private final NodeResources.Architecture architecture; public CostInfo(ApplicationId applicationId, ZoneId zoneId, BigDecimal cpuHours, BigDecimal memoryHours, BigDecimal diskHours, - BigDecimal cpuCost, BigDecimal memoryCost, BigDecimal diskCost) { + BigDecimal cpuCost, BigDecimal memoryCost, BigDecimal diskCost, NodeResources.Architecture architecture) { this.applicationId = applicationId; this.zoneId = zoneId; this.cpuHours = cpuHours; @@ -32,6 +34,7 @@ public class CostInfo { this.cpuCost = cpuCost; this.memoryCost = memoryCost; this.diskCost = diskCost; + this.architecture = architecture; } public ApplicationId getApplicationId() { @@ -70,4 +73,8 @@ public class CostInfo { return cpuCost.add(memoryCost).add(diskCost); } + public NodeResources.Architecture getArchitecture() { + return architecture; + } + } diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/resource/MeteringClient.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/resource/MeteringClient.java index 767ba4aa34b..944a5eaf696 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/resource/MeteringClient.java +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/resource/MeteringClient.java @@ -17,8 +17,6 @@ public interface MeteringClient { void consume(Collection<ResourceSnapshot> resources); - MeteringData getMeteringData(TenantName tenantName, ApplicationName applicationName); - List<ResourceSnapshot> getSnapshotHistoryForTenant(TenantName tenantName, YearMonth yearMonth); void refresh(); diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/resource/ResourceAllocation.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/resource/ResourceAllocation.java index 742e3a01171..8191540e898 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/resource/ResourceAllocation.java +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/resource/ResourceAllocation.java @@ -1,6 +1,8 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.controller.api.integration.resource; +import com.yahoo.config.provision.NodeResources; + import java.util.Objects; /** @@ -10,16 +12,18 @@ import java.util.Objects; */ public class ResourceAllocation { - public static final ResourceAllocation ZERO = new ResourceAllocation(0, 0, 0); + public static final ResourceAllocation ZERO = new ResourceAllocation(0, 0, 0, NodeResources.Architecture.getDefault()); private final double cpuCores; private final double memoryGb; private final double diskGb; + private final NodeResources.Architecture architecture; - public ResourceAllocation(double cpuCores, double memoryGb, double diskGb) { + public ResourceAllocation(double cpuCores, double memoryGb, double diskGb, NodeResources.Architecture architecture) { this.cpuCores = cpuCores; this.memoryGb = memoryGb; this.diskGb = diskGb; + this.architecture = architecture; } public double usageFraction(ResourceAllocation total) { @@ -38,14 +42,18 @@ public class ResourceAllocation { return diskGb; } + public NodeResources.Architecture getArchitecture() { + return architecture; + } + /** Returns a copy of this with the given allocation added */ public ResourceAllocation plus(ResourceAllocation allocation) { - return new ResourceAllocation(cpuCores + allocation.cpuCores, memoryGb + allocation.memoryGb, diskGb + allocation.diskGb); + return new ResourceAllocation(cpuCores + allocation.cpuCores, memoryGb + allocation.memoryGb, diskGb + allocation.diskGb, architecture); } /** Returns a copy of this with each resource multiplied by given factor */ public ResourceAllocation multiply(double multiplicand) { - return new ResourceAllocation(cpuCores * multiplicand, memoryGb * multiplicand, diskGb * multiplicand); + return new ResourceAllocation(cpuCores * multiplicand, memoryGb * multiplicand, diskGb * multiplicand, architecture); } @Override diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/resource/ResourceDatabaseClient.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/resource/ResourceDatabaseClient.java index 2f277193231..8ae12c0e7ac 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/resource/ResourceDatabaseClient.java +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/resource/ResourceDatabaseClient.java @@ -18,8 +18,6 @@ public interface ResourceDatabaseClient { void writeResourceSnapshots(Collection<ResourceSnapshot> snapshots); - List<ResourceSnapshot> getResourceSnapshotsForMonth(TenantName tenantName, ApplicationName applicationName, YearMonth month); - List<ResourceUsage> getResourceSnapshotsForPeriod(TenantName tenantName, long startTimestamp, long endTimestamp); void refreshMaterializedView(); diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/resource/ResourceDatabaseClientMock.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/resource/ResourceDatabaseClientMock.java index 5a4d250ea9d..c680990e240 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/resource/ResourceDatabaseClientMock.java +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/resource/ResourceDatabaseClientMock.java @@ -45,19 +45,6 @@ public class ResourceDatabaseClientMock implements ResourceDatabaseClient { } @Override - public List<ResourceSnapshot> getResourceSnapshotsForMonth(TenantName tenantName, ApplicationName applicationName, YearMonth month) { - return resourceSnapshots.stream() - .filter(resourceSnapshot -> { - LocalDate snapshotDate = LocalDate.ofInstant(resourceSnapshot.getTimestamp(), ZoneId.of("UTC")); - return YearMonth.from(snapshotDate).equals(month) && - snapshotDate.getYear() == month.getYear() && - resourceSnapshot.getApplicationId().tenant().equals(tenantName) && - resourceSnapshot.getApplicationId().application().equals(applicationName); - }) - .collect(Collectors.toList()); - } - - @Override public Set<YearMonth> getMonthsWithSnapshotsForTenant(TenantName tenantName) { return Collections.emptySet(); } @@ -88,6 +75,7 @@ public class ResourceDatabaseClientMock implements ResourceDatabaseClient { a.getApplicationId(), a.getZoneId(), plan, + a.getArchitecture(), BigDecimal.valueOf(a.getCpuCores()).multiply(d), BigDecimal.valueOf(a.getMemoryGb()).multiply(d), BigDecimal.valueOf(a.getDiskGb()).multiply(d) @@ -100,10 +88,12 @@ public class ResourceDatabaseClientMock implements ResourceDatabaseClient { assert a.getApplicationId().equals(b.getApplicationId()); assert a.getZoneId().equals(b.getZoneId()); assert a.getPlan().equals(b.getPlan()); + assert a.getArchitecture().equals(b.getArchitecture()); return new ResourceUsage( a.getApplicationId(), a.getZoneId(), a.getPlan(), + a.getArchitecture(), a.getCpuMillis().add(b.getCpuMillis()), a.getMemoryMillis().add(b.getMemoryMillis()), a.getDiskMillis().add(b.getDiskMillis()) diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/resource/ResourceSnapshot.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/resource/ResourceSnapshot.java index 9b3de004bae..85ee23f4df0 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/resource/ResourceSnapshot.java +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/resource/ResourceSnapshot.java @@ -24,15 +24,15 @@ public class ResourceSnapshot { private final Instant timestamp; private final ZoneId zoneId; - public ResourceSnapshot(ApplicationId applicationId, double cpuCores, double memoryGb, double diskGb, Instant timestamp, ZoneId zoneId) { + public ResourceSnapshot(ApplicationId applicationId, double cpuCores, double memoryGb, double diskGb, NodeResources.Architecture architecture, Instant timestamp, ZoneId zoneId) { this.applicationId = applicationId; - this.resourceAllocation = new ResourceAllocation(cpuCores, memoryGb, diskGb); + this.resourceAllocation = new ResourceAllocation(cpuCores, memoryGb, diskGb, architecture); this.timestamp = timestamp; this.zoneId = zoneId; } - public static ResourceSnapshot from(ApplicationId applicationId, int nodes, double cpuCores, double memoryGb, double diskGb, Instant timestamp, ZoneId zoneId) { - return new ResourceSnapshot(applicationId, cpuCores * nodes, memoryGb * nodes, diskGb * nodes, timestamp, zoneId); + public static ResourceSnapshot from(ApplicationId applicationId, int nodes, double cpuCores, double memoryGb, double diskGb, NodeResources.Architecture architecture, Instant timestamp, ZoneId zoneId) { + return new ResourceSnapshot(applicationId, cpuCores * nodes, memoryGb * nodes, diskGb * nodes, architecture, timestamp, zoneId); } public static ResourceSnapshot from(List<Node> nodes, Instant timestamp, ZoneId zoneId) { @@ -48,6 +48,7 @@ public class ResourceSnapshot { nodes.stream().map(Node::resources).mapToDouble(NodeResources::vcpu).sum(), nodes.stream().map(Node::resources).mapToDouble(NodeResources::memoryGb).sum(), nodes.stream().map(Node::resources).mapToDouble(NodeResources::diskGb).sum(), + nodes.stream().map(node -> node.resources().architecture()).findFirst().orElse(NodeResources.Architecture.getDefault()), timestamp, zoneId ); @@ -81,6 +82,10 @@ public class ResourceSnapshot { return zoneId; } + public NodeResources.Architecture getArchitecture() { + return resourceAllocation.getArchitecture(); + } + @Override public boolean equals(Object o) { if (this == o) return true; diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/resource/ResourceUsage.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/resource/ResourceUsage.java index fdea3b26372..850ca040d03 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/resource/ResourceUsage.java +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/resource/ResourceUsage.java @@ -2,6 +2,7 @@ package com.yahoo.vespa.hosted.controller.api.integration.resource; import com.yahoo.config.provision.ApplicationId; +import com.yahoo.config.provision.NodeResources; import com.yahoo.config.provision.zone.ZoneId; import com.yahoo.vespa.hosted.controller.api.integration.billing.Plan; @@ -15,8 +16,9 @@ public class ResourceUsage { private final BigDecimal cpuMillis; private final BigDecimal memoryMillis; private final BigDecimal diskMillis; + private final NodeResources.Architecture architecture; - public ResourceUsage(ApplicationId applicationId, ZoneId zoneId, Plan plan, + public ResourceUsage(ApplicationId applicationId, ZoneId zoneId, Plan plan, NodeResources.Architecture architecture, BigDecimal cpuMillis, BigDecimal memoryMillis, BigDecimal diskMillis) { this.applicationId = applicationId; this.zoneId = zoneId; @@ -24,6 +26,7 @@ public class ResourceUsage { this.memoryMillis = memoryMillis; this.diskMillis = diskMillis; this.plan = plan; + this.architecture = architecture; } public ApplicationId getApplicationId() { @@ -50,4 +53,7 @@ public class ResourceUsage { return plan; } + public NodeResources.Architecture getArchitecture() { + return architecture; + } } diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/stubs/MockMeteringClient.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/stubs/MockMeteringClient.java index 003ecb32a32..ca094f98607 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/stubs/MockMeteringClient.java +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/stubs/MockMeteringClient.java @@ -1,17 +1,14 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.controller.api.integration.stubs; -import com.yahoo.config.provision.ApplicationName; import com.yahoo.config.provision.TenantName; import com.yahoo.vespa.hosted.controller.api.integration.resource.MeteringData; -import com.yahoo.vespa.hosted.controller.api.integration.resource.ResourceAllocation; import com.yahoo.vespa.hosted.controller.api.integration.resource.ResourceSnapshot; import com.yahoo.vespa.hosted.controller.api.integration.resource.MeteringClient; import java.time.YearMonth; import java.util.ArrayList; import java.util.Collection; -import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Optional; @@ -32,14 +29,6 @@ public class MockMeteringClient implements MeteringClient { } @Override - public MeteringData getMeteringData(TenantName tenantName, ApplicationName applicationName) { - return meteringData.orElseGet(() -> { - ResourceAllocation emptyAllocation = new ResourceAllocation(0, 0, 0); - return new MeteringData(emptyAllocation, emptyAllocation, emptyAllocation, Collections.emptyMap()); - }); - } - - @Override public List<ResourceSnapshot> getSnapshotHistoryForTenant(TenantName tenantName, YearMonth yearMonth) { return new ArrayList<>(resources); } diff --git a/controller-server/pom.xml b/controller-server/pom.xml index fa4a0dc06d6..ca8951124ef 100644 --- a/controller-server/pom.xml +++ b/controller-server/pom.xml @@ -138,7 +138,7 @@ <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> - <version>1.3.3</version> + <version>1.4</version> </dependency> <dependency> diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ResourceMeterMaintainer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ResourceMeterMaintainer.java index acaf35133d7..d4905f7e20a 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ResourceMeterMaintainer.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ResourceMeterMaintainer.java @@ -33,7 +33,9 @@ import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.TimeoutException; +import java.util.function.Function; import java.util.logging.Level; +import java.util.stream.Collector; import java.util.stream.Collectors; /** @@ -150,14 +152,14 @@ public class ResourceMeterMaintainer extends ControllerMaintainer { .filter(this::unlessNodeOwnerIsSystemApplication) .filter(this::isNodeStateMeterable) .filter(this::isClusterTypeMeterable) + // Grouping by ApplicationId -> Architecture -> ResourceSnapshot .collect(Collectors.groupingBy(node -> - node.owner().get(), - Collectors.collectingAndThen(Collectors.toList(), - nodeList -> ResourceSnapshot.from( - nodeList, - clock.instant(), - zoneId)) - )).values(); + node.owner().get(), + groupSnapshotsByArchitecture(zoneId))) + .values() + .stream() + .flatMap(list -> list.values().stream()) + .collect(Collectors.toList()); } private boolean unlessNodeOwnerIsSystemApplication(Node node) { @@ -182,7 +184,7 @@ public class ResourceMeterMaintainer extends ControllerMaintainer { public static double cost(ClusterResources clusterResources, SystemName systemName) { NodeResources nr = clusterResources.nodeResources(); - return cost(new ResourceAllocation(nr.vcpu(), nr.memoryGb(), nr.diskGb()).multiply(clusterResources.nodes()), systemName); + return cost(new ResourceAllocation(nr.vcpu(), nr.memoryGb(), nr.diskGb(), nr.architecture()).multiply(clusterResources.nodes()), systemName); } private static double cost(ResourceAllocation allocation, SystemName systemName) { @@ -201,7 +203,7 @@ public class ResourceMeterMaintainer extends ControllerMaintainer { metric.createContext(Collections.emptyMap())); resourceSnapshots.forEach(snapshot -> { - var context = getMetricContext(snapshot.getApplicationId(), snapshot.getZoneId()); + var context = getMetricContext(snapshot); metric.set("metering.vcpu", snapshot.getCpuCores(), context); metric.set("metering.memoryGB", snapshot.getMemoryGb(), context); metric.set("metering.diskGB", snapshot.getDiskGb(), context); @@ -222,4 +224,29 @@ public class ResourceMeterMaintainer extends ControllerMaintainer { "zoneId", zoneId.value() )); } + + private Metric.Context getMetricContext(ResourceSnapshot snapshot) { + return metric.createContext(Map.of( + "tenant", snapshot.getApplicationId().tenant().value(), + "applicationId", snapshot.getApplicationId().toFullString(), + "zoneId", snapshot.getZoneId().value(), + "architecture", snapshot.getArchitecture() + )); + } + + private Collector<Node, ?, Map<NodeResources.Architecture, ResourceSnapshot>> groupSnapshotsByArchitecture(ZoneId zoneId) { + return Collectors.collectingAndThen( + Collectors.groupingBy(node -> node.resources().architecture()), + convertNodeListToResourceSnapshot(zoneId) + ); + } + + private Function<Map<NodeResources.Architecture, List<Node>>, Map<NodeResources.Architecture, ResourceSnapshot>> convertNodeListToResourceSnapshot(ZoneId zoneId) { + return nodeMap -> nodeMap.entrySet() + .stream() + .collect(Collectors.toMap( + Map.Entry::getKey, + entry -> ResourceSnapshot.from(entry.getValue(), clock.instant(), zoneId)) + ); + } } diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/metric/CostCalculator.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/metric/CostCalculator.java index 089767dc586..b36b2b9cad8 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/metric/CostCalculator.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/metric/CostCalculator.java @@ -57,7 +57,7 @@ public class CostCalculator { Property property = propertyByTenantName.get(node.owner().get().tenant()); if (property == null) continue; var allocation = allocationByProperty.getOrDefault(property, ResourceAllocation.ZERO); - var nodeAllocation = new ResourceAllocation(node.resources().vcpu(), node.resources().memoryGb(), node.resources().diskGb()); + var nodeAllocation = new ResourceAllocation(node.resources().vcpu(), node.resources().memoryGb(), node.resources().diskGb(), node.resources().architecture()); allocationByProperty.put(property, allocation.plus(nodeAllocation)); totalAllocation = totalAllocation.plus(nodeAllocation); } diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java index d9a38a5b578..9089bb27035 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java @@ -255,7 +255,6 @@ public class ApplicationApiHandler extends AuditLoggingRequestHandler { if (path.matches("/application/v4/tenant/{tenant}/application/{application}/diff/{number}")) return applicationPackageDiff(path.get("tenant"), path.get("application"), path.get("number")); if (path.matches("/application/v4/tenant/{tenant}/application/{application}/deploying")) return deploying(path.get("tenant"), path.get("application"), "default", request); if (path.matches("/application/v4/tenant/{tenant}/application/{application}/deploying/pin")) return deploying(path.get("tenant"), path.get("application"), "default", request); - if (path.matches("/application/v4/tenant/{tenant}/application/{application}/metering")) return metering(path.get("tenant"), path.get("application"), request); if (path.matches("/application/v4/tenant/{tenant}/application/{application}/instance")) return applications(path.get("tenant"), Optional.of(path.get("application")), request); if (path.matches("/application/v4/tenant/{tenant}/application/{application}/instance/{instance}")) return instance(path.get("tenant"), path.get("application"), path.get("instance"), request); if (path.matches("/application/v4/tenant/{tenant}/application/{application}/instance/{instance}/deploying")) return deploying(path.get("tenant"), path.get("application"), path.get("instance"), request); @@ -1762,68 +1761,6 @@ public class ApplicationApiHandler extends AuditLoggingRequestHandler { return new SlimeJsonResponse(slime); } - private HttpResponse metering(String tenant, String application, HttpRequest request) { - - Slime slime = new Slime(); - Cursor root = slime.setObject(); - - MeteringData meteringData = controller.serviceRegistry() - .meteringService() - .getMeteringData(TenantName.from(tenant), ApplicationName.from(application)); - - ResourceAllocation currentSnapshot = meteringData.getCurrentSnapshot(); - Cursor currentRate = root.setObject("currentrate"); - currentRate.setDouble("cpu", currentSnapshot.getCpuCores()); - currentRate.setDouble("mem", currentSnapshot.getMemoryGb()); - currentRate.setDouble("disk", currentSnapshot.getDiskGb()); - - ResourceAllocation thisMonth = meteringData.getThisMonth(); - Cursor thismonth = root.setObject("thismonth"); - thismonth.setDouble("cpu", thisMonth.getCpuCores()); - thismonth.setDouble("mem", thisMonth.getMemoryGb()); - thismonth.setDouble("disk", thisMonth.getDiskGb()); - - ResourceAllocation lastMonth = meteringData.getLastMonth(); - Cursor lastmonth = root.setObject("lastmonth"); - lastmonth.setDouble("cpu", lastMonth.getCpuCores()); - lastmonth.setDouble("mem", lastMonth.getMemoryGb()); - lastmonth.setDouble("disk", lastMonth.getDiskGb()); - - - Map<ApplicationId, List<ResourceSnapshot>> history = meteringData.getSnapshotHistory(); - Cursor details = root.setObject("details"); - - Cursor detailsCpu = details.setObject("cpu"); - Cursor detailsMem = details.setObject("mem"); - Cursor detailsDisk = details.setObject("disk"); - - history.forEach((applicationId, resources) -> { - String instanceName = applicationId.instance().value(); - Cursor detailsCpuApp = detailsCpu.setObject(instanceName); - Cursor detailsMemApp = detailsMem.setObject(instanceName); - Cursor detailsDiskApp = detailsDisk.setObject(instanceName); - Cursor detailsCpuData = detailsCpuApp.setArray("data"); - Cursor detailsMemData = detailsMemApp.setArray("data"); - Cursor detailsDiskData = detailsDiskApp.setArray("data"); - - resources.forEach(resourceSnapshot -> { - Cursor cpu = detailsCpuData.addObject(); - cpu.setLong("unixms", resourceSnapshot.getTimestamp().toEpochMilli()); - cpu.setDouble("value", resourceSnapshot.getCpuCores()); - - Cursor mem = detailsMemData.addObject(); - mem.setLong("unixms", resourceSnapshot.getTimestamp().toEpochMilli()); - mem.setDouble("value", resourceSnapshot.getMemoryGb()); - - Cursor disk = detailsDiskData.addObject(); - disk.setLong("unixms", resourceSnapshot.getTimestamp().toEpochMilli()); - disk.setDouble("value", resourceSnapshot.getDiskGb()); - }); - }); - - return new SlimeJsonResponse(slime); - } - private HttpResponse deploying(String tenantName, String applicationName, String instanceName, HttpRequest request) { Instance instance = controller.applications().requireInstance(ApplicationId.from(tenantName, applicationName, instanceName)); Slime slime = new Slime(); diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/MultipartParser.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/MultipartParser.java index 8d03ca74500..a9e24943c0d 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/MultipartParser.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/MultipartParser.java @@ -5,6 +5,7 @@ import com.yahoo.container.jdisc.HttpRequest; import com.yahoo.vespa.hosted.controller.api.application.v4.EnvironmentResource; import org.apache.commons.fileupload.MultipartStream; import org.apache.commons.fileupload.ParameterParser; +import org.apache.commons.fileupload.util.Streams; import java.io.ByteArrayOutputStream; import java.io.IOException; @@ -21,6 +22,16 @@ import java.util.Map; */ public class MultipartParser { + private final long maxDataLength; + + public MultipartParser() { + this(2 * (long) Math.pow(1024, 3)); // 2 GB + } + + MultipartParser(long maxDataLength) { + this.maxDataLength = maxDataLength; + } + /** * Parses the given multi-part request and returns all the parts indexed by their name. * @@ -37,10 +48,13 @@ public class MultipartParser { */ public Map<String, byte[]> parse(String contentTypeHeader, InputStream data, URI uri) { try { + LimitedOutputStream output = new LimitedOutputStream(maxDataLength); ParameterParser parameterParser = new ParameterParser(); Map<String, String> contentType = parameterParser.parse(contentTypeHeader, ';'); - if (contentType.containsKey("application/zip")) - return Map.of(EnvironmentResource.APPLICATION_ZIP, data.readAllBytes()); + if (contentType.containsKey("application/zip")) { + Streams.copy(data, output, false); + return Map.of(EnvironmentResource.APPLICATION_ZIP, output.toByteArray()); + } if ( ! contentType.containsKey("multipart/form-data")) throw new IllegalArgumentException("Expected a multipart or application/zip message, but got Content-Type: " + contentTypeHeader); String boundary = contentType.get("boundary"); @@ -55,17 +69,17 @@ public class MultipartParser { if (contentDispositionContent == null) throw new IllegalArgumentException("Missing Content-Disposition header in a multipart body part"); Map<String, String> contentDisposition = parameterParser.parse(contentDispositionContent, ';'); - ByteArrayOutputStream output = new ByteArrayOutputStream(); multipartStream.readBodyData(output); parts.put(contentDisposition.get("name"), output.toByteArray()); + output.reset(); nextPart = multipartStream.readBoundary(); } return parts; } - catch(MultipartStream.MalformedStreamException e) { + catch (MultipartStream.MalformedStreamException e) { throw new IllegalArgumentException("Malformed multipart/form-data request", e); } - catch(IOException e) { + catch (IOException e) { throw new IllegalArgumentException("IO error reading multipart request " + uri, e); } } @@ -80,4 +94,34 @@ public class MultipartParser { return null; } + /** A {@link java.io.ByteArrayOutputStream} that limits the number of bytes written to it */ + private static class LimitedOutputStream extends ByteArrayOutputStream { + + private long remaining; + + /** Create a new OutputStream that can fit up to len bytes */ + private LimitedOutputStream(long len) { + this.remaining = len; + } + + @Override + public synchronized void write(int b) { + requireCapacity(1); + super.write(b); + remaining--; + } + + @Override + public synchronized void write(byte[] b, int off, int len) { + requireCapacity(len); + super.write(b, off, len); + remaining -= len; + } + + private void requireCapacity(int len) { + if (len > remaining) throw new IllegalArgumentException("Too many bytes to write"); + } + + } + } diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/controller/MeteringResponse.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/controller/MeteringResponse.java index 850a9ef6107..33cd4948a7e 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/controller/MeteringResponse.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/controller/MeteringResponse.java @@ -32,6 +32,7 @@ public class MeteringResponse extends SlimeJsonResponse { object.setDouble("cpu", snapshot.getCpuCores()); object.setDouble("memory", snapshot.getMemoryGb()); object.setDouble("disk", snapshot.getDiskGb()); + object.setString("architecture", snapshot.getArchitecture().name()); }); return slime; } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/CostReportMaintainerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/CostReportMaintainerTest.java index 80ee0988658..10193b48837 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/CostReportMaintainerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/CostReportMaintainerTest.java @@ -1,6 +1,7 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.controller.maintenance; +import com.yahoo.config.provision.NodeResources; import com.yahoo.vespa.hosted.controller.ControllerTester; import com.yahoo.vespa.hosted.controller.api.identifiers.Property; import com.yahoo.vespa.hosted.controller.api.integration.resource.ResourceAllocation; @@ -38,7 +39,7 @@ public class CostReportMaintainerTest { "1970-01-01,Property3,128.0,96.0,2000.0,0.3333333333333333\n" + "1970-01-01,Property2,160.0,96.0,2000.0,0.3611111111111111", csv), - Map.of(new Property("Property3"), new ResourceAllocation(256, 192, 4000)) + Map.of(new Property("Property3"), new ResourceAllocation(256, 192, 4000, NodeResources.Architecture.getDefault())) ); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ResourceMeterMaintainerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ResourceMeterMaintainerTest.java index 4acc9f91e79..6109890bae3 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ResourceMeterMaintainerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ResourceMeterMaintainerTest.java @@ -58,18 +58,18 @@ public class ResourceMeterMaintainerTest { .collect(Collectors.toMap(Map.Entry::getKey, entry -> entry.getValue().cost().getAsDouble()))); List<ResourceSnapshot> resourceSnapshots = List.of( - new ResourceSnapshot(app1, 12, 34, 56, Instant.EPOCH, z1), - new ResourceSnapshot(app1, 23, 45, 67, Instant.EPOCH, z2), - new ResourceSnapshot(app2, 34, 56, 78, Instant.EPOCH, z1)); + new ResourceSnapshot(app1, 12, 34, 56, NodeResources.Architecture.getDefault(), Instant.EPOCH, z1), + new ResourceSnapshot(app1, 23, 45, 67, NodeResources.Architecture.getDefault(), Instant.EPOCH, z2), + new ResourceSnapshot(app2, 34, 56, 78, NodeResources.Architecture.getDefault(), Instant.EPOCH, z1)); maintainer.updateDeploymentCost(resourceSnapshots); assertCost.accept(app1, Map.of(z1, 1.40, z2, 2.50)); assertCost.accept(app2, Map.of(z1, 3.59)); // Remove a region from app1 and add region to app2 resourceSnapshots = List.of( - new ResourceSnapshot(app1, 23, 45, 67, Instant.EPOCH, z2), - new ResourceSnapshot(app2, 34, 56, 78, Instant.EPOCH, z1), - new ResourceSnapshot(app2, 45, 67, 89, Instant.EPOCH, z2)); + new ResourceSnapshot(app1, 23, 45, 67, NodeResources.Architecture.getDefault(), Instant.EPOCH, z2), + new ResourceSnapshot(app2, 34, 56, 78, NodeResources.Architecture.getDefault(), Instant.EPOCH, z1), + new ResourceSnapshot(app2, 45, 67, 89, NodeResources.Architecture.getDefault(), Instant.EPOCH, z2)); maintainer.updateDeploymentCost(resourceSnapshots); assertCost.accept(app1, Map.of(z2, 2.50)); assertCost.accept(app2, Map.of(z1, 3.59, z2, 4.68)); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java index f94f87b0f46..cc162548f33 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java @@ -11,6 +11,7 @@ import com.yahoo.config.provision.ApplicationName; import com.yahoo.config.provision.AthenzService; import com.yahoo.config.provision.Environment; import com.yahoo.config.provision.InstanceName; +import com.yahoo.config.provision.NodeResources; import com.yahoo.config.provision.RegionName; import com.yahoo.config.provision.TenantName; import com.yahoo.config.provision.zone.RoutingMethod; @@ -1069,27 +1070,6 @@ public class ApplicationApiTest extends ControllerContainerTest { new File("deploy-result.json")); } - @Test - public void testMeteringResponses() { - MockMeteringClient mockMeteringClient = tester.serviceRegistry().meteringService(); - - // Mock response for MeteringClient - ResourceAllocation currentSnapshot = new ResourceAllocation(1, 2, 3); - ResourceAllocation thisMonth = new ResourceAllocation(12, 24, 1000); - ResourceAllocation lastMonth = new ResourceAllocation(24, 48, 2000); - ApplicationId applicationId = ApplicationId.from("doesnotexist", "doesnotexist", "default"); - Map<ApplicationId, List<ResourceSnapshot>> snapshotHistory = Map.of(applicationId, List.of( - new ResourceSnapshot(applicationId, 1, 2,3, Instant.ofEpochMilli(123), ZoneId.defaultId()), - new ResourceSnapshot(applicationId, 1, 2,3, Instant.ofEpochMilli(246), ZoneId.defaultId()), - new ResourceSnapshot(applicationId, 1, 2,3, Instant.ofEpochMilli(492), ZoneId.defaultId()))); - - mockMeteringClient.setMeteringData(new MeteringData(thisMonth, lastMonth, currentSnapshot, snapshotHistory)); - - tester.assertResponse(request("/application/v4/tenant/doesnotexist/application/doesnotexist/metering", GET) - .userIdentity(USER_ID) - .oAuthCredentials(OKTA_CREDENTIALS), - new File("instance1-metering.json")); - } @Test public void testRemovingAllDeployments() { diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/MultipartParserTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/MultipartParserTest.java index 2c81b1a7fd8..12a0a00713c 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/MultipartParserTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/MultipartParserTest.java @@ -11,12 +11,12 @@ import org.junit.Test; import java.io.ByteArrayInputStream; import java.net.URI; -import java.net.URISyntaxException; import java.nio.charset.StandardCharsets; import java.util.Map; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; /** * @author bratseth @@ -24,7 +24,7 @@ import static org.junit.Assert.assertTrue; public class MultipartParserTest { @Test - public void multipartParserTest() throws URISyntaxException { + public void parser() { String data = "Content-Type: multipart/form-data; boundary=AaB03x\r\n" + "\r\n" + @@ -43,13 +43,7 @@ public class MultipartParserTest { "\r\n" + "... contents of file1.txt ...\r\n" + "--AaB03x--\r\n"; - ByteArrayInputStream dataStream = new ByteArrayInputStream(data.getBytes(StandardCharsets.UTF_8)); - HttpRequest request = HttpRequest.createRequest(new MockCurrentContainer(), - new URI("http://foo"), - com.yahoo.jdisc.http.HttpRequest.Method.POST, - dataStream); - request.getJDiscRequest().headers().put("Content-Type", "multipart/form-data; boundary=AaB03x"); - Map<String, byte[]> parts = new MultipartParser().parse(request); + Map<String, byte[]> parts = parse(data, Long.MAX_VALUE); assertEquals(3, parts.size()); assertTrue(parts.containsKey("submit-name")); assertTrue(parts.containsKey("submit-address")); @@ -57,6 +51,41 @@ public class MultipartParserTest { assertEquals("Larry", new String(parts.get("submit-name"), StandardCharsets.UTF_8)); assertEquals("... contents of file1.txt ...", new String(parts.get("files"), StandardCharsets.UTF_8)); } + + @Test + public void max_length() { + String part1 = "Larry"; + String part2 = "House 1"; + String data = + "Content-Type: multipart/form-data; boundary=AaB03x\r\n" + + "\r\n" + + "--AaB03x\r\n" + + "Content-Disposition: form-data; name=\"submit-name\"\r\n" + + "\r\n" + + part1 + "\r\n" + + "--AaB03x\r\n" + + "Content-Disposition: form-data; name=\"submit-address\"\r\n" + + "Content-Type: text/plain\r\n" + + "\r\n" + + part2 + "\r\n" + + "--AaB03x--\r\n"; + parse(data, part1.length() + part2.length()); + try { + parse(data, part1.length() + part2.length() - 1); + fail("Expected exception"); + } catch (IllegalArgumentException ignored) { + } + } + + private Map<String, byte[]> parse(String data, long maxLength) { + ByteArrayInputStream dataStream = new ByteArrayInputStream(data.getBytes(StandardCharsets.UTF_8)); + HttpRequest request = HttpRequest.createRequest(new MockCurrentContainer(), + URI.create("http://foo"), + com.yahoo.jdisc.http.HttpRequest.Method.POST, + dataStream); + request.getJDiscRequest().headers().put("Content-Type", "multipart/form-data; boundary=AaB03x"); + return new MultipartParser(maxLength).parse(request); + } private static class MockCurrentContainer implements CurrentContainer { diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/controller/ControllerApiTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/controller/ControllerApiTest.java index 7bc01de2053..8a6244e19a0 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/controller/ControllerApiTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/controller/ControllerApiTest.java @@ -3,6 +3,7 @@ package com.yahoo.vespa.hosted.controller.restapi.controller; import com.yahoo.application.container.handler.Request; import com.yahoo.config.provision.ApplicationId; +import com.yahoo.config.provision.NodeResources; import com.yahoo.config.provision.zone.ZoneId; import com.yahoo.container.jdisc.HttpRequest; import com.yahoo.test.ManualClock; @@ -158,8 +159,8 @@ public class ControllerApiTest extends ControllerContainerTest { Instant timestamp = Instant.ofEpochMilli(123456789); ZoneId zoneId = ZoneId.defaultId(); List<ResourceSnapshot> snapshots = List.of( - new ResourceSnapshot(applicationId, 12,48,1200, timestamp, zoneId), - new ResourceSnapshot(applicationId, 24, 96,2400, timestamp, zoneId) + new ResourceSnapshot(applicationId, 12,48,1200, NodeResources.Architecture.arm64, timestamp, zoneId), + new ResourceSnapshot(applicationId, 24, 96,2400, NodeResources.Architecture.x86_64, timestamp, zoneId) ); tester.controller().serviceRegistry().meteringService().consume(snapshots); tester.assertResponse( diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/controller/responses/metering.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/controller/responses/metering.json index b64e8f26a63..1008ada6def 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/controller/responses/metering.json +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/controller/responses/metering.json @@ -5,7 +5,8 @@ "zoneId": "prod.default", "cpu": 12.0, "memory": 48.0, - "disk": 1200.0 + "disk": 1200.0, + "architecture":"arm64" }, { "applicationId": "tenant.app.instance", @@ -13,6 +14,7 @@ "zoneId": "prod.default", "cpu": 24.0, "memory": 96.0, - "disk": 2400.0 + "disk": 2400.0, + "architecture":"x86_64" } ]
\ No newline at end of file |