diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2024-03-12 15:32:46 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-03-12 15:32:46 +0100 |
commit | ffaf23b9d65ae9c2713698ba4aee0efef7200030 (patch) | |
tree | 6b095e0b7dee674685e8031023151172d4577071 | |
parent | 84bf457b193f3cbd5fc481334e2f8c83103c9d80 (diff) | |
parent | 783a712f4b9dfc892170a923fd7baf3d416f4856 (diff) |
Merge pull request #30597 from vespa-engine/hmusum/support-serializing-document-update-to-jsonv8.318.18
Add support for serializing document update to json
7 files changed, 24 insertions, 10 deletions
diff --git a/document/abi-spec.json b/document/abi-spec.json index ca4b4da3ca0..5096039a941 100644 --- a/document/abi-spec.json +++ b/document/abi-spec.json @@ -2863,7 +2863,8 @@ "public abstract void write(com.yahoo.document.Document)", "public abstract void write(com.yahoo.document.DocumentId)", "public abstract void write(com.yahoo.document.DocumentType)", - "public abstract void write(com.yahoo.document.DocumentRemove)" + "public abstract void write(com.yahoo.document.DocumentRemove)", + "public abstract void write(com.yahoo.document.DocumentUpdate)" ], "fields" : [ ] }, diff --git a/document/src/main/java/com/yahoo/document/DocumentUpdate.java b/document/src/main/java/com/yahoo/document/DocumentUpdate.java index d3063b76feb..20d9b352d2d 100644 --- a/document/src/main/java/com/yahoo/document/DocumentUpdate.java +++ b/document/src/main/java/com/yahoo/document/DocumentUpdate.java @@ -147,7 +147,7 @@ public class DocumentUpdate extends DocumentOperation implements Iterable<FieldP Map.Entry<Integer, FieldUpdate> entry = iter.next(); FieldUpdate update = entry.getValue(); if (!update.isEmpty()) { - ValueUpdate last = update.getValueUpdate(update.size() - 1); + ValueUpdate<?> last = update.getValueUpdate(update.size() - 1); if (last instanceof AssignValueUpdate) { FieldValue currentValue = doc.getFieldValue(update.getField()); if ((currentValue != null) && currentValue.equals(last.getValue())) { @@ -190,7 +190,7 @@ public class DocumentUpdate extends DocumentOperation implements Iterable<FieldP /** Returns the type of the document this updates * - * @return The documentype of the document + * @return The document type of the document */ public DocumentType getDocumentType() { return documentType; @@ -357,9 +357,7 @@ public class DocumentUpdate extends DocumentOperation implements Iterable<FieldP @Override public boolean equals(Object o) { if (this == o) return true; - if (!(o instanceof DocumentUpdate)) return false; - - DocumentUpdate that = (DocumentUpdate) o; + if (!(o instanceof DocumentUpdate that)) return false; if (docId != null ? !docId.equals(that.docId) : that.docId != null) return false; if (documentType != null ? !documentType.equals(that.documentType) : that.documentType != null) return false; @@ -413,7 +411,7 @@ public class DocumentUpdate extends DocumentOperation implements Iterable<FieldP } /** - * Returns whether or not this field update contains any field- or field path updates. + * Returns whether this field update contains any field- or field path updates. * * @return True if this update is empty. */ diff --git a/document/src/main/java/com/yahoo/document/json/JsonWriter.java b/document/src/main/java/com/yahoo/document/json/JsonWriter.java index 9cbadb65f10..2b0ba138466 100644 --- a/document/src/main/java/com/yahoo/document/json/JsonWriter.java +++ b/document/src/main/java/com/yahoo/document/json/JsonWriter.java @@ -9,6 +9,7 @@ import com.yahoo.document.Document; import com.yahoo.document.DocumentId; import com.yahoo.document.DocumentRemove; import com.yahoo.document.DocumentType; +import com.yahoo.document.DocumentUpdate; import com.yahoo.document.Field; import com.yahoo.document.annotation.AnnotationReference; import com.yahoo.document.datatypes.Array; @@ -264,6 +265,7 @@ public class JsonWriter implements DocumentWriter { // NOP, fetched from Document } + @Override public void write(DocumentRemove documentRemove) { try { generator.writeStartObject(); @@ -277,6 +279,12 @@ public class JsonWriter implements DocumentWriter { } } + @Override + public void write(DocumentUpdate documentUpdate) { + var serializer = new DocumentUpdateJsonSerializer(generator); + serializer.serialize(documentUpdate); + } + /** * Utility method to easily serialize a single document. * diff --git a/document/src/main/java/com/yahoo/document/serialization/DocumentUpdateWriter.java b/document/src/main/java/com/yahoo/document/serialization/DocumentUpdateWriter.java index 0202ec8bf23..b9cc439ad54 100644 --- a/document/src/main/java/com/yahoo/document/serialization/DocumentUpdateWriter.java +++ b/document/src/main/java/com/yahoo/document/serialization/DocumentUpdateWriter.java @@ -17,8 +17,7 @@ import com.yahoo.document.update.TensorRemoveUpdate; /** * Interface for writing document updates in custom serializers. * - * @author <a href="mailto:einarmr@yahoo-inc.com">Einar M R Rosenvinge</a> - * @since 5.1.27 + * @author Einar M R Rosenvinge */ public interface DocumentUpdateWriter { void write(DocumentUpdate update); diff --git a/document/src/main/java/com/yahoo/document/serialization/DocumentWriter.java b/document/src/main/java/com/yahoo/document/serialization/DocumentWriter.java index 10483d8609f..16125926fe6 100644 --- a/document/src/main/java/com/yahoo/document/serialization/DocumentWriter.java +++ b/document/src/main/java/com/yahoo/document/serialization/DocumentWriter.java @@ -5,6 +5,7 @@ import com.yahoo.document.Document; import com.yahoo.document.DocumentId; import com.yahoo.document.DocumentRemove; import com.yahoo.document.DocumentType; +import com.yahoo.document.DocumentUpdate; /** * @author ravishar @@ -20,4 +21,6 @@ public interface DocumentWriter extends FieldWriter { void write(DocumentRemove documentRemove); + void write(DocumentUpdate documentUpdate); + } diff --git a/vespaclient-java/src/main/java/com/yahoo/vespa/feed/perf/SimpleFeeder.java b/vespaclient-java/src/main/java/com/yahoo/vespa/feed/perf/SimpleFeeder.java index 3a7fe8f75c6..386468e85e8 100644 --- a/vespaclient-java/src/main/java/com/yahoo/vespa/feed/perf/SimpleFeeder.java +++ b/vespaclient-java/src/main/java/com/yahoo/vespa/feed/perf/SimpleFeeder.java @@ -192,6 +192,10 @@ public class SimpleFeeder implements ReplyHandler { addCommaAndNewline(); writer.write(op.getDocumentRemove()); } + case UPDATE -> { + addCommaAndNewline(); + writer.write(op.getDocumentUpdate()); + } default -> { /* TODO: No more operations supported yet */ } } numReplies.incrementAndGet(); diff --git a/vespaclient-java/src/test/java/com/yahoo/vespa/feed/perf/SimpleFeederTest.java b/vespaclient-java/src/test/java/com/yahoo/vespa/feed/perf/SimpleFeederTest.java index 2810303fad3..6776b71eea6 100644 --- a/vespaclient-java/src/test/java/com/yahoo/vespa/feed/perf/SimpleFeederTest.java +++ b/vespaclient-java/src/test/java/com/yahoo/vespa/feed/perf/SimpleFeederTest.java @@ -87,10 +87,11 @@ public class SimpleFeederTest { "", "(.+\n)+" + "\\s*\\d+,\\s*3,.+\n"); - assertEquals(96, dump.size()); + assertEquals(169, dump.size()); assertEquals(""" [ {"id":"id:simple:simple::0","fields":{"my_str":"foo"}}, + {"update":"id:simple:simple::1","fields":{"my_str":{"assign":"bar"}}}, {"remove":"id:simple:simple::2"} ]""", dump.toString()); |