diff options
Diffstat (limited to 'documentapi')
10 files changed, 131 insertions, 8 deletions
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 50e5ba0fe19..2335f4556fe 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 @@ -33,6 +33,7 @@ public class Messages60TestCase extends Messages52TestCase { // version 6.0. When adding tests to this list, please KEEP THEM ORDERED alphabetically like they are now. out.put(DocumentProtocol.MESSAGE_CREATEVISITOR, new Messages60TestCase.testCreateVisitorMessage()); + out.put(DocumentProtocol.MESSAGE_STATBUCKET, new Messages60TestCase.testStatBucketMessage()); } public class testCreateVisitorMessage implements RunnableTest { diff --git a/documentapi/src/tests/messages/messages60test.cpp b/documentapi/src/tests/messages/messages60test.cpp index d26f1ef319f..e553744452b 100644 --- a/documentapi/src/tests/messages/messages60test.cpp +++ b/documentapi/src/tests/messages/messages60test.cpp @@ -9,6 +9,8 @@ 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)); + putTest(DocumentProtocol::MESSAGE_STATBUCKET, TEST_METHOD(Messages60Test::testStatBucketMessage)); + putTest(DocumentProtocol::MESSAGE_GETBUCKETLIST, TEST_METHOD(Messages60Test::testGetBucketListMessage)); } // TODO code dupe with parent classes @@ -51,4 +53,41 @@ bool Messages60Test::testCreateVisitorMessage() { } } return true; +} + +bool Messages60Test::testStatBucketMessage() { + StatBucketMessage msg(document::BucketId(16, 123), "id.user=123"); + msg.setBucketSpace("andrei"); + + EXPECT_EQUAL(MESSAGE_BASE_LENGTH + 27u + serializedLength("andrei"), serialize("StatBucketMessage", msg)); + + for (uint32_t lang = 0; lang < NUM_LANGUAGES; ++lang) { + mbus::Routable::UP obj = deserialize("StatBucketMessage", DocumentProtocol::MESSAGE_STATBUCKET, lang); + if (EXPECT_TRUE(obj.get() != NULL)) { + StatBucketMessage &ref = static_cast<StatBucketMessage&>(*obj); + EXPECT_EQUAL(document::BucketId(16, 123), ref.getBucketId()); + EXPECT_EQUAL("id.user=123", ref.getDocumentSelection()); + EXPECT_EQUAL("andrei", ref.getBucketSpace()); + } + } + return true; +} + +bool Messages60Test::testGetBucketListMessage() { + GetBucketListMessage msg(document::BucketId(16, 123)); + msg.setLoadType(_loadTypes["foo"]); + msg.setBucketSpace("beartato"); + EXPECT_EQUAL(string("foo"), msg.getLoadType().getName()); + EXPECT_EQUAL(MESSAGE_BASE_LENGTH + 12u + serializedLength("beartato"), serialize("GetBucketListMessage", msg)); + + for (uint32_t lang = 0; lang < NUM_LANGUAGES; ++lang) { + mbus::Routable::UP obj = deserialize("GetBucketListMessage", DocumentProtocol::MESSAGE_GETBUCKETLIST, lang); + if (EXPECT_TRUE(obj.get() != NULL)) { + GetBucketListMessage &ref = static_cast<GetBucketListMessage&>(*obj); + EXPECT_EQUAL(string("foo"), ref.getLoadType().getName()); + EXPECT_EQUAL(document::BucketId(16, 123), ref.getBucketId()); + EXPECT_EQUAL("beartato", 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 index 5f36b9d3ace..c5ed2cc746c 100644 --- a/documentapi/src/tests/messages/messages60test.h +++ b/documentapi/src/tests/messages/messages60test.h @@ -10,4 +10,6 @@ protected: public: Messages60Test(); bool testCreateVisitorMessage(); + bool testStatBucketMessage(); + bool testGetBucketListMessage(); }; diff --git a/documentapi/src/vespa/documentapi/messagebus/documentprotocol.cpp b/documentapi/src/vespa/documentapi/messagebus/documentprotocol.cpp index 7d63a2cb4d8..dead78faa4b 100644 --- a/documentapi/src/vespa/documentapi/messagebus/documentprotocol.cpp +++ b/documentapi/src/vespa/documentapi/messagebus/documentprotocol.cpp @@ -108,6 +108,8 @@ DocumentProtocol::DocumentProtocol(const LoadTypeSet& loadTypes, // Add 6.x serialization (TODO finalize version) putRoutableFactory(MESSAGE_CREATEVISITOR, IRoutableFactory::SP(new RoutableFactories60::CreateVisitorMessageFactory(*_repo)), from6); + putRoutableFactory(MESSAGE_STATBUCKET, IRoutableFactory::SP(new RoutableFactories60::StatBucketMessageFactory()), from6); + putRoutableFactory(MESSAGE_GETBUCKETLIST, IRoutableFactory::SP(new RoutableFactories60::GetBucketListMessageFactory()), from6); } DocumentProtocol::~DocumentProtocol() = default; diff --git a/documentapi/src/vespa/documentapi/messagebus/messages/getbucketlistmessage.cpp b/documentapi/src/vespa/documentapi/messagebus/messages/getbucketlistmessage.cpp index 62747309c13..418d152d6bc 100644 --- a/documentapi/src/vespa/documentapi/messagebus/messages/getbucketlistmessage.cpp +++ b/documentapi/src/vespa/documentapi/messagebus/messages/getbucketlistmessage.cpp @@ -9,7 +9,7 @@ namespace documentapi { GetBucketListMessage::GetBucketListMessage(const document::BucketId &bucketId) : DocumentMessage(), _bucketId(bucketId), - _bucketSpace() + _bucketSpace("default") // TODO repo { } diff --git a/documentapi/src/vespa/documentapi/messagebus/messages/statbucketmessage.cpp b/documentapi/src/vespa/documentapi/messagebus/messages/statbucketmessage.cpp index 213cc7d9932..8c968ce46e6 100644 --- a/documentapi/src/vespa/documentapi/messagebus/messages/statbucketmessage.cpp +++ b/documentapi/src/vespa/documentapi/messagebus/messages/statbucketmessage.cpp @@ -9,14 +9,14 @@ StatBucketMessage::StatBucketMessage() : DocumentMessage(), _bucketId(document::BucketId()), _documentSelection(), - _bucketSpace() + _bucketSpace("default") // TODO repo {} StatBucketMessage::StatBucketMessage(document::BucketId bucketId, const string& documentSelection) : DocumentMessage(), _bucketId(bucketId), _documentSelection(documentSelection), - _bucketSpace() + _bucketSpace("default") // TODO repo {} StatBucketMessage::~StatBucketMessage() { diff --git a/documentapi/src/vespa/documentapi/messagebus/routablefactories50.cpp b/documentapi/src/vespa/documentapi/messagebus/routablefactories50.cpp index 4a022d8cabd..2530e9a5770 100644 --- a/documentapi/src/vespa/documentapi/messagebus/routablefactories50.cpp +++ b/documentapi/src/vespa/documentapi/messagebus/routablefactories50.cpp @@ -404,11 +404,24 @@ RoutableFactories50::EmptyBucketsReplyFactory::doEncode(const DocumentReply &obj return true; } +bool RoutableFactories50::GetBucketListMessageFactory::encodeBucketSpace( + vespalib::stringref bucketSpace, + vespalib::GrowableByteBuffer& buf) const { + (void) buf; + return (bucketSpace == "default"); // TODO used fixed repo here +} + +string RoutableFactories50::GetBucketListMessageFactory::decodeBucketSpace(document::ByteBuffer&) const { + return "default"; // TODO fixed bucket repo +} + DocumentMessage::UP RoutableFactories50::GetBucketListMessageFactory::doDecode(document::ByteBuffer &buf) const { document::BucketId bucketId(decodeLong(buf)); - return std::make_unique<GetBucketListMessage>(bucketId); + auto msg = std::make_unique<GetBucketListMessage>(bucketId); + msg->setBucketSpace(decodeBucketSpace(buf)); + return msg; } bool @@ -416,7 +429,7 @@ RoutableFactories50::GetBucketListMessageFactory::doEncode(const DocumentMessage { const GetBucketListMessage &msg = static_cast<const GetBucketListMessage&>(obj); buf.putLong(msg.getBucketId().getRawId()); - return true; + return encodeBucketSpace(msg.getBucketSpace(), buf); } DocumentReply::UP @@ -829,6 +842,17 @@ RoutableFactories50::QueryResultReplyFactory::doEncode(const DocumentReply &obj, return true; } +bool RoutableFactories50::StatBucketMessageFactory::encodeBucketSpace( + vespalib::stringref bucketSpace, + vespalib::GrowableByteBuffer& buf) const { + (void) buf; + return (bucketSpace == "default"); // TODO used fixed repo here +} + +string RoutableFactories50::StatBucketMessageFactory::decodeBucketSpace(document::ByteBuffer&) const { + return "default"; // TODO fixed bucket repo +} + DocumentMessage::UP RoutableFactories50::StatBucketMessageFactory::doDecode(document::ByteBuffer &buf) const { @@ -837,6 +861,7 @@ RoutableFactories50::StatBucketMessageFactory::doDecode(document::ByteBuffer &bu msg.setBucketId(document::BucketId(decodeLong(buf))); msg.setDocumentSelection(decodeString(buf)); + msg.setBucketSpace(decodeBucketSpace(buf)); return ret; } @@ -848,8 +873,7 @@ RoutableFactories50::StatBucketMessageFactory::doEncode(const DocumentMessage &o buf.putLong(msg.getBucketId().getRawId()); buf.putString(msg.getDocumentSelection()); - - return true; + return encodeBucketSpace(msg.getBucketSpace(), buf); } DocumentReply::UP diff --git a/documentapi/src/vespa/documentapi/messagebus/routablefactories50.h b/documentapi/src/vespa/documentapi/messagebus/routablefactories50.h index 102b7f16c43..4ca069f3f9a 100644 --- a/documentapi/src/vespa/documentapi/messagebus/routablefactories50.h +++ b/documentapi/src/vespa/documentapi/messagebus/routablefactories50.h @@ -234,6 +234,8 @@ public: bool doEncode(const DocumentReply &reply, vespalib::GrowableByteBuffer &buf) const override; }; class GetBucketListMessageFactory : public DocumentMessageFactory { + virtual bool encodeBucketSpace(vespalib::stringref bucketSpace, vespalib::GrowableByteBuffer& buf) const; + virtual string decodeBucketSpace(document::ByteBuffer&) const; protected: DocumentMessage::UP doDecode(document::ByteBuffer &buf) const override; bool doEncode(const DocumentMessage &msg, vespalib::GrowableByteBuffer &buf) const override; @@ -346,6 +348,8 @@ public: bool doEncode(const DocumentReply &reply, vespalib::GrowableByteBuffer &buf) const override; }; class StatBucketMessageFactory : public DocumentMessageFactory { + virtual bool encodeBucketSpace(vespalib::stringref bucketSpace, vespalib::GrowableByteBuffer& buf) const; + virtual string decodeBucketSpace(document::ByteBuffer&) const; protected: DocumentMessage::UP doDecode(document::ByteBuffer &buf) const override; bool doEncode(const DocumentMessage &msg, vespalib::GrowableByteBuffer &buf) const override; diff --git a/documentapi/src/vespa/documentapi/messagebus/routablefactories60.cpp b/documentapi/src/vespa/documentapi/messagebus/routablefactories60.cpp index 45a4a5195d1..5823cc6720e 100644 --- a/documentapi/src/vespa/documentapi/messagebus/routablefactories60.cpp +++ b/documentapi/src/vespa/documentapi/messagebus/routablefactories60.cpp @@ -4,14 +4,47 @@ namespace documentapi { +// TODO dedupe + bool RoutableFactories60::CreateVisitorMessageFactory::encodeBucketSpace( vespalib::stringref bucketSpace, vespalib::GrowableByteBuffer& buf) const { - buf.putString(bucketSpace); + doEncodeBucketSpace(bucketSpace, buf); return true; } string RoutableFactories60::CreateVisitorMessageFactory::decodeBucketSpace(document::ByteBuffer& buf) const { + return doDecodeBucketSpace(buf); +} + +bool RoutableFactories60::StatBucketMessageFactory::encodeBucketSpace( + vespalib::stringref bucketSpace, + vespalib::GrowableByteBuffer& buf) const { + doEncodeBucketSpace(bucketSpace, buf); + return true; +} + +string RoutableFactories60::StatBucketMessageFactory::decodeBucketSpace(document::ByteBuffer& buf) const { + return doDecodeBucketSpace(buf); +} + +bool RoutableFactories60::GetBucketListMessageFactory::encodeBucketSpace( + vespalib::stringref bucketSpace, + vespalib::GrowableByteBuffer& buf) const { + doEncodeBucketSpace(bucketSpace, buf); + return true; +} + +string RoutableFactories60::GetBucketListMessageFactory::decodeBucketSpace(document::ByteBuffer& buf) const { + return doDecodeBucketSpace(buf); +} + +void RoutableFactories60::doEncodeBucketSpace( + vespalib::stringref bucketSpace, + vespalib::GrowableByteBuffer& buf) { + buf.putString(bucketSpace); +} +string RoutableFactories60::doDecodeBucketSpace(document::ByteBuffer& buf) { return decodeString(buf); } diff --git a/documentapi/src/vespa/documentapi/messagebus/routablefactories60.h b/documentapi/src/vespa/documentapi/messagebus/routablefactories60.h index 22b9e0f3307..26a8f0cb6d5 100644 --- a/documentapi/src/vespa/documentapi/messagebus/routablefactories60.h +++ b/documentapi/src/vespa/documentapi/messagebus/routablefactories60.h @@ -12,6 +12,8 @@ class RoutableFactories60 : public RoutableFactories52 { public: RoutableFactories60() = delete; + // TODO dedupe bucket space codec code + class CreateVisitorMessageFactory : public RoutableFactories52::CreateVisitorMessageFactory { bool encodeBucketSpace(vespalib::stringref bucketSpace, vespalib::GrowableByteBuffer& buf) const override; string decodeBucketSpace(document::ByteBuffer&) const override; @@ -20,6 +22,22 @@ public: : RoutableFactories52::CreateVisitorMessageFactory(r) {} }; + class StatBucketMessageFactory : public RoutableFactories50::StatBucketMessageFactory { + bool encodeBucketSpace(vespalib::stringref bucketSpace, vespalib::GrowableByteBuffer& buf) const override; + string decodeBucketSpace(document::ByteBuffer&) const override; + public: + StatBucketMessageFactory() = default; + }; + + class GetBucketListMessageFactory : public RoutableFactories50::GetBucketListMessageFactory { + bool encodeBucketSpace(vespalib::stringref bucketSpace, vespalib::GrowableByteBuffer& buf) const override; + string decodeBucketSpace(document::ByteBuffer&) const override; + public: + GetBucketListMessageFactory() = default; + }; + + static void doEncodeBucketSpace(vespalib::stringref bucketSpace, vespalib::GrowableByteBuffer& buf); + static string doDecodeBucketSpace(document::ByteBuffer&); }; }
\ No newline at end of file |