aboutsummaryrefslogtreecommitdiffstats
path: root/storageapi
diff options
context:
space:
mode:
authorGeir Storli <geirst@oath.com>2018-04-12 12:34:34 +0000
committerGeir Storli <geirst@oath.com>2018-04-12 12:37:02 +0000
commitdeb601c5218657774340ddc6290b927937e3d1f3 (patch)
treea7d715a260b439d3f24c05d998f70650a9978d33 /storageapi
parent09cef777222924cc70dd4270ba2bc7cfac396a00 (diff)
Set approx size of storage message based serialized size during decoding.
Diffstat (limited to 'storageapi')
-rw-r--r--storageapi/src/tests/mbusprot/storageprotocoltest.cpp16
-rw-r--r--storageapi/src/vespa/storageapi/mbusprot/storageprotocol.cpp6
2 files changed, 21 insertions, 1 deletions
diff --git a/storageapi/src/tests/mbusprot/storageprotocoltest.cpp b/storageapi/src/tests/mbusprot/storageprotocoltest.cpp
index b1abdeaf811..458941f9aac 100644
--- a/storageapi/src/tests/mbusprot/storageprotocoltest.cpp
+++ b/storageapi/src/tests/mbusprot/storageprotocoltest.cpp
@@ -105,6 +105,8 @@ struct StorageProtocolTest : public CppUnit::TestFixture {
void testCreateVisitorWithBucketSpace6_0();
void testRequestBucketInfoWithBucketSpace6_0();
+ void serialized_size_is_used_to_set_approx_size_of_storage_message();
+
CPPUNIT_TEST_SUITE(StorageProtocolTest);
// Enable to see string outputs of messages
@@ -146,6 +148,8 @@ struct StorageProtocolTest : public CppUnit::TestFixture {
CPPUNIT_TEST(testCreateVisitorWithBucketSpace6_0);
CPPUNIT_TEST(testRequestBucketInfoWithBucketSpace6_0);
+ CPPUNIT_TEST(serialized_size_is_used_to_set_approx_size_of_storage_message);
+
CPPUNIT_TEST_SUITE_END();
};
@@ -968,6 +972,18 @@ StorageProtocolTest::testRequestBucketInfoWithBucketSpace6_0()
}
void
+StorageProtocolTest::serialized_size_is_used_to_set_approx_size_of_storage_message()
+{
+ ScopedName test("serialized_size_is_used_to_set_approx_size_of_storage_message");
+
+ PutCommand::SP cmd(new PutCommand(_bucket, _testDoc, 14));
+ CPPUNIT_ASSERT_EQUAL(50u, cmd->getApproxByteSize());
+
+ PutCommand::SP cmd2(copyCommand(cmd, _version6_0));
+ CPPUNIT_ASSERT_EQUAL(181u, cmd2->getApproxByteSize());
+}
+
+void
StorageProtocolTest::testStringOutputs()
{
std::cerr << "\nNon verbose output:\n";
diff --git a/storageapi/src/vespa/storageapi/mbusprot/storageprotocol.cpp b/storageapi/src/vespa/storageapi/mbusprot/storageprotocol.cpp
index 678cd1747e7..c592fb48b11 100644
--- a/storageapi/src/vespa/storageapi/mbusprot/storageprotocol.cpp
+++ b/storageapi/src/vespa/storageapi/mbusprot/storageprotocol.cpp
@@ -154,7 +154,11 @@ decodeMessage(const ProtocolSerialization & serializer,
if (type.isReply()) {
return std::make_unique<StorageReply>(data, serializer);
} else {
- return mbus::Routable::UP(serializer.decodeCommand(data).release());
+ auto command = serializer.decodeCommand(data);
+ if (command && command->getInternalMessage()) {
+ command->getInternalMessage()->setApproxByteSize(data.size());
+ }
+ return mbus::Routable::UP(command.release());
}
}