aboutsummaryrefslogtreecommitdiffstats
path: root/documentapi/src/vespa
diff options
context:
space:
mode:
authorHåvard Pettersen <havardpe@yahooinc.com>2023-04-18 11:53:03 +0000
committerHåvard Pettersen <havardpe@yahooinc.com>2023-04-19 10:09:09 +0000
commit8b17820cc0367a3e35a951dabed21a9c2d3ab75e (patch)
tree09829ac5f5684532b3eaca0b1d206bace8f295dc /documentapi/src/vespa
parentee613a99dc15b6acaaf923c60d76fe9428c0aee8 (diff)
add create-if-non-existent flag for document put
Diffstat (limited to 'documentapi/src/vespa')
-rw-r--r--documentapi/src/vespa/documentapi/messagebus/messages/putdocumentmessage.h5
-rw-r--r--documentapi/src/vespa/documentapi/messagebus/routablefactories60.cpp12
2 files changed, 15 insertions, 2 deletions
diff --git a/documentapi/src/vespa/documentapi/messagebus/messages/putdocumentmessage.h b/documentapi/src/vespa/documentapi/messagebus/messages/putdocumentmessage.h
index 5a7f8acb60a..018aea69a71 100644
--- a/documentapi/src/vespa/documentapi/messagebus/messages/putdocumentmessage.h
+++ b/documentapi/src/vespa/documentapi/messagebus/messages/putdocumentmessage.h
@@ -11,6 +11,7 @@ private:
using DocumentSP = std::shared_ptr<document::Document>;
DocumentSP _document;
uint64_t _time;
+ bool _create_if_non_existent = false;
protected:
DocumentReply::UP doCreateReply() const override;
@@ -65,7 +66,9 @@ public:
uint64_t getSequenceId() const override;
uint32_t getType() const override;
string toString() const override { return "putdocumentmessage"; }
+
+ void set_create_if_non_existent(bool value) { _create_if_non_existent = value; }
+ bool get_create_if_non_existent() const { return _create_if_non_existent; }
};
}
-
diff --git a/documentapi/src/vespa/documentapi/messagebus/routablefactories60.cpp b/documentapi/src/vespa/documentapi/messagebus/routablefactories60.cpp
index 0757db9f5fc..1dce7ff281f 100644
--- a/documentapi/src/vespa/documentapi/messagebus/routablefactories60.cpp
+++ b/documentapi/src/vespa/documentapi/messagebus/routablefactories60.cpp
@@ -532,6 +532,11 @@ RoutableFactories60::PutDocumentMessageFactory::decodeInto(PutDocumentMessage &
msg.setDocument(decodeDocument(_repo, buf));
msg.setTimestamp(static_cast<uint64_t>(decodeLong(buf)));
decodeTasCondition(msg, buf);
+ if (buf.getRemaining() > 0) {
+ uint8_t value = 0;
+ buf.getByte(value);
+ msg.set_create_if_non_existent(value != 0);
+ }
}
bool
@@ -544,7 +549,12 @@ RoutableFactories60::PutDocumentMessageFactory::doEncode(const DocumentMessage &
buf.putBytes(stream.peek(), stream.size());
buf.putLong(static_cast<int64_t>(msg.getTimestamp()));
encodeTasCondition(buf, msg);
-
+ if (msg.get_create_if_non_existent()) {
+ buf.putByte(1);
+ } else {
+ buf.putByte(0);
+ }
+
return true;
}