diff options
author | Håvard Pettersen <havardpe@yahooinc.com> | 2023-04-18 11:53:03 +0000 |
---|---|---|
committer | Håvard Pettersen <havardpe@yahooinc.com> | 2023-04-19 10:09:09 +0000 |
commit | 8b17820cc0367a3e35a951dabed21a9c2d3ab75e (patch) | |
tree | 09829ac5f5684532b3eaca0b1d206bace8f295dc /documentapi/src/vespa | |
parent | ee613a99dc15b6acaaf923c60d76fe9428c0aee8 (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.h | 5 | ||||
-rw-r--r-- | documentapi/src/vespa/documentapi/messagebus/routablefactories60.cpp | 12 |
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; } |