diff options
author | Geir Storli <geirst@oath.com> | 2018-04-12 12:34:34 +0000 |
---|---|---|
committer | Geir Storli <geirst@oath.com> | 2018-04-12 12:37:02 +0000 |
commit | deb601c5218657774340ddc6290b927937e3d1f3 (patch) | |
tree | a7d715a260b439d3f24c05d998f70650a9978d33 /storageapi | |
parent | 09cef777222924cc70dd4270ba2bc7cfac396a00 (diff) |
Set approx size of storage message based serialized size during decoding.
Diffstat (limited to 'storageapi')
-rw-r--r-- | storageapi/src/tests/mbusprot/storageprotocoltest.cpp | 16 | ||||
-rw-r--r-- | storageapi/src/vespa/storageapi/mbusprot/storageprotocol.cpp | 6 |
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()); } } |