aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2024-03-12 15:32:46 +0100
committerGitHub <noreply@github.com>2024-03-12 15:32:46 +0100
commitffaf23b9d65ae9c2713698ba4aee0efef7200030 (patch)
tree6b095e0b7dee674685e8031023151172d4577071
parent84bf457b193f3cbd5fc481334e2f8c83103c9d80 (diff)
parent783a712f4b9dfc892170a923fd7baf3d416f4856 (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
-rw-r--r--document/abi-spec.json3
-rw-r--r--document/src/main/java/com/yahoo/document/DocumentUpdate.java10
-rw-r--r--document/src/main/java/com/yahoo/document/json/JsonWriter.java8
-rw-r--r--document/src/main/java/com/yahoo/document/serialization/DocumentUpdateWriter.java3
-rw-r--r--document/src/main/java/com/yahoo/document/serialization/DocumentWriter.java3
-rw-r--r--vespaclient-java/src/main/java/com/yahoo/vespa/feed/perf/SimpleFeeder.java4
-rw-r--r--vespaclient-java/src/test/java/com/yahoo/vespa/feed/perf/SimpleFeederTest.java3
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());