diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2019-08-19 22:35:24 +0200 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2019-08-21 20:27:36 +0000 |
commit | 85c87f9d32c15a16148a77f4807c6617112f6037 (patch) | |
tree | 6bc80fc0036e158f40d3c26023f758c066db12b4 /document/src/main | |
parent | 55e093baadde8f245dc06e5c98fd0b85e6577cd5 (diff) |
Remove v6 and v7 from java side.
Diffstat (limited to 'document/src/main')
8 files changed, 40 insertions, 1097 deletions
diff --git a/document/src/main/java/com/yahoo/document/BaseStructDataType.java b/document/src/main/java/com/yahoo/document/BaseStructDataType.java index b010ed8c033..c7be3dd829c 100755 --- a/document/src/main/java/com/yahoo/document/BaseStructDataType.java +++ b/document/src/main/java/com/yahoo/document/BaseStructDataType.java @@ -16,7 +16,6 @@ import java.util.Map; public abstract class BaseStructDataType extends StructuredDataType { protected Map<Integer, Field> fieldIds = new LinkedHashMap<>(); - protected Map<Integer, Field> fieldIdsV6 = new LinkedHashMap<>(); protected Map<String, Field> fields = new LinkedHashMap<>(); protected Compressor compressor = new Compressor(CompressionType.NONE); @@ -33,7 +32,6 @@ public abstract class BaseStructDataType extends StructuredDataType { BaseStructDataType stype = type.clone(); fieldIds = stype.fieldIds; - fieldIdsV6 = stype.fieldIdsV6; fields = stype.fields; } @@ -41,13 +39,11 @@ public abstract class BaseStructDataType extends StructuredDataType { public BaseStructDataType clone() { BaseStructDataType type = (BaseStructDataType) super.clone(); type.fieldIds = new LinkedHashMap<>(); - type.fieldIdsV6 = new LinkedHashMap<>(); type.fields = new LinkedHashMap<>(); for (Field field : fieldIds.values()) { type.fields.put(field.getName(), field); type.fieldIds.put(field.getId(Document.SERIALIZED_VERSION), field); - type.fieldIdsV6.put(field.getId(6), field); } return type; } @@ -59,38 +55,24 @@ public abstract class BaseStructDataType extends StructuredDataType { if (fieldIds.containsKey(field.getId(Document.SERIALIZED_VERSION))) { throw new IllegalArgumentException("Struct " + getName() + " already contains field with id " + field.getId(Document.SERIALIZED_VERSION)); } - if (fieldIdsV6.containsKey(field.getId(6))) { - throw new IllegalArgumentException("Struct " + getName() + " already contains a field with deprecated document serialization id " + field.getId(6)); - } fields.put(field.getName(), field); fieldIds.put(field.getId(Document.SERIALIZED_VERSION), field); - fieldIdsV6.put(field.getId(6), field); } public Field removeField(String fieldName) { Field old = fields.remove(fieldName); if (old != null) { fieldIds.remove(old.getId(Document.SERIALIZED_VERSION)); - fieldIdsV6.remove(old.getId(6)); } return old; } public void clearFields() { fieldIds.clear(); - fieldIdsV6.clear(); fields.clear(); } - public Field getField(Integer fieldId, int version) { - if (version > 6) { - return fieldIds.get(fieldId); - } else { - return fieldIdsV6.get(fieldId); - } - } - @Override public Field getField(String fieldName) { return fields.get(fieldName); @@ -101,8 +83,8 @@ public abstract class BaseStructDataType extends StructuredDataType { return fieldIds.get(id); } - public boolean hasField(Field field, int version) { - Field f = getField(field.getId(version), version); + public boolean hasField(Field field) { + Field f = getField(field.getId()); return f != null && f.equals(field); } @@ -110,13 +92,6 @@ public abstract class BaseStructDataType extends StructuredDataType { return fields.containsKey(name); } - public boolean hasField(Field f) { - if (hasField(f, 6) || hasField(f, Document.SERIALIZED_VERSION)) { - return true; - } - return false; - } - @Override public Collection<Field> getFields() { return fields.values(); diff --git a/document/src/main/java/com/yahoo/document/DocumentType.java b/document/src/main/java/com/yahoo/document/DocumentType.java index 1aa1fed7659..f04c93b61ef 100755 --- a/document/src/main/java/com/yahoo/document/DocumentType.java +++ b/document/src/main/java/com/yahoo/document/DocumentType.java @@ -351,27 +351,6 @@ public class DocumentType extends StructuredDataType { } /** - * Gets the field matching a given ID. - * - * @param id The ID of a field. - * @param version The serialization version of the document. - * @return Returns the matching field, or null if not found. - */ - public Field getField(Integer id, int version) { - Field field = headerType.getField(id, version); - if (field == null) { - field = bodyType.getField(id, version); - } - if (field == null && !isRegistered()) { - for (DocumentType inheritedType : inherits) { - field = inheritedType.getField(id, version); - if (field != null) break; - } - } - return field; - } - - /** * Removes an field from the DocumentType. * * @param name The name of the field. diff --git a/document/src/main/java/com/yahoo/document/Field.java b/document/src/main/java/com/yahoo/document/Field.java index d0a19a50073..9523c333a78 100644 --- a/document/src/main/java/com/yahoo/document/Field.java +++ b/document/src/main/java/com/yahoo/document/Field.java @@ -21,9 +21,8 @@ public class Field extends FieldBase implements FieldSet, Comparable, Serializab protected DataType dataType; protected int fieldId; - private int fieldIdV6; private boolean isHeader; - private boolean forcedId = false; + private boolean forcedId; /** * Creates a new field. @@ -36,11 +35,10 @@ public class Field extends FieldBase implements FieldSet, Comparable, Serializab public Field(String name, int id, DataType dataType, boolean isHeader) { super(name); this.fieldId = id; - this.fieldIdV6 = id; this.dataType = dataType; this.isHeader = isHeader; this.forcedId = true; - validateId(id, null, Document.SERIALIZED_VERSION); + validateId(id, null); } public Field(String name) { @@ -60,7 +58,6 @@ public class Field extends FieldBase implements FieldSet, Comparable, Serializab public Field(String name, DataType dataType, boolean isHeader, DocumentType owner) { this(name, 0, dataType, isHeader); this.fieldId = calculateIdV7(owner); - this.fieldIdV6 = calculateIdV6(owner); this.forcedId = false; } @@ -95,21 +92,6 @@ public class Field extends FieldBase implements FieldSet, Comparable, Serializab this(name, field.dataType, field.isHeader, null); } - /** - * The field id must be unique within a document type, and also - * within a (unknown at this time) hierarchy of document types. - * In addition it should be as resilient to doctype content changes - * and inheritance hierarchy changes as possible. - * All of this is enforced for names, so id's should follow names. - * Therefore we hash on name. - */ - private int calculateIdV6(DocumentType owner) { - int newId = BobHash.hash(getName()); // Using a portfriendly hash - if (newId < 0) newId = -newId; // Highest bit is reserved to tell 7-bit id's from 31-bit ones - validateId(newId, owner, 6); - return newId; - } - public int compareTo(Object o) { return fieldId - ((Field) o).fieldId; } @@ -127,7 +109,7 @@ public class Field extends FieldBase implements FieldSet, Comparable, Serializab int newId = BobHash.hash(combined); // Using a portfriendly hash if (newId < 0) newId = -newId; // Highest bit is reserved to tell 7-bit id's from 31-bit ones - validateId(newId, owner, Document.SERIALIZED_VERSION); + validateId(newId, owner); return newId; } @@ -144,16 +126,15 @@ public class Field extends FieldBase implements FieldSet, Comparable, Serializab throw new NullPointerException("Can not assign an id of " + this + " without knowing the owner"); } - validateId(newId, owner, Document.SERIALIZED_VERSION); + validateId(newId, owner); owner.removeField(getName()); this.fieldId = newId; - this.fieldIdV6 = newId; this.forcedId = true; owner.addField(this); } - private void validateId(int newId, DocumentType owner, int version) { + private void validateId(int newId, DocumentType owner) { if (newId >= 100 && newId <= 127) { throw new IllegalArgumentException("Attempt to set the id of " + this + " to " + newId + " failed, values from 100 to 127 " + "are reserved for internal use"); @@ -168,7 +149,7 @@ public class Field extends FieldBase implements FieldSet, Comparable, Serializab if (owner == null) return; { - Field existing = owner.getField(newId, version); + Field existing = owner.getField(newId); if (existing != null && !existing.getName().equals(getName())) { throw new IllegalArgumentException("Couldn't set id of " + this + " to " + newId + ", " + existing + " already has this id in " + owner); @@ -196,17 +177,13 @@ public class Field extends FieldBase implements FieldSet, Comparable, Serializab /** Returns the numeric ID used to represent this field when serialized */ public final int getId(int version) { - return (version > 6) ? getId() : getIdV6(); + return getId(); } public final int getId() { return fieldId; } - public final int getIdV6() { - return fieldIdV6; - } - /** * * @return true if the field has a forced id diff --git a/document/src/main/java/com/yahoo/document/StructDataType.java b/document/src/main/java/com/yahoo/document/StructDataType.java index fc4792726c6..73fe580308e 100644 --- a/document/src/main/java/com/yahoo/document/StructDataType.java +++ b/document/src/main/java/com/yahoo/document/StructDataType.java @@ -62,15 +62,6 @@ public class StructDataType extends BaseStructDataType { } @Override - public Field getField(Integer fieldId, int version) { - Field f = super.getField(fieldId, version); - if (f == null && superType != null) { - f = superType.getField(fieldId, version); - } - return f; - } - - @Override public Field getField(String fieldName) { Field f = super.getField(fieldName); if (f == null && superType != null) { @@ -100,15 +91,6 @@ public class StructDataType extends BaseStructDataType { } @Override - public boolean hasField(Field field, int version) { - boolean f = super.hasField(field, version); - if (!f && superType != null) { - f = superType.hasField(field, version); - } - return f; - } - - @Override public Collection<Field> getFields() { if (superType == null) { return Collections.unmodifiableCollection(super.getFields()); diff --git a/document/src/main/java/com/yahoo/document/serialization/DocumentDeserializerFactory.java b/document/src/main/java/com/yahoo/document/serialization/DocumentDeserializerFactory.java index 03aa409ee8d..bdd99c54788 100644 --- a/document/src/main/java/com/yahoo/document/serialization/DocumentDeserializerFactory.java +++ b/document/src/main/java/com/yahoo/document/serialization/DocumentDeserializerFactory.java @@ -27,12 +27,4 @@ public class DocumentDeserializerFactory { return new VespaDocumentDeserializer6(manager, buf); } - /** - * Creates a de-serializer for the document format that was created on Vespa 4.2. - */ - @SuppressWarnings("deprecation") - public static DocumentDeserializer create42(DocumentTypeManager manager, GrowableByteBuffer buf) { - return new VespaDocumentDeserializer42(manager, buf); - } - } diff --git a/document/src/main/java/com/yahoo/document/serialization/VespaDocumentDeserializer42.java b/document/src/main/java/com/yahoo/document/serialization/VespaDocumentDeserializer42.java deleted file mode 100644 index 7ec4433a24f..00000000000 --- a/document/src/main/java/com/yahoo/document/serialization/VespaDocumentDeserializer42.java +++ /dev/null @@ -1,896 +0,0 @@ -// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package com.yahoo.document.serialization; - -import com.yahoo.collections.Tuple2; -import com.yahoo.compress.CompressionType; -import com.yahoo.compress.Compressor; -import com.yahoo.document.ArrayDataType; -import com.yahoo.document.CollectionDataType; -import com.yahoo.document.DataType; -import com.yahoo.document.DataTypeName; -import com.yahoo.document.Document; -import com.yahoo.document.DocumentId; -import com.yahoo.document.DocumentType; -import com.yahoo.document.DocumentTypeManager; -import com.yahoo.document.DocumentUpdate; -import com.yahoo.document.Field; -import com.yahoo.document.MapDataType; -import com.yahoo.document.StructDataType; -import com.yahoo.document.WeightedSetDataType; -import com.yahoo.document.annotation.AlternateSpanList; -import com.yahoo.document.annotation.Annotation; -import com.yahoo.document.annotation.AnnotationReference; -import com.yahoo.document.annotation.AnnotationType; -import com.yahoo.document.annotation.Span; -import com.yahoo.document.annotation.SpanList; -import com.yahoo.document.annotation.SpanNode; -import com.yahoo.document.annotation.SpanNodeParent; -import com.yahoo.document.annotation.SpanTree; -import com.yahoo.document.datatypes.Array; -import com.yahoo.document.datatypes.BoolFieldValue; -import com.yahoo.document.datatypes.ByteFieldValue; -import com.yahoo.document.datatypes.CollectionFieldValue; -import com.yahoo.document.datatypes.DoubleFieldValue; -import com.yahoo.document.datatypes.FieldValue; -import com.yahoo.document.datatypes.FloatFieldValue; -import com.yahoo.document.datatypes.IntegerFieldValue; -import com.yahoo.document.datatypes.LongFieldValue; -import com.yahoo.document.datatypes.MapFieldValue; -import com.yahoo.document.datatypes.PredicateFieldValue; -import com.yahoo.document.datatypes.Raw; -import com.yahoo.document.datatypes.ReferenceFieldValue; -import com.yahoo.document.datatypes.StringFieldValue; -import com.yahoo.document.datatypes.Struct; -import com.yahoo.document.datatypes.StructuredFieldValue; -import com.yahoo.document.datatypes.TensorFieldValue; -import com.yahoo.document.datatypes.WeightedSet; -import com.yahoo.document.fieldpathupdate.AddFieldPathUpdate; -import com.yahoo.document.fieldpathupdate.AssignFieldPathUpdate; -import com.yahoo.document.fieldpathupdate.FieldPathUpdate; -import com.yahoo.document.fieldpathupdate.RemoveFieldPathUpdate; -import com.yahoo.document.predicate.BinaryFormat; -import com.yahoo.document.select.parser.ParseException; -import com.yahoo.document.update.AddValueUpdate; -import com.yahoo.document.update.ArithmeticValueUpdate; -import com.yahoo.document.update.AssignValueUpdate; -import com.yahoo.document.update.ClearValueUpdate; -import com.yahoo.document.update.FieldUpdate; -import com.yahoo.document.update.MapValueUpdate; -import com.yahoo.document.update.RemoveValueUpdate; -import com.yahoo.document.update.ValueUpdate; -import com.yahoo.io.GrowableByteBuffer; -import com.yahoo.tensor.serialization.TypedBinaryFormat; -import com.yahoo.text.Utf8; -import com.yahoo.text.Utf8Array; -import com.yahoo.text.Utf8String; -import com.yahoo.vespa.objects.BufferSerializer; -import com.yahoo.vespa.objects.FieldBase; - -import java.nio.ByteBuffer; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Optional; - -import static com.yahoo.text.Utf8.calculateStringPositions; - -/** - * Class used for de-serializing documents on the Vespa 4.2 document format. - * - * @deprecated Please use {@link com.yahoo.document.serialization.VespaDocumentDeserializerHead} instead for new code. - * @author baldersheim - */ -@Deprecated // TODO: Remove on Vespa 8 -// When removing: Move content of this class into VespaDocumentDeserializerHead -public class VespaDocumentDeserializer42 extends BufferSerializer implements DocumentDeserializer { - - private final Compressor compressor = new Compressor(); - private DocumentTypeManager manager; - GrowableByteBuffer body; - private short version; - private List<SpanNode> spanNodes; - private List<Annotation> annotations; - private int[] stringPositions; - - VespaDocumentDeserializer42(DocumentTypeManager manager, GrowableByteBuffer header, GrowableByteBuffer body, short version) { - super(header); - this.manager = manager; - this.body = body; - this.version = version; - } - - VespaDocumentDeserializer42(DocumentTypeManager manager, GrowableByteBuffer buf) { - this(manager, buf, null, Document.SERIALIZED_VERSION); - } - - VespaDocumentDeserializer42(DocumentTypeManager manager, GrowableByteBuffer buf, GrowableByteBuffer body) { - this(manager, buf, body, Document.SERIALIZED_VERSION); - } - - final public DocumentTypeManager getDocumentTypeManager() { return manager; } - - public void read(Document document) { - read(null, document); - } - - public void read(FieldBase field, Document doc) { - - // Verify that we have correct version - version = getShort(null); - if (version < 6 || version > Document.SERIALIZED_VERSION) { - throw new DeserializationException("Unknown version " + version + ", expected " + - Document.SERIALIZED_VERSION + "."); - } - - int dataLength = 0; - int dataPos = 0; - - if (version < 7) { - getInt2_4_8Bytes(null); // Total document size.. Ignore - } else { - dataLength = getInt(null); - dataPos = position(); - } - - doc.setId(readDocumentId()); - - Byte content = getByte(null); - - doc.setDataType(readDocumentType()); - - Struct h = doc.getHeader(); - Struct b = doc.getBody(); - h.clear(); - b.clear(); - if ((content & 0x2) != 0) { - readHeaderBody(h, b); - } - if ((content & 0x4) != 0) { - readHeaderBody(b, h); - } else if (body != null) { - GrowableByteBuffer header = getBuf(); - setBuf(body); - body = null; - readHeaderBody(b, h); - body = getBuf(); - setBuf(header); - } - - if (version < 8) { - int crcVal = getInt(null); - } - - if (version > 6) { - if (dataLength != (position() - dataPos)) { - throw new DeserializationException("Length mismatch"); - } - } - } - public void read(FieldBase field, FieldValue value) { - throw new IllegalArgumentException("read not implemented yet."); - } - - public <T extends FieldValue> void read(FieldBase field, Array<T> array) { - int numElements = getNumCollectionElems(); - ArrayList<T> list = new ArrayList<T>(numElements); - ArrayDataType type = array.getDataType(); - for (int i = 0; i < numElements; i++) { - if (version < 7) { - getInt(null); // We don't need size for anything - } - FieldValue fv = type.getNestedType().createFieldValue(); - fv.deserialize(null, this); - list.add((T) fv); - } - array.clear(); - array.addAll(list); - } - - public <K extends FieldValue, V extends FieldValue> void read(FieldBase field, MapFieldValue<K, V> map) { - int numElements = getNumCollectionElems(); - Map<K,V> hash = new HashMap<>(); - MapDataType type = map.getDataType(); - for (int i = 0; i < numElements; i++) { - if (version < 7) { - getInt(null); // We don't need size for anything - } - K key = (K) type.getKeyType().createFieldValue(); - V val = (V) type.getValueType().createFieldValue(); - key.deserialize(null, this); - val.deserialize(null, this); - hash.put(key, val); - } - map.clear(); - map.putAll(hash); - } - - private int getNumCollectionElems() { - int numElements; - if (version < 7) { - getInt(null); // We already know the nested type, so ignore that.. - numElements = getInt(null); - } else { - numElements = getInt1_2_4Bytes(null); - } - if (numElements < 0) { - throw new DeserializationException("Bad number of array/map elements, " + numElements); - } - return numElements; - } - - public <T extends FieldValue> void read(FieldBase field, CollectionFieldValue<T> value) { - throw new IllegalArgumentException("read not implemented yet."); - } - @Override - public void read(FieldBase field, BoolFieldValue value) { - value.setBoolean((getByte(null) != 0)); - } - public void read(FieldBase field, ByteFieldValue value) { value.assign(getByte(null)); } - public void read(FieldBase field, DoubleFieldValue value) { value.assign(getDouble(null)); } - public void read(FieldBase field, FloatFieldValue value) { value.assign(getFloat(null)); } - public void read(FieldBase field, IntegerFieldValue value) { value.assign(getInt(null)); } - public void read(FieldBase field, LongFieldValue value) { value.assign(getLong(null)); } - - public void read(FieldBase field, Raw value) { - int rawsize = getInt(null); - byte[] rawBytes = getBytes(null, rawsize); - value.assign(rawBytes); - } - - @Override - public void read(FieldBase field, PredicateFieldValue value) { - int len = getInt(null); - byte[] buf = getBytes(null, len); - value.assign(BinaryFormat.decode(buf)); - } - - public void read(FieldBase field, StringFieldValue value) { - byte coding = getByte(null); - - int length = getInt1_4Bytes(null); - - //OK, it seems that this length includes null termination. - //NOTE: the following four lines are basically parseNullTerminatedString() inlined, - //but we need to use the UTF-8 buffer below, so not using that method... - byte[] stringArray = new byte[length - 1]; - buf.get(stringArray); - buf.get(); //move past 0-termination - value.setUnChecked(Utf8.toString(stringArray)); - - if ((coding & 64) == 64) { - //we have a span tree! - try { - //we don't support serialization of nested span trees, so this is safe: - stringPositions = calculateStringPositions(stringArray); - //total length: - int size = buf.getInt(); - int startPos = buf.position(); - - int numSpanTrees = buf.getInt1_2_4Bytes(); - - for (int i = 0; i < numSpanTrees; i++) { - SpanTree tree = new SpanTree(); - StringFieldValue treeName = new StringFieldValue(); - treeName.deserialize(this); - tree.setName(treeName.getString()); - value.setSpanTree(tree); - readSpanTree(tree, false); - } - - buf.position(startPos + size); - } finally { - stringPositions = null; - } - } - } - - @Override - public void read(FieldBase field, TensorFieldValue value) { - int encodedTensorLength = buf.getInt1_4Bytes(); - if (encodedTensorLength > 0) { - byte[] encodedTensor = getBytes(null, encodedTensorLength); - value.assign(TypedBinaryFormat.decode(Optional.of(value.getDataType().getTensorType()), - GrowableByteBuffer.wrap(encodedTensor))); - } else { - value.clear(); - } - } - - @Override - public void read(FieldBase field, ReferenceFieldValue value) { - final boolean documentIdPresent = (buf.get() != 0); - if (documentIdPresent) { - value.assign(readDocumentId()); - } else { - value.clear(); - } - } - - public void read(FieldBase fieldDef, Struct s) { - s.setVersion(version); - int startPos = position(); - - if (version < 6) { - throw new DeserializationException("Illegal document serialization version " + version); - } - - int dataSize; - if (version < 7) { - long rSize = getInt2_4_8Bytes(null); - //TODO: Look into how to support data segments larger than INT_MAX bytes - if (rSize > Integer.MAX_VALUE) { - throw new DeserializationException("Raw size of data block is too large."); - } - dataSize = (int)rSize; - } else { - dataSize = getInt(null); - } - - byte comprCode = getByte(null); - CompressionType compression = CompressionType.valueOf(comprCode); - - int uncompressedSize = 0; - if (compression != CompressionType.NONE && - compression != CompressionType.INCOMPRESSIBLE) - { - // uncompressedsize (full size of FIELDS only, after decompression) - long pSize = getInt2_4_8Bytes(null); - //TODO: Look into how to support data segments larger than INT_MAX bytes - if (pSize > Integer.MAX_VALUE) { - throw new DeserializationException("Uncompressed size of data block is too large."); - } - uncompressedSize = (int) pSize; - } - - int numberOfFields = getInt1_4Bytes(null); - - List<Tuple2<Integer, Long>> fieldIdsAndLengths = new ArrayList<>(numberOfFields); - for (int i=0; i<numberOfFields; ++i) { - // id, length (length only used for unknown fields - fieldIdsAndLengths.add(new Tuple2<>(getInt1_4Bytes(null), getInt2_4_8Bytes(null))); - } - - // save a reference to the big buffer we're reading from: - GrowableByteBuffer bigBuf = buf; - - if (version < 7) { - // In V6 and earlier, the length included the header. - int headerSize = position() - startPos; - dataSize -= headerSize; - } - byte[] destination = compressor.decompress(compression, getBuf().array(), position(), uncompressedSize, Optional.of(dataSize)); - - // set position in original buffer to after data - position(position() + dataSize); - - // for a while: deserialize from this buffer instead: - buf = GrowableByteBuffer.wrap(destination); - - s.clear(); - StructDataType type = s.getDataType(); - for (int i=0; i<numberOfFields; ++i) { - Field structField = type.getField(fieldIdsAndLengths.get(i).first, version); - if (structField == null) { - //ignoring unknown field: - position(position() + fieldIdsAndLengths.get(i).second.intValue()); - } else { - int posBefore = position(); - FieldValue value = structField.getDataType().createFieldValue(); - value.deserialize(structField, this); - s.setFieldValue(structField, value); - //jump to beginning of next field: - position(posBefore + fieldIdsAndLengths.get(i).second.intValue()); - } - } - - // restore the original buffer - buf = bigBuf; - } - - private void readHeaderBody(Struct primary, Struct alternate) { - primary.setVersion(version); - int startPos = position(); - - if (version < 6) { - throw new DeserializationException("Illegal document serialization version " + version); - } - - int dataSize; - if (version < 7) { - long rSize = getInt2_4_8Bytes(null); - //TODO: Look into how to support data segments larger than INT_MAX bytes - if (rSize > Integer.MAX_VALUE) { - throw new DeserializationException("Raw size of data block is too large."); - } - dataSize = (int)rSize; - } else { - dataSize = getInt(null); - } - - byte comprCode = getByte(null); - CompressionType compression = CompressionType.valueOf(comprCode); - - int uncompressedSize = 0; - if (compression != CompressionType.NONE && - compression != CompressionType.INCOMPRESSIBLE) - { - // uncompressedsize (full size of FIELDS only, after decompression) - long pSize = getInt2_4_8Bytes(null); - //TODO: Look into how to support data segments larger than INT_MAX bytes - if (pSize > Integer.MAX_VALUE) { - throw new DeserializationException("Uncompressed size of data block is too large."); - } - uncompressedSize = (int) pSize; - } - - int numberOfFields = getInt1_4Bytes(null); - - List<Tuple2<Integer, Long>> fieldIdsAndLengths = new ArrayList<>(numberOfFields); - for (int i=0; i<numberOfFields; ++i) { - // id, length (length only used for unknown fields - fieldIdsAndLengths.add(new Tuple2<>(getInt1_4Bytes(null), getInt2_4_8Bytes(null))); - } - - // save a reference to the big buffer we're reading from: - GrowableByteBuffer bigBuf = buf; - - if (version < 7) { - // In V6 and earlier, the length included the header. - int headerSize = position() - startPos; - dataSize -= headerSize; - } - byte[] destination = compressor.decompress(compression, getBuf().array(), position(), uncompressedSize, Optional.of(dataSize)); - - // set position in original buffer to after data - position(position() + dataSize); - - // for a while: deserialize from this buffer instead: - buf = GrowableByteBuffer.wrap(destination); - - StructDataType priType = primary.getDataType(); - StructDataType altType = alternate.getDataType(); - for (int i=0; i<numberOfFields; ++i) { - int posBefore = position(); - Struct s = null; - Integer f_id = fieldIdsAndLengths.get(i).first; - Field structField = priType.getField(f_id, version); - if (structField != null) { - s = primary; - } else { - structField = altType.getField(f_id, version); - if (structField != null) { - s = alternate; - } - } - if (s != null) { - FieldValue value = structField.getDataType().createFieldValue(); - value.deserialize(structField, this); - s.setFieldValue(structField, value); - } - //jump to beginning of next field: - position(posBefore + fieldIdsAndLengths.get(i).second.intValue()); - } - - // restore the original buffer - buf = bigBuf; - } - - public void read(FieldBase field, StructuredFieldValue value) { - throw new IllegalArgumentException("read not implemented yet."); - } - public <T extends FieldValue> void read(FieldBase field, WeightedSet<T> ws) { - WeightedSetDataType type = ws.getDataType(); - getInt(null); // Have no need for type - - int numElements = getInt(null); - if (numElements < 0) { - throw new DeserializationException("Bad number of weighted set elements, " + numElements); - } - - ws.clearAndReserve(numElements * 2); // Avoid resizing - for (int i = 0; i < numElements; i++) { - int size = getInt(null); - FieldValue value = type.getNestedType().createFieldValue(); - value.deserialize(null, this); - IntegerFieldValue weight = new IntegerFieldValue(getInt(null)); - ws.putUnChecked((T) value, weight); - } - - } - - public void read(FieldBase field, AnnotationReference value) { - int seqId = buf.getInt1_2_4Bytes(); - try { - Annotation a = annotations.get(seqId); - value.setReferenceNoCompatibilityCheck(a); - } catch (IndexOutOfBoundsException iiobe) { - throw new SerializationException("Could not serialize AnnotationReference value, reference not found.", iiobe); - } - } - - private Utf8String deserializeAttributeString() throws DeserializationException { - int length = getByte(null); - return new Utf8String(parseNullTerminatedString(length)); - } - - private Utf8Array parseNullTerminatedString() { return parseNullTerminatedString(getBuf().getByteBuffer()); } - private Utf8Array parseNullTerminatedString(int lengthExcludingNull) { return parseNullTerminatedString(getBuf().getByteBuffer(), lengthExcludingNull); } - - static Utf8Array parseNullTerminatedString(ByteBuffer buf, int lengthExcludingNull) throws DeserializationException { - Utf8Array utf8 = new Utf8Array(buf, lengthExcludingNull); - buf.get(); //move past 0-termination - return utf8; - } - - static Utf8Array parseNullTerminatedString(ByteBuffer buf) throws DeserializationException { - //search for 0-byte - int end = getFirstNullByte(buf); - - if (end == -1) { - throw new DeserializationException("Could not locate terminating 0-byte for string"); - } - - return parseNullTerminatedString(buf, end - buf.position()); - } - - private static int getFirstNullByte(ByteBuffer buf) { - int end = -1; - int start = buf.position(); - - while (true) { - try { - byte dataByte = buf.get(); - if (dataByte == (byte) 0) { - end = buf.position() - 1; - break; - } - } catch (Exception e) { - break; - } - } - - buf.position(start); - return end; - } - - public void read(DocumentUpdate update) { - short serializationVersion = getShort(null); - - update.setId(new DocumentId(this)); - - byte contents = getByte(null); - - if ((contents & 0x1) == 0) { - throw new DeserializationException("Cannot deserialize DocumentUpdate without doctype"); - } - - update.setDocumentType(readDocumentType()); - - int size = getInt(null); - - for (int i = 0; i < size; i++) { - update.addFieldUpdate(new FieldUpdate(this, update.getDocumentType(), serializationVersion)); - } - } - - public void read(FieldPathUpdate update) { - String fieldPath = getString(null); - String whereClause = getString(null); - update.setFieldPath(fieldPath); - - try { - update.setWhereClause(whereClause); - } catch (ParseException e) { - throw new DeserializationException(e); - } - } - - public void read(AssignFieldPathUpdate update) { - byte flags = getByte(null); - update.setRemoveIfZero((flags & AssignFieldPathUpdate.REMOVE_IF_ZERO) != 0); - update.setCreateMissingPath((flags & AssignFieldPathUpdate.CREATE_MISSING_PATH) != 0); - if ((flags & AssignFieldPathUpdate.ARITHMETIC_EXPRESSION) != 0) { - update.setExpression(getString(null)); - } else { - DataType dt = update.getFieldPath().getResultingDataType(); - FieldValue fv = dt.createFieldValue(); - fv.deserialize(this); - update.setNewValue(fv); - } - } - - public void read(RemoveFieldPathUpdate update) { - - } - - public void read(AddFieldPathUpdate update) { - DataType dt = update.getFieldPath().getResultingDataType(); - FieldValue fv = dt.createFieldValue(); - dt.createFieldValue(); - fv.deserialize(this); - - if (!(fv instanceof Array)) { - throw new DeserializationException("Add only applicable to array types"); - } - update.setNewValues((Array)fv); - } - - public ValueUpdate getValueUpdate(DataType superType, DataType subType) { - int vuTypeId = getInt(null); - - ValueUpdate.ValueUpdateClassID op = ValueUpdate.ValueUpdateClassID.getID(vuTypeId); - if (op == null) { - throw new IllegalArgumentException("Read type "+vuTypeId+" of bytebuffer, but this is not a legal value update type."); - } - - switch (op) { - case ADD: - { - FieldValue fval = subType.createFieldValue(); - fval.deserialize(this); - int weight = getInt(null); - return new AddValueUpdate(fval, weight); - } - case ARITHMETIC: - int opId = getInt(null); - ArithmeticValueUpdate.Operator operator = ArithmeticValueUpdate.Operator.getID(opId); - double operand = getDouble(null); - return new ArithmeticValueUpdate(operator, operand); - case ASSIGN: - { - byte contents = getByte(null); - FieldValue fval = null; - if (contents == (byte) 1) { - fval = superType.createFieldValue(); - fval.deserialize(this); - } - return new AssignValueUpdate(fval); - } - case CLEAR: - return new ClearValueUpdate(); - case MAP: - if (superType instanceof ArrayDataType) { - CollectionDataType type = (CollectionDataType) superType; - IntegerFieldValue index = new IntegerFieldValue(); - index.deserialize(this); - ValueUpdate update = getValueUpdate(type.getNestedType(), null); - return new MapValueUpdate(index, update); - } else if (superType instanceof WeightedSetDataType) { - CollectionDataType type = (CollectionDataType) superType; - FieldValue fval = type.getNestedType().createFieldValue(); - fval.deserialize(this); - ValueUpdate update = getValueUpdate(DataType.INT, null); - return new MapValueUpdate(fval, update); - } else { - throw new DeserializationException("MapValueUpdate only works for arrays and weighted sets"); - } - case REMOVE: - FieldValue fval = ((CollectionDataType) superType).getNestedType().createFieldValue(); - fval.deserialize(this); - return new RemoveValueUpdate(fval); - default: - throw new DeserializationException( - "Could not deserialize ValueUpdate, unknown valueUpdateClassID type " + vuTypeId); - } - } - - public void read(FieldUpdate fieldUpdate) { - int fieldId = getInt(null); - Field field = fieldUpdate.getDocumentType().getField(fieldId, fieldUpdate.getSerializationVersion()); - if (field == null) { - throw new DeserializationException( - "Cannot deserialize FieldUpdate, field fieldId " + fieldId + " not found in " + fieldUpdate.getDocumentType()); - } - - fieldUpdate.setField(field); - int size = getInt(null); - - for (int i = 0; i < size; i++) { - if (field.getDataType() instanceof CollectionDataType) { - CollectionDataType collType = (CollectionDataType) field.getDataType(); - fieldUpdate.addValueUpdate(getValueUpdate(collType, collType.getNestedType())); - } else { - fieldUpdate.addValueUpdate(getValueUpdate(field.getDataType(), null)); - } - } - } - - public DocumentId readDocumentId() { - Utf8String uri = new Utf8String(parseNullTerminatedString(getBuf().getByteBuffer())); - return DocumentId.createFromSerialized(uri.toString()); - } - - public DocumentType readDocumentType() { - Utf8Array docTypeName = parseNullTerminatedString(); - int ignored = getShort(null); // used to hold the version - - DocumentType docType = manager.getDocumentType(new DataTypeName(docTypeName)); - if (docType == null) { - throw new DeserializationException("No known document type with name " + - new Utf8String(docTypeName).toString()); - } - return docType; - } - - private SpanNode readSpanNode() { - byte type = buf.get(); - buf.position(buf.position() - 1); - - SpanNode retval; - if ((type & Span.ID) == Span.ID) { - retval = new Span(); - if (spanNodes != null) { - spanNodes.add(retval); - } - read((Span) retval); - } else if ((type & SpanList.ID) == SpanList.ID) { - retval = new SpanList(); - if (spanNodes != null) { - spanNodes.add(retval); - } - read((SpanList) retval); - } else if ((type & AlternateSpanList.ID) == AlternateSpanList.ID) { - retval = new AlternateSpanList(); - if (spanNodes != null) { - spanNodes.add(retval); - } - read((AlternateSpanList) retval); - } else { - throw new DeserializationException("Cannot read SpanNode of type " + type); - } - return retval; - } - - private void readSpanTree(SpanTree tree, boolean readName) { - //we don't support serialization of nested span trees: - if (spanNodes != null || annotations != null) { - throw new SerializationException("Deserialization of nested SpanTrees is not supported."); - } - - //we're going to write a new SpanTree, create a new Map for nodes: - spanNodes = new ArrayList<SpanNode>(); - annotations = new ArrayList<Annotation>(); - - try { - if (readName) { - StringFieldValue treeName = new StringFieldValue(); - treeName.deserialize(this); - tree.setName(treeName.getString()); - } - - SpanNode root = readSpanNode(); - tree.setRoot(root); - - int numAnnotations = buf.getInt1_2_4Bytes(); - - for (int i = 0; i < numAnnotations; i++) { - Annotation a = new Annotation(); - annotations.add(a); - } - for (int i = 0; i < numAnnotations; i++) { - read(annotations.get(i)); - } - for (Annotation a : annotations) { - tree.annotate(a); - } - - for (SpanNode node: spanNodes) { - if (node instanceof Span) { - correctIndexes((Span) node); - } - } - } finally { - //we're done, let's set this to null to save memory and prevent madness: - spanNodes = null; - annotations = null; - } - } - - public void read(SpanTree tree) { - readSpanTree(tree, true); - } - - public void read(Annotation annotation) { - int annotationTypeId = buf.getInt(); - AnnotationType type = manager.getAnnotationTypeRegistry().getType(annotationTypeId); - - if (type == null) { - throw new DeserializationException("Cannot deserialize annotation of type " + annotationTypeId + " (unknown type)"); - } - - annotation.setType(type); - - byte features = buf.get(); - int length = buf.getInt1_2_4Bytes(); - - if ((features & (byte) 1) == (byte) 1) { - //we have a span node - int spanNodeId = buf.getInt1_2_4Bytes(); - try { - SpanNode node = spanNodes.get(spanNodeId); - annotation.setSpanNode(node); - } catch (IndexOutOfBoundsException ioobe) { - throw new DeserializationException("Could not deserialize annotation, associated span node not found ", ioobe); - } - } - if ((features & (byte) 2) == (byte) 2) { - //we have a value: - int dataTypeId = buf.getInt(); - - //if this data type ID the same as the one in our config? - if (dataTypeId != type.getDataType().getId()) { - //not the same, but we will handle it gracefully, and just skip past the data: - buf.position(buf.position() + length - 4); - } else { - FieldValue value = type.getDataType().createFieldValue(); - value.deserialize(this); - annotation.setFieldValue(value); - } - } - } - - public void read(Span span) { - byte type = buf.get(); - if ((type & Span.ID) != Span.ID) { - throw new DeserializationException("Cannot deserialize Span with type " + type); - } - span.setFrom(buf.getInt1_2_4Bytes()); - span.setLength(buf.getInt1_2_4Bytes()); - } - - private void correctIndexes(Span span) { - if (stringPositions == null) { - throw new DeserializationException("Cannot deserialize Span, no access to parent StringFieldValue."); - } - int fromIndex = stringPositions[span.getFrom()]; - int toIndex = stringPositions[span.getTo()]; - int length = toIndex - fromIndex; - - span.setFrom(fromIndex); - span.setLength(length); - } - - public void read(SpanList spanList) { - byte type = buf.get(); - if ((type & SpanList.ID) != SpanList.ID) { - throw new DeserializationException("Cannot deserialize SpanList with type " + type); - } - List<SpanNode> nodes = readSpanList(spanList); - for (SpanNode node : nodes) { - spanList.add(node); - } - } - - public void read(AlternateSpanList altSpanList) { - byte type = buf.get(); - if ((type & AlternateSpanList.ID) != AlternateSpanList.ID) { - throw new DeserializationException("Cannot deserialize AlternateSpanList with type " + type); - } - int numSubTrees = buf.getInt1_2_4Bytes(); - - for (int i = 0; i < numSubTrees; i++) { - double prob = buf.getDouble(); - List<SpanNode> list = readSpanList(altSpanList); - - if (i == 0) { - for (SpanNode node : list) { - altSpanList.add(node); - } - altSpanList.setProbability(0, prob); - } else { - altSpanList.addChildren(i, list, prob); - } - } - } - - private List<SpanNode> readSpanList(SpanNodeParent parent) { - int size = buf.getInt1_2_4Bytes(); - List<SpanNode> spanList = new ArrayList<SpanNode>(); - for (int i = 0; i < size; i++) { - spanList.add(readSpanNode()); - } - return spanList; - } - -} diff --git a/document/src/main/java/com/yahoo/document/serialization/VespaDocumentDeserializer6.java b/document/src/main/java/com/yahoo/document/serialization/VespaDocumentDeserializer6.java index e80cebdcc29..a0bce3cfbf6 100644 --- a/document/src/main/java/com/yahoo/document/serialization/VespaDocumentDeserializer6.java +++ b/document/src/main/java/com/yahoo/document/serialization/VespaDocumentDeserializer6.java @@ -11,7 +11,6 @@ import com.yahoo.document.annotation.AnnotationType; import com.yahoo.document.annotation.Span; import com.yahoo.document.annotation.SpanList; import com.yahoo.document.annotation.SpanNode; -import com.yahoo.document.annotation.SpanNodeParent; import com.yahoo.document.annotation.SpanTree; import com.yahoo.document.ArrayDataType; import com.yahoo.document.CollectionDataType; @@ -105,23 +104,16 @@ public class VespaDocumentDeserializer6 extends BufferSerializer implements Docu public void read(FieldBase field, Document doc) { // Verify that we have correct version version = getShort(null); - if (version < 6 || version > Document.SERIALIZED_VERSION) { + if (version < 8 || version > Document.SERIALIZED_VERSION) { throw new DeserializationException("Unknown version " + version + ", expected " + Document.SERIALIZED_VERSION + "."); } - int dataLength = 0; - int dataPos = 0; - - if (version < 7) { - getInt2_4_8Bytes(null); // Total document size.. Ignore - } else { - dataLength = getInt(null); - dataPos = position(); - } + int dataLength = getInt(null); + int dataPos = position(); DocumentId documentId = readDocumentId(); - Byte content = getByte(null); + byte content = getByte(null); doc.setDataType(readDocumentType()); doc.setId(documentId); @@ -136,14 +128,8 @@ public class VespaDocumentDeserializer6 extends BufferSerializer implements Docu readHeaderBody(b, h); } - if (version < 8) { - int crcVal = getInt(null); - } - - if (version > 6) { - if (dataLength != (position() - dataPos)) { - throw new DeserializationException("Length mismatch"); - } + if (dataLength != (position() - dataPos)) { + throw new DeserializationException("Length mismatch"); } } public void read(FieldBase field, FieldValue value) { @@ -152,12 +138,9 @@ public class VespaDocumentDeserializer6 extends BufferSerializer implements Docu public <T extends FieldValue> void read(FieldBase field, Array<T> array) { int numElements = getNumCollectionElems(); - ArrayList<T> list = new ArrayList<T>(numElements); + ArrayList<T> list = new ArrayList<>(numElements); ArrayDataType type = array.getDataType(); for (int i = 0; i < numElements; i++) { - if (version < 7) { - getInt(null); // We don't need size for anything - } FieldValue fv = type.getNestedType().createFieldValue(); fv.deserialize(null, this); list.add((T) fv); @@ -171,9 +154,6 @@ public class VespaDocumentDeserializer6 extends BufferSerializer implements Docu Map<K,V> hash = new HashMap<>(); MapDataType type = map.getDataType(); for (int i = 0; i < numElements; i++) { - if (version < 7) { - getInt(null); // We don't need size for anything - } K key = (K) type.getKeyType().createFieldValue(); V val = (V) type.getValueType().createFieldValue(); key.deserialize(null, this); @@ -185,13 +165,7 @@ public class VespaDocumentDeserializer6 extends BufferSerializer implements Docu } private int getNumCollectionElems() { - int numElements; - if (version < 7) { - getInt(null); // We already know the nested type, so ignore that.. - numElements = getInt(null); - } else { - numElements = getInt1_2_4Bytes(null); - } + int numElements = getInt1_2_4Bytes(null); if (numElements < 0) { throw new DeserializationException("Bad number of array/map elements, " + numElements); } @@ -290,24 +264,12 @@ public class VespaDocumentDeserializer6 extends BufferSerializer implements Docu public void read(FieldBase fieldDef, Struct s) { s.setVersion(version); - int startPos = position(); - if (version < 6) { + if (version < 8) { throw new DeserializationException("Illegal document serialization version " + version); } - int dataSize; - if (version < 7) { - long rSize = getInt2_4_8Bytes(null); - //TODO: Look into how to support data segments larger than INT_MAX bytes - if (rSize > Integer.MAX_VALUE) { - throw new DeserializationException("Raw size of data block is too large."); - } - dataSize = (int)rSize; - } else { - dataSize = getInt(null); - } - + int dataSize = getInt(null); byte comprCode = getByte(null); CompressionType compression = CompressionType.valueOf(comprCode); @@ -335,11 +297,6 @@ public class VespaDocumentDeserializer6 extends BufferSerializer implements Docu // save a reference to the big buffer we're reading from: GrowableByteBuffer bigBuf = buf; - if (version < 7) { - // In V6 and earlier, the length included the header. - int headerSize = position() - startPos; - dataSize -= headerSize; - } byte[] destination = compressor.decompress(compression, getBuf().array(), position(), uncompressedSize, Optional.of(dataSize)); // set position in original buffer to after data @@ -351,7 +308,7 @@ public class VespaDocumentDeserializer6 extends BufferSerializer implements Docu s.clear(); StructDataType type = s.getDataType(); for (int i=0; i<numberOfFields; ++i) { - Field structField = type.getField(fieldIdsAndLengths.get(i).first, version); + Field structField = type.getField(fieldIdsAndLengths.get(i).first); if (structField == null) { //ignoring unknown field: position(position() + fieldIdsAndLengths.get(i).second.intValue()); @@ -371,23 +328,12 @@ public class VespaDocumentDeserializer6 extends BufferSerializer implements Docu private void readHeaderBody(Struct primary, Struct alternate) { primary.setVersion(version); - int startPos = position(); - if (version < 6) { + if (version < 8) { throw new DeserializationException("Illegal document serialization version " + version); } - int dataSize; - if (version < 7) { - long rSize = getInt2_4_8Bytes(null); - //TODO: Look into how to support data segments larger than INT_MAX bytes - if (rSize > Integer.MAX_VALUE) { - throw new DeserializationException("Raw size of data block is too large."); - } - dataSize = (int)rSize; - } else { - dataSize = getInt(null); - } + int dataSize = getInt(null); byte comprCode = getByte(null); CompressionType compression = CompressionType.valueOf(comprCode); @@ -416,11 +362,6 @@ public class VespaDocumentDeserializer6 extends BufferSerializer implements Docu // save a reference to the big buffer we're reading from: GrowableByteBuffer bigBuf = buf; - if (version < 7) { - // In V6 and earlier, the length included the header. - int headerSize = position() - startPos; - dataSize -= headerSize; - } byte[] destination = compressor.decompress(compression, getBuf().array(), position(), uncompressedSize, Optional.of(dataSize)); // set position in original buffer to after data @@ -435,11 +376,11 @@ public class VespaDocumentDeserializer6 extends BufferSerializer implements Docu int posBefore = position(); Struct s = null; Integer f_id = fieldIdsAndLengths.get(i).first; - Field structField = priType.getField(f_id, version); + Field structField = priType.getField(f_id); if (structField != null) { s = primary; } else { - structField = altType.getField(f_id, version); + structField = altType.getField(f_id); if (structField != null) { s = alternate; } @@ -471,7 +412,7 @@ public class VespaDocumentDeserializer6 extends BufferSerializer implements Docu ws.clearAndReserve(numElements * 2); // Avoid resizing for (int i = 0; i < numElements; i++) { - int size = getInt(null); + int unusedSize = getInt(null); FieldValue value = type.getNestedType().createFieldValue(); value.deserialize(null, this); IntegerFieldValue weight = new IntegerFieldValue(getInt(null)); @@ -490,13 +431,7 @@ public class VespaDocumentDeserializer6 extends BufferSerializer implements Docu } } - private Utf8String deserializeAttributeString() throws DeserializationException { - int length = getByte(null); - return new Utf8String(parseNullTerminatedString(length)); - } - private Utf8Array parseNullTerminatedString() { return parseNullTerminatedString(getBuf().getByteBuffer()); } - private Utf8Array parseNullTerminatedString(int lengthExcludingNull) { return parseNullTerminatedString(getBuf().getByteBuffer(), lengthExcludingNull); } static Utf8Array parseNullTerminatedString(ByteBuffer buf, int lengthExcludingNull) throws DeserializationException { Utf8Array utf8 = new Utf8Array(buf, lengthExcludingNull); @@ -504,7 +439,7 @@ public class VespaDocumentDeserializer6 extends BufferSerializer implements Docu return utf8; } - static Utf8Array parseNullTerminatedString(ByteBuffer buf) throws DeserializationException { + static Utf8Array parseNullTerminatedString(ByteBuffer buf) throws DeserializationException { //search for 0-byte int end = getFirstNullByte(buf); @@ -542,7 +477,7 @@ public class VespaDocumentDeserializer6 extends BufferSerializer implements Docu int size = getInt(null); for (int i = 0; i < size; i++) { - update.addFieldUpdate(new FieldUpdate(this, update.getDocumentType(), 8)); + update.addFieldUpdate(new FieldUpdate(this, update.getDocumentType())); } int sizeAndFlags = getInt(null); @@ -666,7 +601,7 @@ public class VespaDocumentDeserializer6 extends BufferSerializer implements Docu public void read(FieldUpdate fieldUpdate) { int fieldId = getInt(null); - Field field = fieldUpdate.getDocumentType().getField(fieldId, fieldUpdate.getSerializationVersion()); + Field field = fieldUpdate.getDocumentType().getField(fieldId); if (field == null) { throw new DeserializationException( "Cannot deserialize FieldUpdate, field fieldId " + fieldId + " not found in " + fieldUpdate.getDocumentType()); @@ -692,7 +627,7 @@ public class VespaDocumentDeserializer6 extends BufferSerializer implements Docu public DocumentType readDocumentType() { Utf8Array docTypeName = parseNullTerminatedString(); - int ignored = getShort(null); // used to hold the version + int ignoredVersion = getShort(null); // used to hold the version DocumentType docType = manager.getDocumentType(new DataTypeName(docTypeName)); if (docType == null) { @@ -738,8 +673,8 @@ public class VespaDocumentDeserializer6 extends BufferSerializer implements Docu } //we're going to write a new SpanTree, create a new Map for nodes: - spanNodes = new ArrayList<SpanNode>(); - annotations = new ArrayList<Annotation>(); + spanNodes = new ArrayList<>(); + annotations = new ArrayList<>(); try { if (readName) { @@ -845,7 +780,7 @@ public class VespaDocumentDeserializer6 extends BufferSerializer implements Docu if ((type & SpanList.ID) != SpanList.ID) { throw new DeserializationException("Cannot deserialize SpanList with type " + type); } - List<SpanNode> nodes = readSpanList(spanList); + List<SpanNode> nodes = readSpanList(); for (SpanNode node : nodes) { spanList.add(node); } @@ -860,7 +795,7 @@ public class VespaDocumentDeserializer6 extends BufferSerializer implements Docu for (int i = 0; i < numSubTrees; i++) { double prob = buf.getDouble(); - List<SpanNode> list = readSpanList(altSpanList); + List<SpanNode> list = readSpanList(); if (i == 0) { for (SpanNode node : list) { @@ -873,9 +808,9 @@ public class VespaDocumentDeserializer6 extends BufferSerializer implements Docu } } - private List<SpanNode> readSpanList(SpanNodeParent parent) { + private List<SpanNode> readSpanList() { int size = buf.getInt1_2_4Bytes(); - List<SpanNode> spanList = new ArrayList<SpanNode>(); + List<SpanNode> spanList = new ArrayList<>(); for (int i = 0; i < size; i++) { spanList.add(readSpanNode()); } diff --git a/document/src/main/java/com/yahoo/document/update/FieldUpdate.java b/document/src/main/java/com/yahoo/document/update/FieldUpdate.java index 192afba80b3..338062270ee 100644 --- a/document/src/main/java/com/yahoo/document/update/FieldUpdate.java +++ b/document/src/main/java/com/yahoo/document/update/FieldUpdate.java @@ -60,7 +60,6 @@ public class FieldUpdate { // Used only while deserializing. private DocumentType documentType = null; - private int serializationVersion = 0; FieldUpdate(Field field) { this.field = field; @@ -76,9 +75,13 @@ public class FieldUpdate { addValueUpdates(valueUpdates); } + @Deprecated public FieldUpdate(DocumentUpdateReader reader, DocumentType type, int serializationVersion) { + this(reader, type); + } + + public FieldUpdate(DocumentUpdateReader reader, DocumentType type) { documentType = type; - this.serializationVersion = serializationVersion; reader.read(this); } @@ -86,10 +89,6 @@ public class FieldUpdate { return documentType; } - public int getSerializationVersion() { - return serializationVersion; - } - /** Returns the field that this field update applies to */ public Field getField() { return field; |