aboutsummaryrefslogtreecommitdiffstats
path: root/documentapi
diff options
context:
space:
mode:
authorTor Brede Vekterli <vekterli@oath.com>2018-01-26 15:35:25 +0000
committerGeir Storli <geirst@yahoo-inc.com>2018-02-01 13:30:41 +0000
commitb532e8ecd3d3d804980b762437d3700dc15d4e8f (patch)
treed9c0d50b6891c26848e502cd48f2fa1e7e3a4913 /documentapi
parent13815035a21bf50451322f9529ef7d6f67f2a844 (diff)
More work on StatBucket and GetBucketList codecs and tests
Diffstat (limited to 'documentapi')
-rw-r--r--documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/Messages60TestCase.java1
-rw-r--r--documentapi/src/tests/messages/messages60test.cpp39
-rw-r--r--documentapi/src/tests/messages/messages60test.h2
-rw-r--r--documentapi/src/vespa/documentapi/messagebus/documentprotocol.cpp2
-rw-r--r--documentapi/src/vespa/documentapi/messagebus/messages/getbucketlistmessage.cpp2
-rw-r--r--documentapi/src/vespa/documentapi/messagebus/messages/statbucketmessage.cpp4
-rw-r--r--documentapi/src/vespa/documentapi/messagebus/routablefactories50.cpp32
-rw-r--r--documentapi/src/vespa/documentapi/messagebus/routablefactories50.h4
-rw-r--r--documentapi/src/vespa/documentapi/messagebus/routablefactories60.cpp35
-rw-r--r--documentapi/src/vespa/documentapi/messagebus/routablefactories60.h18
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