From 47915939389db207457b6ec4b78dadf9670ca674 Mon Sep 17 00:00:00 2001 From: Tor Brede Vekterli Date: Wed, 17 Jan 2018 16:23:46 +0000 Subject: Add visitor bucket space encoding to C++ Also remove MultiOperation support, since it has already been removed from the Java DocumentProtocol. --- .../protocol/test/Messages60TestCase.java | 2 +- documentapi/src/tests/messages/CMakeLists.txt | 12 +++++ documentapi/src/tests/messages/messages50test.cpp | 56 ---------------------- documentapi/src/tests/messages/messages50test.h | 2 - documentapi/src/tests/messages/messages52test.cpp | 2 +- documentapi/src/tests/messages/messages52test.h | 2 +- documentapi/src/tests/messages/messages60app.cpp | 5 ++ documentapi/src/tests/messages/messages60test.cpp | 54 +++++++++++++++++++++ documentapi/src/tests/messages/messages60test.h | 13 +++++ .../vespa/documentapi/messagebus/CMakeLists.txt | 1 + .../documentapi/messagebus/documentprotocol.cpp | 8 +++- .../documentapi/messagebus/messages/visitor.cpp | 4 +- .../documentapi/messagebus/routablefactories51.cpp | 13 ++++- .../documentapi/messagebus/routablefactories51.h | 3 ++ .../documentapi/messagebus/routablefactories60.cpp | 18 +++++++ .../documentapi/messagebus/routablefactories60.h | 25 ++++++++++ 16 files changed, 154 insertions(+), 66 deletions(-) create mode 100644 documentapi/src/tests/messages/messages60app.cpp create mode 100644 documentapi/src/tests/messages/messages60test.cpp create mode 100644 documentapi/src/tests/messages/messages60test.h create mode 100644 documentapi/src/vespa/documentapi/messagebus/routablefactories60.cpp create mode 100644 documentapi/src/vespa/documentapi/messagebus/routablefactories60.h (limited to 'documentapi/src') diff --git a/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/Messages60TestCase.java b/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/Messages60TestCase.java index 70ccdc1bd1b..ca54173701e 100644 --- a/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/Messages60TestCase.java +++ b/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/Messages60TestCase.java @@ -53,7 +53,7 @@ public class Messages60TestCase extends Messages52TestCase { msg.setVisitorOrdering(OrderingSpecification.DESCENDING); msg.setMaxBucketsPerVisitor(2); msg.setBucketSpace(BUCKET_SPACE); - assertEquals(BASE_MESSAGE_LENGTH + 184 + serializedLength(BUCKET_SPACE), serialize("CreateVisitorMessage", msg)); + assertEquals(BASE_MESSAGE_LENGTH + 178 + serializedLength(BUCKET_SPACE), serialize("CreateVisitorMessage", msg)); for (Language lang : LANGUAGES) { msg = (CreateVisitorMessage)deserialize("CreateVisitorMessage", DocumentProtocol.MESSAGE_CREATEVISITOR, lang); diff --git a/documentapi/src/tests/messages/CMakeLists.txt b/documentapi/src/tests/messages/CMakeLists.txt index c34320bd78d..b762eaca657 100644 --- a/documentapi/src/tests/messages/CMakeLists.txt +++ b/documentapi/src/tests/messages/CMakeLists.txt @@ -29,6 +29,18 @@ vespa_add_executable(documentapi_messages52_test_app TEST documentapi ) vespa_add_test(NAME documentapi_messages52_test_app COMMAND documentapi_messages52_test_app) +vespa_add_executable(documentapi_messages60_test_app TEST + SOURCES + testbase.cpp + messages50test.cpp + messages51test.cpp + messages52test.cpp + messages60test.cpp + messages60app.cpp + DEPENDS + documentapi +) +vespa_add_test(NAME documentapi_messages60_test_app COMMAND documentapi_messages60_test_app) vespa_add_executable(documentapi_error_codes_test_app_app TEST SOURCES error_codes_test.cpp diff --git a/documentapi/src/tests/messages/messages50test.cpp b/documentapi/src/tests/messages/messages50test.cpp index b50f30c1f91..db82bdce54d 100644 --- a/documentapi/src/tests/messages/messages50test.cpp +++ b/documentapi/src/tests/messages/messages50test.cpp @@ -31,7 +31,6 @@ Messages50Test::Messages50Test() putTest(DocumentProtocol::MESSAGE_GETBUCKETSTATE, TEST_METHOD(Messages50Test::testGetBucketStateMessage)); putTest(DocumentProtocol::MESSAGE_GETDOCUMENT, TEST_METHOD(Messages50Test::testGetDocumentMessage)); putTest(DocumentProtocol::MESSAGE_MAPVISITOR, TEST_METHOD(Messages50Test::testMapVisitorMessage)); - putTest(DocumentProtocol::MESSAGE_MULTIOPERATION, TEST_METHOD(Messages50Test::testMultiOperationMessage)); putTest(DocumentProtocol::MESSAGE_PUTDOCUMENT, TEST_METHOD(Messages50Test::testPutDocumentMessage)); putTest(DocumentProtocol::MESSAGE_QUERYRESULT, TEST_METHOD(Messages50Test::testQueryResultMessage)); putTest(DocumentProtocol::MESSAGE_REMOVEDOCUMENT, TEST_METHOD(Messages50Test::testRemoveDocumentMessage)); @@ -51,7 +50,6 @@ Messages50Test::Messages50Test() putTest(DocumentProtocol::REPLY_GETBUCKETSTATE, TEST_METHOD(Messages50Test::testGetBucketStateReply)); putTest(DocumentProtocol::REPLY_GETDOCUMENT, TEST_METHOD(Messages50Test::testGetDocumentReply)); putTest(DocumentProtocol::REPLY_MAPVISITOR, TEST_METHOD(Messages50Test::testMapVisitorReply)); - putTest(DocumentProtocol::REPLY_MULTIOPERATION, TEST_METHOD(Messages50Test::testMultiOperationReply)); putTest(DocumentProtocol::REPLY_PUTDOCUMENT, TEST_METHOD(Messages50Test::testPutDocumentReply)); putTest(DocumentProtocol::REPLY_QUERYRESULT, TEST_METHOD(Messages50Test::testQueryResultReply)); putTest(DocumentProtocol::REPLY_REMOVEDOCUMENT, TEST_METHOD(Messages50Test::testRemoveDocumentReply)); @@ -324,41 +322,6 @@ Messages50Test::testDocumentSummaryMessage() return true; } -bool -Messages50Test::testMultiOperationMessage() -{ - document::Document::SP doc = - createDoc(getTypeRepo(), "testdoc", "doc:scheme:foo"); - std::vector buffer(1024); - document::BucketIdFactory factory; - - vdslib::WritableDocumentList doclist(getTypeRepoSp(), - &buffer[0], buffer.size()); - ASSERT_TRUE(doclist.addPut(*doc)); - - size_t n = MESSAGE_BASE_LENGTH; - n += sizeof(uint32_t); // routable object type - n += sizeof(uint64_t); // bucket id - n += sizeof(uint32_t); // bytes in docblock - n += sizeof(uint32_t); // num operations - n += sizeof(vdslib::DocumentList::MetaEntry); - n += doc->serialize()->getLength(); - n += 1; // boolean keepTimeStamps - - MultiOperationMessage msg(document::BucketId(16, factory.getBucketId(doc->getId()).getRawId()), doclist); - EXPECT_EQUAL(n, serialize("MultiOperationMessage", msg)); - for (uint32_t lang = 0; lang < NUM_LANGUAGES; ++lang) { - mbus::Routable::UP obj = deserialize("MultiOperationMessage", DocumentProtocol::MESSAGE_MULTIOPERATION, lang); - if (EXPECT_TRUE(obj.get() != NULL)) { - MultiOperationMessage &ref = static_cast(*obj); - EXPECT_EQUAL((uint32_t)1, ref.getOperations().size()); - EXPECT_EQUAL(*doc, *dynamic_cast(ref.getOperations().begin()->getDocument().get())); - EXPECT_EQUAL(document::BucketId(16, factory.getBucketId(doc->getId()).getRawId()), ref.getBucketId()); - } - } - return true; -} - bool Messages50Test::testGetDocumentMessage() { @@ -701,25 +664,6 @@ Messages50Test::testSearchResultMessage() return true; } - -bool -Messages50Test::testMultiOperationReply() -{ - WriteDocumentReply reply(DocumentProtocol::REPLY_MULTIOPERATION); - reply.setHighestModificationTimestamp(30); - - EXPECT_EQUAL(13u, serialize("MultiOperationReply", reply)); - - for (uint32_t lang = 0; lang < NUM_LANGUAGES; ++lang) { - mbus::Routable::UP obj = deserialize("MultiOperationReply", DocumentProtocol::REPLY_MULTIOPERATION, lang); - if (EXPECT_TRUE(obj.get() != NULL)) { - WriteDocumentReply &ref = static_cast(*obj); - EXPECT_EQUAL(30u, ref.getHighestModificationTimestamp()); - } - } - return true; -} - bool Messages50Test::testUpdateDocumentMessage() { diff --git a/documentapi/src/tests/messages/messages50test.h b/documentapi/src/tests/messages/messages50test.h index 8711264ee7a..c764f814a45 100644 --- a/documentapi/src/tests/messages/messages50test.h +++ b/documentapi/src/tests/messages/messages50test.h @@ -33,8 +33,6 @@ public: bool testGetDocumentReply(); bool testMapVisitorMessage(); bool testMapVisitorReply(); - bool testMultiOperationMessage(); - bool testMultiOperationReply(); bool testPutDocumentMessage(); bool testPutDocumentReply(); bool testQueryResultMessage(); diff --git a/documentapi/src/tests/messages/messages52test.cpp b/documentapi/src/tests/messages/messages52test.cpp index 33eb5134dce..642fbc2fc41 100644 --- a/documentapi/src/tests/messages/messages52test.cpp +++ b/documentapi/src/tests/messages/messages52test.cpp @@ -21,7 +21,7 @@ createDoc(const DocumentTypeRepo &repo, const string &type_name, const string &i } -static const int MESSAGE_BASE_LENGTH = 5; +static constexpr int MESSAGE_BASE_LENGTH = 5; Messages52Test::Messages52Test() { diff --git a/documentapi/src/tests/messages/messages52test.h b/documentapi/src/tests/messages/messages52test.h index c45f00fb4b4..a663ae15fdc 100644 --- a/documentapi/src/tests/messages/messages52test.h +++ b/documentapi/src/tests/messages/messages52test.h @@ -15,7 +15,7 @@ public: bool testUpdateDocumentMessage(); bool testRemoveDocumentMessage(); -private: +protected: static size_t serializedLength(const string & str) { return sizeof(int32_t) + str.size(); } diff --git a/documentapi/src/tests/messages/messages60app.cpp b/documentapi/src/tests/messages/messages60app.cpp new file mode 100644 index 00000000000..a6c626d5b20 --- /dev/null +++ b/documentapi/src/tests/messages/messages60app.cpp @@ -0,0 +1,5 @@ +// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#include "messages60test.h" + +TEST_APPHOOK(Messages60Test); diff --git a/documentapi/src/tests/messages/messages60test.cpp b/documentapi/src/tests/messages/messages60test.cpp new file mode 100644 index 00000000000..d26f1ef319f --- /dev/null +++ b/documentapi/src/tests/messages/messages60test.cpp @@ -0,0 +1,54 @@ +// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#include "messages60test.h" +#include + +static constexpr int MESSAGE_BASE_LENGTH = 5; + +Messages60Test::Messages60Test() { + // This list MUST mirror the list of routable factories from the DocumentProtocol constructor that support + // version 6.x. When adding tests to this list, please KEEP THEM ORDERED alphabetically like they are now. + putTest(DocumentProtocol::MESSAGE_CREATEVISITOR, TEST_METHOD(Messages60Test::testCreateVisitorMessage)); +} + +// TODO code dupe with parent classes +bool Messages60Test::testCreateVisitorMessage() { + CreateVisitorMessage tmp("SomeLibrary", "myvisitor", "newyork", "london"); + tmp.setDocumentSelection("true and false or true"); + tmp.getParameters().set("myvar", "somevalue"); + tmp.getParameters().set("anothervar", uint64_t(34)); + tmp.getBuckets().push_back(document::BucketId(16, 1234)); + tmp.setVisitRemoves(true); + tmp.setFieldSet("foo bar"); + tmp.setVisitorOrdering(document::OrderingSpecification::DESCENDING); + tmp.setMaxBucketsPerVisitor(2); + tmp.setBucketSpace("bjarne"); + + EXPECT_EQUAL(MESSAGE_BASE_LENGTH + serializedLength("bjarne") + 178, serialize("CreateVisitorMessage", tmp)); + + for (uint32_t lang = 0; lang < NUM_LANGUAGES; ++lang) { + mbus::Routable::UP obj = deserialize("CreateVisitorMessage", DocumentProtocol::MESSAGE_CREATEVISITOR, lang); + if (EXPECT_TRUE(obj)) { + auto& ref = dynamic_cast(*obj); + + EXPECT_EQUAL(string("SomeLibrary"), ref.getLibraryName()); + EXPECT_EQUAL(string("myvisitor"), ref.getInstanceId()); + EXPECT_EQUAL(string("newyork"), ref.getControlDestination()); + EXPECT_EQUAL(string("london"), ref.getDataDestination()); + EXPECT_EQUAL(string("true and false or true"), ref.getDocumentSelection()); + EXPECT_EQUAL(string("foo bar"), ref.getFieldSet()); + EXPECT_EQUAL(uint32_t(8), ref.getMaximumPendingReplyCount()); + EXPECT_EQUAL(true, ref.visitRemoves()); + EXPECT_EQUAL(false, ref.visitHeadersOnly()); + EXPECT_EQUAL(false, ref.visitInconsistentBuckets()); + EXPECT_EQUAL(size_t(1), ref.getBuckets().size()); + EXPECT_EQUAL(document::BucketId(16, 1234), ref.getBuckets()[0]); + EXPECT_EQUAL(string("somevalue"), ref.getParameters().get("myvar")); + EXPECT_EQUAL(uint64_t(34), ref.getParameters().get("anothervar", uint64_t(1))); + EXPECT_EQUAL(document::OrderingSpecification::DESCENDING, ref.getVisitorOrdering()); + EXPECT_EQUAL(uint32_t(2), ref.getMaxBucketsPerVisitor()); + EXPECT_EQUAL(string("bjarne"), ref.getBucketSpace()); + } + } + return true; +} \ No newline at end of file diff --git a/documentapi/src/tests/messages/messages60test.h b/documentapi/src/tests/messages/messages60test.h new file mode 100644 index 00000000000..2b61c118f18 --- /dev/null +++ b/documentapi/src/tests/messages/messages60test.h @@ -0,0 +1,13 @@ +// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +#pragma once + +#include "messages52test.h" + +class Messages60Test : public Messages52Test { +protected: + // TODO finalize version + const vespalib::Version getVersion() const override { return vespalib::Version(6, 999, 0); } +public: + Messages60Test(); + bool testCreateVisitorMessage(); +}; diff --git a/documentapi/src/vespa/documentapi/messagebus/CMakeLists.txt b/documentapi/src/vespa/documentapi/messagebus/CMakeLists.txt index 8de99ad78db..1df761b8af5 100644 --- a/documentapi/src/vespa/documentapi/messagebus/CMakeLists.txt +++ b/documentapi/src/vespa/documentapi/messagebus/CMakeLists.txt @@ -8,6 +8,7 @@ vespa_add_library(documentapi_documentapimessagebus OBJECT routablefactories50.cpp routablefactories51.cpp routablefactories52.cpp + routablefactories60.cpp routablerepository.cpp routingpolicyfactories.cpp routingpolicyrepository.cpp diff --git a/documentapi/src/vespa/documentapi/messagebus/documentprotocol.cpp b/documentapi/src/vespa/documentapi/messagebus/documentprotocol.cpp index a1837b6bcd0..b2588657825 100644 --- a/documentapi/src/vespa/documentapi/messagebus/documentprotocol.cpp +++ b/documentapi/src/vespa/documentapi/messagebus/documentprotocol.cpp @@ -3,6 +3,7 @@ #include "routablefactories50.h" #include "routablefactories51.h" #include "routablefactories52.h" +#include "routablefactories60.h" #include "routingpolicyfactories.h" #include "routablerepository.h" #include "routingpolicyrepository.h" @@ -49,10 +50,12 @@ DocumentProtocol::DocumentProtocol(const LoadTypeSet& loadTypes, vespalib::VersionSpecification version50(5, 0); vespalib::VersionSpecification version51(5, 1); vespalib::VersionSpecification version52(5, 115); + vespalib::VersionSpecification version6(6, 999); // TODO finalize version std::vector from50 = { version50, version51, version52 }; std::vector from51 = { version51, version52 }; std::vector from52 = { version52 }; + std::vector from6 = { version6 }; // Add 5.0 serialization putRoutableFactory(MESSAGE_BATCHDOCUMENTUPDATE, IRoutableFactory::SP(new RoutableFactories50::BatchDocumentUpdateMessageFactory(*_repo)), from50); @@ -65,7 +68,6 @@ DocumentProtocol::DocumentProtocol(const LoadTypeSet& loadTypes, putRoutableFactory(MESSAGE_GETBUCKETSTATE, IRoutableFactory::SP(new RoutableFactories50::GetBucketStateMessageFactory()), from50); putRoutableFactory(MESSAGE_GETDOCUMENT, IRoutableFactory::SP(new RoutableFactories50::GetDocumentMessageFactory()), from50); putRoutableFactory(MESSAGE_MAPVISITOR, IRoutableFactory::SP(new RoutableFactories50::MapVisitorMessageFactory(*_repo)), from50); - putRoutableFactory(MESSAGE_MULTIOPERATION, IRoutableFactory::SP(new RoutableFactories50::MultiOperationMessageFactory(_repo)), from50); putRoutableFactory(MESSAGE_PUTDOCUMENT, IRoutableFactory::SP(new RoutableFactories50::PutDocumentMessageFactory(*_repo)), from50); putRoutableFactory(MESSAGE_QUERYRESULT, IRoutableFactory::SP(new RoutableFactories50::QueryResultMessageFactory()), from50); putRoutableFactory(MESSAGE_REMOVEDOCUMENT, IRoutableFactory::SP(new RoutableFactories50::RemoveDocumentMessageFactory()), from50); @@ -84,7 +86,6 @@ DocumentProtocol::DocumentProtocol(const LoadTypeSet& loadTypes, putRoutableFactory(REPLY_GETBUCKETSTATE, IRoutableFactory::SP(new RoutableFactories50::GetBucketStateReplyFactory()), from50); putRoutableFactory(REPLY_GETDOCUMENT, IRoutableFactory::SP(new RoutableFactories50::GetDocumentReplyFactory(*_repo)), from50); putRoutableFactory(REPLY_MAPVISITOR, IRoutableFactory::SP(new RoutableFactories50::MapVisitorReplyFactory()), from50); - putRoutableFactory(REPLY_MULTIOPERATION, IRoutableFactory::SP(new RoutableFactories50::MultiOperationReplyFactory()), from50); putRoutableFactory(REPLY_PUTDOCUMENT, IRoutableFactory::SP(new RoutableFactories50::PutDocumentReplyFactory()), from50); putRoutableFactory(REPLY_QUERYRESULT, IRoutableFactory::SP(new RoutableFactories50::QueryResultReplyFactory()), from50); putRoutableFactory(REPLY_REMOVEDOCUMENT, IRoutableFactory::SP(new RoutableFactories50::RemoveDocumentReplyFactory()), from50); @@ -104,6 +105,9 @@ DocumentProtocol::DocumentProtocol(const LoadTypeSet& loadTypes, putRoutableFactory(MESSAGE_PUTDOCUMENT, IRoutableFactory::SP(new RoutableFactories52::PutDocumentMessageFactory(*_repo)), from52); putRoutableFactory(MESSAGE_UPDATEDOCUMENT, IRoutableFactory::SP(new RoutableFactories52::UpdateDocumentMessageFactory(*_repo)), from52); putRoutableFactory(MESSAGE_REMOVEDOCUMENT, IRoutableFactory::SP(new RoutableFactories52::RemoveDocumentMessageFactory()), from52); + + // Add 6.x serialization (TODO finalize version) + putRoutableFactory(MESSAGE_CREATEVISITOR, IRoutableFactory::SP(new RoutableFactories60::CreateVisitorMessageFactory(*_repo)), from6); } DocumentProtocol::~DocumentProtocol() { } diff --git a/documentapi/src/vespa/documentapi/messagebus/messages/visitor.cpp b/documentapi/src/vespa/documentapi/messagebus/messages/visitor.cpp index c870775fae7..44ec234b75e 100644 --- a/documentapi/src/vespa/documentapi/messagebus/messages/visitor.cpp +++ b/documentapi/src/vespa/documentapi/messagebus/messages/visitor.cpp @@ -11,7 +11,7 @@ CreateVisitorMessage::CreateVisitorMessage() : _instanceId(), _controlDestination(), _dataDestination(), - _bucketSpace(), + _bucketSpace("default"), // TODO repo _docSelection(), _maxPendingReplyCount(8), _buckets(), @@ -35,7 +35,7 @@ CreateVisitorMessage::CreateVisitorMessage(const string& libraryName, _instanceId(instanceId), _controlDestination(controlDestination), _dataDestination(dataDestination), - _bucketSpace(), + _bucketSpace("default"), // TODO repo _docSelection(), _maxPendingReplyCount(8), _buckets(), diff --git a/documentapi/src/vespa/documentapi/messagebus/routablefactories51.cpp b/documentapi/src/vespa/documentapi/messagebus/routablefactories51.cpp index 2eb539c7d3d..15d485e6181 100644 --- a/documentapi/src/vespa/documentapi/messagebus/routablefactories51.cpp +++ b/documentapi/src/vespa/documentapi/messagebus/routablefactories51.cpp @@ -86,6 +86,7 @@ RoutableFactories51::CreateVisitorMessageFactory::doDecode(document::ByteBuffer msg.setVisitorDispatcherVersion(50); msg.setVisitorOrdering((document::OrderingSpecification::Order)decodeInt(buf)); msg.setMaxBucketsPerVisitor(decodeInt(buf)); + msg.setBucketSpace(decodeBucketSpace(buf)); return ret; } @@ -124,8 +125,18 @@ RoutableFactories51::CreateVisitorMessageFactory::doEncode(const DocumentMessage buf.putInt(msg.getVisitorOrdering()); buf.putInt(msg.getMaxBucketsPerVisitor()); + return encodeBucketSpace(msg.getBucketSpace(), buf); +} - return true; +bool RoutableFactories51::CreateVisitorMessageFactory::encodeBucketSpace( + vespalib::stringref bucketSpace, + vespalib::GrowableByteBuffer& buf) const { + (void) buf; + return (bucketSpace == "default"); // TODO used fixed repo here +} + +string RoutableFactories51::CreateVisitorMessageFactory::decodeBucketSpace(document::ByteBuffer&) const { + return "default"; // TODO fixed bucket repo } DocumentMessage::UP diff --git a/documentapi/src/vespa/documentapi/messagebus/routablefactories51.h b/documentapi/src/vespa/documentapi/messagebus/routablefactories51.h index 06efc3df6bd..fc20324b418 100644 --- a/documentapi/src/vespa/documentapi/messagebus/routablefactories51.h +++ b/documentapi/src/vespa/documentapi/messagebus/routablefactories51.h @@ -130,6 +130,9 @@ public: protected: DocumentMessage::UP doDecode(document::ByteBuffer &buf) const override; bool doEncode(const DocumentMessage &msg, vespalib::GrowableByteBuffer &buf) const override; + + virtual bool encodeBucketSpace(vespalib::stringref bucketSpace, vespalib::GrowableByteBuffer& buf) const; + virtual string decodeBucketSpace(document::ByteBuffer&) const; public: CreateVisitorMessageFactory(const document::DocumentTypeRepo &r) : _repo(r) {} }; diff --git a/documentapi/src/vespa/documentapi/messagebus/routablefactories60.cpp b/documentapi/src/vespa/documentapi/messagebus/routablefactories60.cpp new file mode 100644 index 00000000000..45a4a5195d1 --- /dev/null +++ b/documentapi/src/vespa/documentapi/messagebus/routablefactories60.cpp @@ -0,0 +1,18 @@ +// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#include "routablefactories60.h" + +namespace documentapi { + +bool RoutableFactories60::CreateVisitorMessageFactory::encodeBucketSpace( + vespalib::stringref bucketSpace, + vespalib::GrowableByteBuffer& buf) const { + buf.putString(bucketSpace); + return true; +} + +string RoutableFactories60::CreateVisitorMessageFactory::decodeBucketSpace(document::ByteBuffer& buf) const { + return decodeString(buf); +} + +} \ No newline at end of file diff --git a/documentapi/src/vespa/documentapi/messagebus/routablefactories60.h b/documentapi/src/vespa/documentapi/messagebus/routablefactories60.h new file mode 100644 index 00000000000..22b9e0f3307 --- /dev/null +++ b/documentapi/src/vespa/documentapi/messagebus/routablefactories60.h @@ -0,0 +1,25 @@ +// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +#pragma once + +#include "routablefactories52.h" + +namespace documentapi { +/** + * This class encapsulates all the {@link RoutableFactory} classes needed to implement factories for the document + * routable. When adding new factories to this class, please KEEP THE THEM ORDERED alphabetically like they are now. + */ +class RoutableFactories60 : public RoutableFactories52 { +public: + RoutableFactories60() = delete; + + class CreateVisitorMessageFactory : public RoutableFactories52::CreateVisitorMessageFactory { + bool encodeBucketSpace(vespalib::stringref bucketSpace, vespalib::GrowableByteBuffer& buf) const override; + string decodeBucketSpace(document::ByteBuffer&) const override; + public: + CreateVisitorMessageFactory(const document::DocumentTypeRepo& r) + : RoutableFactories52::CreateVisitorMessageFactory(r) {} + }; + +}; + +} \ No newline at end of file -- cgit v1.2.3