diff options
author | Tor Egge <Tor.Egge@yahooinc.com> | 2023-02-01 22:19:35 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-02-01 22:19:35 +0100 |
commit | 5d4c62ac6a6cc32c9c0893126c603d9428a5dab7 (patch) | |
tree | 8877be6972edca32247eefd1a712ca29770ae00e | |
parent | 514a9d3eb8756afdaf47b253f7f893c9047eebf8 (diff) | |
parent | 9f502a22ca42e3e9e143f24aae24e03ab82ea304 (diff) |
Merge pull request #25843 from vespa-engine/balder/deinline-storage
Deinline large destructors and clean up some code based on clion hints.
34 files changed, 186 insertions, 152 deletions
diff --git a/documentapi/src/tests/policies/testframe.h b/documentapi/src/tests/policies/testframe.h index 3b2af060a45..a609e4b5b5c 100644 --- a/documentapi/src/tests/policies/testframe.h +++ b/documentapi/src/tests/policies/testframe.h @@ -31,8 +31,8 @@ public: * * @param identity The identity to use for the server. */ - TestFrame(const std::shared_ptr<const document::DocumentTypeRepo> &repo, - const string &ident = "anonymous"); + explicit TestFrame(const std::shared_ptr<const document::DocumentTypeRepo> &repo, + const string &ident = "anonymous"); TestFrame &operator=(const TestFrame &) = delete; diff --git a/documentapi/src/vespa/documentapi/messagebus/messages/getbucketlistreply.cpp b/documentapi/src/vespa/documentapi/messagebus/messages/getbucketlistreply.cpp index cbac3e2c4d0..fb15b8b47ab 100644 --- a/documentapi/src/vespa/documentapi/messagebus/messages/getbucketlistreply.cpp +++ b/documentapi/src/vespa/documentapi/messagebus/messages/getbucketlistreply.cpp @@ -23,12 +23,12 @@ GetBucketListReply::BucketInfo::operator==(const GetBucketListReply::BucketInfo return _bucket == rhs._bucket && _bucketInformation == rhs._bucketInformation; } -GetBucketListReply::GetBucketListReply() : +GetBucketListReply::GetBucketListReply() noexcept : DocumentReply(DocumentProtocol::REPLY_GETBUCKETLIST), _buckets() -{ - // empty -} +{ } + +GetBucketListReply::~GetBucketListReply() = default; std::ostream & operator<<(std::ostream &out, const GetBucketListReply::BucketInfo &info) diff --git a/documentapi/src/vespa/documentapi/messagebus/messages/getbucketlistreply.h b/documentapi/src/vespa/documentapi/messagebus/messages/getbucketlistreply.h index 4b8b8179857..a78ef5c3a61 100644 --- a/documentapi/src/vespa/documentapi/messagebus/messages/getbucketlistreply.h +++ b/documentapi/src/vespa/documentapi/messagebus/messages/getbucketlistreply.h @@ -23,10 +23,8 @@ private: std::vector<BucketInfo> _buckets; public: - /** - * Constructs a new reply with no content. - */ - GetBucketListReply(); + GetBucketListReply() noexcept; + ~GetBucketListReply() override; /** * Returns the bucket state contained in this. @@ -40,9 +38,9 @@ public: * * @return The state object. */ - const std::vector<BucketInfo> &getBuckets() const { return _buckets; } + [[nodiscard]] const std::vector<BucketInfo> &getBuckets() const { return _buckets; } - string toString() const override { return "getbucketlistreply"; } + [[nodiscard]] string toString() const override { return "getbucketlistreply"; } }; std::ostream & operator<<(std::ostream &out, const GetBucketListReply::BucketInfo &info); diff --git a/documentapi/src/vespa/documentapi/messagebus/messages/queryresultmessage.cpp b/documentapi/src/vespa/documentapi/messagebus/messages/queryresultmessage.cpp index f79b552a89d..4948fd7bc4d 100644 --- a/documentapi/src/vespa/documentapi/messagebus/messages/queryresultmessage.cpp +++ b/documentapi/src/vespa/documentapi/messagebus/messages/queryresultmessage.cpp @@ -6,9 +6,9 @@ namespace documentapi { QueryResultMessage::QueryResultMessage() = default; -QueryResultMessage::QueryResultMessage(const vdslib::SearchResult & result, const vdslib::DocumentSummary & summary) : +QueryResultMessage::QueryResultMessage(vdslib::SearchResult && result, const vdslib::DocumentSummary & summary) : VisitorMessage(), - _searchResult(result), + _searchResult(std::move(result)), _summary(summary) {} @@ -17,7 +17,7 @@ QueryResultMessage::~QueryResultMessage() = default; DocumentReply::UP QueryResultMessage::doCreateReply() const { - return DocumentReply::UP(new VisitorReply(DocumentProtocol::REPLY_QUERYRESULT)); + return std::make_unique<VisitorReply>(DocumentProtocol::REPLY_QUERYRESULT); } uint32_t diff --git a/documentapi/src/vespa/documentapi/messagebus/messages/queryresultmessage.h b/documentapi/src/vespa/documentapi/messagebus/messages/queryresultmessage.h index 561fc909e86..eb839bdf21f 100644 --- a/documentapi/src/vespa/documentapi/messagebus/messages/queryresultmessage.h +++ b/documentapi/src/vespa/documentapi/messagebus/messages/queryresultmessage.h @@ -32,7 +32,7 @@ public: * * @param result The result to set. */ - QueryResultMessage(const vdslib::SearchResult & result, const vdslib::DocumentSummary & summary); + QueryResultMessage(vdslib::SearchResult && result, const vdslib::DocumentSummary & summary); uint32_t getApproxSize() const override; uint32_t getType() const override; diff --git a/documentapi/src/vespa/documentapi/messagebus/messages/searchresultmessage.cpp b/documentapi/src/vespa/documentapi/messagebus/messages/searchresultmessage.cpp index b71adec745a..8e25e70d749 100644 --- a/documentapi/src/vespa/documentapi/messagebus/messages/searchresultmessage.cpp +++ b/documentapi/src/vespa/documentapi/messagebus/messages/searchresultmessage.cpp @@ -13,9 +13,9 @@ SearchResultMessage::SearchResultMessage() : // empty } -SearchResultMessage::SearchResultMessage(const SearchResult &result) : +SearchResultMessage::SearchResultMessage(SearchResult &&result) : VisitorMessage(), - SearchResult(result) + SearchResult(std::move(result)) { // empty } @@ -23,7 +23,7 @@ SearchResultMessage::SearchResultMessage(const SearchResult &result) : DocumentReply::UP SearchResultMessage::doCreateReply() const { - return DocumentReply::UP(new VisitorReply(DocumentProtocol::REPLY_SEARCHRESULT)); + return std::make_unique<VisitorReply>(DocumentProtocol::REPLY_SEARCHRESULT); } uint32_t diff --git a/documentapi/src/vespa/documentapi/messagebus/messages/searchresultmessage.h b/documentapi/src/vespa/documentapi/messagebus/messages/searchresultmessage.h index a464aa6218b..d22f8197534 100644 --- a/documentapi/src/vespa/documentapi/messagebus/messages/searchresultmessage.h +++ b/documentapi/src/vespa/documentapi/messagebus/messages/searchresultmessage.h @@ -12,23 +12,11 @@ protected: DocumentReply::UP doCreateReply() const override; public: - /** - * Convenience typedefs. - */ using UP = std::unique_ptr<SearchResultMessage>; using SP = std::shared_ptr<SearchResultMessage>; - /** - * Constructs a new search result message for deserialization. - */ SearchResultMessage(); - - /** - * Constructs a new search result message for the given search result. - * - * @param result The result to set. - */ - SearchResultMessage(const vdslib::SearchResult &result); + SearchResultMessage(vdslib::SearchResult &&result); uint32_t getApproxSize() const override; uint32_t getType() const override; @@ -36,4 +24,3 @@ public: }; } - diff --git a/documentapi/src/vespa/documentapi/messagebus/messages/visitor.cpp b/documentapi/src/vespa/documentapi/messagebus/messages/visitor.cpp index 1717b687322..d7bca6cab7c 100644 --- a/documentapi/src/vespa/documentapi/messagebus/messages/visitor.cpp +++ b/documentapi/src/vespa/documentapi/messagebus/messages/visitor.cpp @@ -168,14 +168,12 @@ DocumentListMessage::Entry::serialize(vespalib::GrowableByteBuffer& buf) const buf.putByte(_removeEntry ? 1 : 0); } -DocumentListMessage::DocumentListMessage() = default; - -DocumentListMessage::DocumentListMessage(document::BucketId bid) : +DocumentListMessage::DocumentListMessage() noexcept = default; +DocumentListMessage::~DocumentListMessage() = default; +DocumentListMessage::DocumentListMessage(document::BucketId bid) noexcept : _bucketId(bid), _documents() -{ - // empty -} +{ } DocumentReply::UP DocumentListMessage::doCreateReply() const diff --git a/documentapi/src/vespa/documentapi/messagebus/messages/visitor.h b/documentapi/src/vespa/documentapi/messagebus/messages/visitor.h index 234c4ce1812..00667d006fe 100644 --- a/documentapi/src/vespa/documentapi/messagebus/messages/visitor.h +++ b/documentapi/src/vespa/documentapi/messagebus/messages/visitor.h @@ -265,8 +265,9 @@ protected: DocumentReply::UP doCreateReply() const override; public: - DocumentListMessage(); - DocumentListMessage(document::BucketId bid); + DocumentListMessage() noexcept; + DocumentListMessage(document::BucketId bid) noexcept; + ~DocumentListMessage() override; const document::BucketId& getBucketId() const { return _bucketId; }; void setBucketId(const document::BucketId& id) { _bucketId = id; }; diff --git a/messagebus/src/vespa/messagebus/iconfighandler.h b/messagebus/src/vespa/messagebus/iconfighandler.h index 91398629ca8..5cfd26b6440 100644 --- a/messagebus/src/vespa/messagebus/iconfighandler.h +++ b/messagebus/src/vespa/messagebus/iconfighandler.h @@ -15,7 +15,7 @@ class RoutingSpec; class IConfigHandler { public: - virtual ~IConfigHandler() {} + virtual ~IConfigHandler() = default; /** * This method will be invoked to initialize or change the routing diff --git a/messagebus/src/vespa/messagebus/network/rpcsendv2.cpp b/messagebus/src/vespa/messagebus/network/rpcsendv2.cpp index c211ff83110..18e29451a0d 100644 --- a/messagebus/src/vespa/messagebus/network/rpcsendv2.cpp +++ b/messagebus/src/vespa/messagebus/network/rpcsendv2.cpp @@ -88,11 +88,12 @@ namespace { class OutputBuf : public vespalib::Output { public: explicit OutputBuf(size_t estimatedSize) : _buf(estimatedSize) { } + ~OutputBuf() override; DataBuffer & getBuf() { return _buf; } private: vespalib::WritableMemory reserve(size_t bytes) override { _buf.ensureFree(bytes); - return vespalib::WritableMemory(_buf.getFree(), _buf.getFreeLen()); + return {_buf.getFree(), _buf.getFreeLen()}; } Output &commit(size_t bytes) override { _buf.moveFreeToData(bytes); @@ -100,6 +101,8 @@ private: } DataBuffer _buf; }; +OutputBuf::~OutputBuf() = default; + } void diff --git a/messagebus/src/vespa/messagebus/testlib/slobrok.cpp b/messagebus/src/vespa/messagebus/testlib/slobrok.cpp index bcf6f829605..889daf538a3 100644 --- a/messagebus/src/vespa/messagebus/testlib/slobrok.cpp +++ b/messagebus/src/vespa/messagebus/testlib/slobrok.cpp @@ -18,6 +18,7 @@ private: std::condition_variable _cond; public: explicit WaitTask(FNET_Scheduler *s) : FNET_Task(s), _done(false), _mon() {} + ~WaitTask() override; void wait() { std::unique_lock guard(_mon); while (!_done) { @@ -31,6 +32,8 @@ public: _cond.notify_one(); } }; + +WaitTask::~WaitTask() = default; } // namespace <unnamed> namespace mbus { diff --git a/messagebus/src/vespa/messagebus/testlib/testserver.cpp b/messagebus/src/vespa/messagebus/testlib/testserver.cpp index d289c372fda..4393dfccccc 100644 --- a/messagebus/src/vespa/messagebus/testlib/testserver.cpp +++ b/messagebus/src/vespa/messagebus/testlib/testserver.cpp @@ -13,6 +13,8 @@ VersionedRPCNetwork::VersionedRPCNetwork(const RPCNetworkParams ¶ms) : _version(vespalib::Vtag::currentVersion) {} +VersionedRPCNetwork::~VersionedRPCNetwork() = default; + void VersionedRPCNetwork::setVersion(const vespalib::Version &version) { diff --git a/messagebus/src/vespa/messagebus/testlib/testserver.h b/messagebus/src/vespa/messagebus/testlib/testserver.h index 1ea96c3e13f..f3f349e52b9 100644 --- a/messagebus/src/vespa/messagebus/testlib/testserver.h +++ b/messagebus/src/vespa/messagebus/testlib/testserver.h @@ -23,6 +23,7 @@ protected: public: VersionedRPCNetwork(const RPCNetworkParams ¶ms); + ~VersionedRPCNetwork() override; void setVersion(const vespalib::Version &version); }; diff --git a/storage/src/tests/distributor/CMakeLists.txt b/storage/src/tests/distributor/CMakeLists.txt index c8dde75c73d..c59b56eb68f 100644 --- a/storage/src/tests/distributor/CMakeLists.txt +++ b/storage/src/tests/distributor/CMakeLists.txt @@ -22,6 +22,7 @@ vespa_add_executable(storage_distributor_gtest_runner_app TEST gtest_runner.cpp idealstatemanagertest.cpp joinbuckettest.cpp + maintenancemocks.cpp maintenanceschedulertest.cpp mergelimitertest.cpp mergeoperationtest.cpp diff --git a/storage/src/tests/distributor/distributor_host_info_reporter_test.cpp b/storage/src/tests/distributor/distributor_host_info_reporter_test.cpp index a02e98a93b8..6dfab5abc21 100644 --- a/storage/src/tests/distributor/distributor_host_info_reporter_test.cpp +++ b/storage/src/tests/distributor/distributor_host_info_reporter_test.cpp @@ -21,14 +21,9 @@ using BucketSpacesStats = BucketSpacesStatsProvider::BucketSpacesStats; using namespace ::testing; struct DistributorHostInfoReporterTest : Test { - void verifyBucketSpaceStats(const vespalib::Slime& root, - uint16_t nodeIndex, - const vespalib::string& bucketSpaceName, - size_t bucketsTotal, - size_t bucketsPending); - void verifyBucketSpaceStats(const vespalib::Slime& root, - uint16_t nodeIndex, - const vespalib::string& bucketSpaceName); + static void verifyBucketSpaceStats(const vespalib::Slime& root, uint16_t nodeIndex, const vespalib::string& bucketSpaceName, + size_t bucketsTotal, size_t bucketsPending); + static void verifyBucketSpaceStats(const vespalib::Slime& root, uint16_t nodeIndex, const vespalib::string& bucketSpaceName); }; using ms = std::chrono::milliseconds; @@ -40,19 +35,26 @@ struct MockedMinReplicaProvider : MinReplicaProvider { MinReplicaStats minReplica; + ~MockedMinReplicaProvider() override; std::unordered_map<uint16_t, uint32_t> getMinReplica() const override { return minReplica; } }; +MockedMinReplicaProvider::~MockedMinReplicaProvider() = default; + + struct MockedBucketSpacesStatsProvider : public BucketSpacesStatsProvider { PerNodeBucketSpacesStats stats; + ~MockedBucketSpacesStatsProvider() override; PerNodeBucketSpacesStats getBucketSpacesStats() const override { return stats; } }; +MockedBucketSpacesStatsProvider::~MockedBucketSpacesStatsProvider() = default; + const vespalib::slime::Inspector& getNode(const vespalib::Slime& root, uint16_t nodeIndex) { diff --git a/storage/src/tests/distributor/maintenancemocks.cpp b/storage/src/tests/distributor/maintenancemocks.cpp new file mode 100644 index 00000000000..e942a3889c1 --- /dev/null +++ b/storage/src/tests/distributor/maintenancemocks.cpp @@ -0,0 +1,13 @@ +// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#include "maintenancemocks.h" + +namespace storage::distributor { + +MockOperationStarter::MockOperationStarter() noexcept + : _shouldStart(true) +{} + +MockOperationStarter::~MockOperationStarter() = default; + +} diff --git a/storage/src/tests/distributor/maintenancemocks.h b/storage/src/tests/distributor/maintenancemocks.h index 5bcd8f962a6..0698c5e096b 100644 --- a/storage/src/tests/distributor/maintenancemocks.h +++ b/storage/src/tests/distributor/maintenancemocks.h @@ -23,9 +23,7 @@ class MockMaintenancePriorityGenerator { stats.incMovingOut(1, makeBucketSpace()); stats.incCopyingIn(2, makeBucketSpace()); - return MaintenancePriorityAndType( - MaintenancePriority(MaintenancePriority::VERY_HIGH), - MaintenanceOperation::MERGE_BUCKET); + return { MaintenancePriority(MaintenancePriority::VERY_HIGH), MaintenanceOperation::MERGE_BUCKET }; } }; @@ -38,41 +36,41 @@ class MockOperation : public MaintenanceOperation bool _was_blocked; bool _was_throttled; public: - MockOperation(const document::Bucket &bucket) + explicit MockOperation(const document::Bucket &bucket) : _bucket(bucket), _shouldBlock(false), _was_blocked(false), _was_throttled(false) {} - std::string toString() const override { + [[nodiscard]] std::string toString() const override { return _bucket.toString(); } void onClose(DistributorStripeMessageSender&) override {} - const char* getName() const noexcept override { return "MockOperation"; } - const std::string& getDetailedReason() const override { + [[nodiscard]] const char* getName() const noexcept override { return "MockOperation"; } + [[nodiscard]] const std::string& getDetailedReason() const override { return _reason; } void onStart(DistributorStripeMessageSender&) override {} void onReceive(DistributorStripeMessageSender&, const std::shared_ptr<api::StorageReply>&) override {} void on_blocked() override { _was_blocked = true; } void on_throttled() override { _was_throttled = true; } - bool isBlocked(const DistributorStripeOperationContext&, const OperationSequencer&) const override { + [[nodiscard]] bool isBlocked(const DistributorStripeOperationContext&, const OperationSequencer&) const override { return _shouldBlock; } void setShouldBlock(bool shouldBlock) { _shouldBlock = shouldBlock; } - bool get_was_blocked() const noexcept { return _was_blocked; } - bool get_was_throttled() const noexcept { return _was_throttled; } + [[nodiscard]] bool get_was_blocked() const noexcept { return _was_blocked; } + [[nodiscard]] bool get_was_throttled() const noexcept { return _was_throttled; } }; class MockMaintenanceOperationGenerator : public MaintenanceOperationGenerator { public: - MaintenanceOperation::SP generate(const document::Bucket&bucket) const override { + [[nodiscard]] MaintenanceOperation::SP generate(const document::Bucket&bucket) const override { return std::make_shared<MockOperation>(bucket); } @@ -95,9 +93,8 @@ class MockOperationStarter std::vector<Operation::SP> _operations; bool _shouldStart; public: - MockOperationStarter() - : _shouldStart(true) - {} + MockOperationStarter() noexcept; + ~MockOperationStarter() override; bool start(const std::shared_ptr<Operation>& operation, Priority priority) override { @@ -130,7 +127,7 @@ public: _allow = allow; } - bool may_allow_operation_with_priority(OperationStarter::Priority) const noexcept override { + [[nodiscard]] bool may_allow_operation_with_priority(OperationStarter::Priority) const noexcept override { return _allow; } }; diff --git a/storage/src/tests/storageserver/service_layer_error_listener_test.cpp b/storage/src/tests/storageserver/service_layer_error_listener_test.cpp index 571bebd9c86..11ecc11f810 100644 --- a/storage/src/tests/storageserver/service_layer_error_listener_test.cpp +++ b/storage/src/tests/storageserver/service_layer_error_listener_test.cpp @@ -41,9 +41,11 @@ struct Fixture { TestShutdownListener shutdown_listener; ServiceLayerErrorListener error_listener{component, merge_throttler}; + Fixture(); ~Fixture(); }; +Fixture::Fixture() = default; Fixture::~Fixture() = default; } diff --git a/storage/src/tests/storageserver/statemanagertest.cpp b/storage/src/tests/storageserver/statemanagertest.cpp index d7fc04ebe8c..5764460f5bb 100644 --- a/storage/src/tests/storageserver/statemanagertest.cpp +++ b/storage/src/tests/storageserver/statemanagertest.cpp @@ -5,7 +5,6 @@ #include <vespa/storageapi/message/state.h> #include <vespa/vdslib/state/cluster_state_bundle.h> #include <vespa/vdslib/state/clusterstate.h> -#include <vespa/storage/frameworkimpl/component/storagecomponentregisterimpl.h> #include <vespa/storage/storageserver/statemanager.h> #include <tests/common/teststorageapp.h> #include <tests/common/testhelper.h> @@ -159,9 +158,8 @@ struct MyStateListener : public StateListener { lib::NodeState current; std::ostringstream ost; - MyStateListener(const NodeStateUpdater& upd) - : updater(upd), current(*updater.getReportedNodeState()) {} - ~MyStateListener() override = default; + MyStateListener(const NodeStateUpdater& upd); + ~MyStateListener() override; void handleNewState() noexcept override { ost << current << " -> "; @@ -169,6 +167,11 @@ struct MyStateListener : public StateListener { ost << current << "\n"; } }; + +MyStateListener::MyStateListener(const NodeStateUpdater& upd) + : updater(upd), current(*updater.getReportedNodeState()) +{} +MyStateListener::~MyStateListener() = default; } TEST_F(StateManagerTest, reported_node_state) { diff --git a/storage/src/tests/storageserver/statereportertest.cpp b/storage/src/tests/storageserver/statereportertest.cpp index d7c5bdbf6ea..47d70cf436e 100644 --- a/storage/src/tests/storageserver/statereportertest.cpp +++ b/storage/src/tests/storageserver/statereportertest.cpp @@ -42,10 +42,10 @@ struct StateReporterTest : Test { std::shared_ptr<FileStorMetrics> _filestorMetrics; StateReporterTest(); + ~StateReporterTest() override; void SetUp() override; void TearDown() override; - void runLoad(uint32_t count = 1); }; namespace { @@ -68,6 +68,8 @@ StateReporterTest::StateReporterTest() { } +StateReporterTest::~StateReporterTest() = default; + void StateReporterTest::SetUp() { _config = std::make_unique<vdstestlib::DirConfig>(getStandardConfig(true, "statereportertest")); assert(system(("rm -rf " + getRootFolder(*_config)).c_str()) == 0); diff --git a/storage/src/tests/visiting/visitortest.cpp b/storage/src/tests/visiting/visitortest.cpp index 7dc34bb4b6f..f3a538b7832 100644 --- a/storage/src/tests/visiting/visitortest.cpp +++ b/storage/src/tests/visiting/visitortest.cpp @@ -65,7 +65,8 @@ struct VisitorTest : Test { DummyStorageLink* _bottom; VisitorManager* _manager; - VisitorTest() : _node() {} + VisitorTest(); + ~VisitorTest() override; // Not using setUp since can't throw exception out of it. void initializeTest(const TestParams& params = TestParams()); @@ -138,6 +139,9 @@ protected: uint32_t VisitorTest::docCount = 10; +VisitorTest::VisitorTest() = default; +VisitorTest::~VisitorTest() = default; + void VisitorTest::initializeTest(const TestParams& params) { @@ -157,18 +161,16 @@ VisitorTest::initializeTest(const TestParams& params) std::filesystem::create_directories(std::filesystem::path(vespalib::make_string("%s/disks/d0", rootFolder.c_str()))); std::filesystem::create_directories(std::filesystem::path(vespalib::make_string("%s/disks/d1", rootFolder.c_str()))); - _messageSessionFactory.reset( - new TestVisitorMessageSessionFactory(config.getConfigId())); + _messageSessionFactory = std::make_unique<TestVisitorMessageSessionFactory>(config.getConfigId()); if (params._autoReplyError.getCode() != mbus::ErrorCode::NONE) { _messageSessionFactory->_autoReplyError = params._autoReplyError; _messageSessionFactory->_createAutoReplyVisitorSessions = true; } - _node.reset(new TestServiceLayerApp(config.getConfigId())); - _top.reset(new DummyStorageLink()); + _node = std::make_unique<TestServiceLayerApp>(config.getConfigId()); + _top = std::make_unique<DummyStorageLink>(); _top->push_back(std::unique_ptr<StorageLink>(_manager - = new VisitorManager( - config::ConfigUri(config.getConfigId()), - _node->getComponentRegister(), *_messageSessionFactory))); + = new VisitorManager(config::ConfigUri(config.getConfigId()), + _node->getComponentRegister(), *_messageSessionFactory))); _bottom = new DummyStorageLink(); _top->push_back(std::unique_ptr<StorageLink>(_bottom)); _manager->setTimeBetweenTicks(10); @@ -296,13 +298,13 @@ VisitorTest::getMessagesAndReply( switch (msg->getType()) { case documentapi::DocumentProtocol::MESSAGE_PUTDOCUMENT: - docs.push_back(static_cast<documentapi::PutDocumentMessage&>(*msg).getDocumentSP()); + docs.push_back(dynamic_cast<documentapi::PutDocumentMessage&>(*msg).getDocumentSP()); break; case documentapi::DocumentProtocol::MESSAGE_REMOVEDOCUMENT: - docIds.push_back(static_cast<documentapi::RemoveDocumentMessage&>(*msg).getDocumentId()); + docIds.push_back(dynamic_cast<documentapi::RemoveDocumentMessage&>(*msg).getDocumentId()); break; case documentapi::DocumentProtocol::MESSAGE_VISITORINFO: - infoMessages.push_back(static_cast<documentapi::VisitorInfoMessage&>(*msg).getErrorMessage()); + infoMessages.push_back(dynamic_cast<documentapi::VisitorInfoMessage&>(*msg).getErrorMessage()); break; default: break; @@ -357,10 +359,10 @@ VisitorTest::verifyCreateVisitorReply( uint32_t VisitorTest::getMatchingDocuments(std::vector<Document::SP >& docs) { uint32_t equalCount = 0; - for (uint32_t i=0; i<docs.size(); ++i) { - for (uint32_t j=0; j<_documents.size(); ++j) { - if (*docs[i] == *_documents[j] && - docs[i]->getId() == _documents[j]->getId()) + for (auto & doc : docs) { + for (auto & _document : _documents) { + if (*doc == *_document && + doc->getId() == _document->getId()) { equalCount++; } diff --git a/storage/src/vespa/storage/distributor/ideal_service_layer_nodes_bundle.cpp b/storage/src/vespa/storage/distributor/ideal_service_layer_nodes_bundle.cpp index 315b7f3dd52..0d37219356e 100644 --- a/storage/src/vespa/storage/distributor/ideal_service_layer_nodes_bundle.cpp +++ b/storage/src/vespa/storage/distributor/ideal_service_layer_nodes_bundle.cpp @@ -12,6 +12,8 @@ IdealServiceLayerNodesBundle::IdealServiceLayerNodesBundle() noexcept { } +IdealServiceLayerNodesBundle::IdealServiceLayerNodesBundle(IdealServiceLayerNodesBundle &&) noexcept = default; + IdealServiceLayerNodesBundle::~IdealServiceLayerNodesBundle() = default; } diff --git a/storage/src/vespa/storage/distributor/ideal_service_layer_nodes_bundle.h b/storage/src/vespa/storage/distributor/ideal_service_layer_nodes_bundle.h index f98c4699eef..929ec7aadc1 100644 --- a/storage/src/vespa/storage/distributor/ideal_service_layer_nodes_bundle.h +++ b/storage/src/vespa/storage/distributor/ideal_service_layer_nodes_bundle.h @@ -15,6 +15,7 @@ class IdealServiceLayerNodesBundle { std::vector<uint16_t> _available_nonretired_or_maintenance_nodes; public: IdealServiceLayerNodesBundle() noexcept; + IdealServiceLayerNodesBundle(IdealServiceLayerNodesBundle &&) noexcept; ~IdealServiceLayerNodesBundle(); void set_available_nodes(std::vector<uint16_t> available_nodes) { diff --git a/storage/src/vespa/storage/frameworkimpl/status/statuswebserver.cpp b/storage/src/vespa/storage/frameworkimpl/status/statuswebserver.cpp index 40738ccb60f..4d7c9dceb12 100644 --- a/storage/src/vespa/storage/frameworkimpl/status/statuswebserver.cpp +++ b/storage/src/vespa/storage/frameworkimpl/status/statuswebserver.cpp @@ -128,18 +128,24 @@ StatusWebServer::WebServer::handle_get(vespalib::Portal::GetRequest request) } namespace { - class IndexPageReporter : public framework::HtmlStatusReporter { - std::ostringstream ost; - void reportHtmlStatus(std::ostream& out,const framework::HttpUrlPath&) const override { - out << ost.str(); - } - public: - IndexPageReporter() : framework::HtmlStatusReporter("", "Index page") {} +class IndexPageReporter : public framework::HtmlStatusReporter { + std::ostringstream ost; + void reportHtmlStatus(std::ostream& out,const framework::HttpUrlPath&) const override { + out << ost.str(); + } + +public: + IndexPageReporter(); + ~IndexPageReporter() override; + + template<typename T> + IndexPageReporter& operator<<(const T& t) { ost << t; return *this; } +}; + +IndexPageReporter::IndexPageReporter() : framework::HtmlStatusReporter("", "Index page") {} +IndexPageReporter::~IndexPageReporter() = default; - template<typename T> - IndexPageReporter& operator<<(const T& t) { ost << t; return *this; } - }; } diff --git a/storage/src/vespa/storage/persistence/provider_error_wrapper.cpp b/storage/src/vespa/storage/persistence/provider_error_wrapper.cpp index 9e55c0f9088..48345ff09bd 100644 --- a/storage/src/vespa/storage/persistence/provider_error_wrapper.cpp +++ b/storage/src/vespa/storage/persistence/provider_error_wrapper.cpp @@ -14,6 +14,12 @@ ProviderErrorWrapper::checkResult(ResultType&& result) const return std::forward<ResultType>(result); } +ProviderErrorWrapper::ProviderErrorWrapper(spi::PersistenceProvider& impl) noexcept + : _impl(impl), + _mutex() +{ } +ProviderErrorWrapper::~ProviderErrorWrapper() = default; + void ProviderErrorWrapper::handle(const spi::Result & result) const { if (result.getErrorCode() == spi::Result::ErrorType::FATAL_ERROR) { diff --git a/storage/src/vespa/storage/persistence/provider_error_wrapper.h b/storage/src/vespa/storage/persistence/provider_error_wrapper.h index 82447fe4549..da32cbb4270 100644 --- a/storage/src/vespa/storage/persistence/provider_error_wrapper.h +++ b/storage/src/vespa/storage/persistence/provider_error_wrapper.h @@ -32,11 +32,8 @@ public: class ProviderErrorWrapper : public spi::PersistenceProvider, public spi::ResultHandler { public: - explicit ProviderErrorWrapper(spi::PersistenceProvider& impl) - : _impl(impl), - _mutex() - { - } + explicit ProviderErrorWrapper(spi::PersistenceProvider& impl) noexcept; + ~ProviderErrorWrapper() override; spi::Result initialize() override; spi::BucketIdListResult listBuckets(BucketSpace bucketSpace) const override; diff --git a/storage/src/vespa/storage/storageserver/configurable_bucket_resolver.cpp b/storage/src/vespa/storage/storageserver/configurable_bucket_resolver.cpp index 2e10a7c4836..fd01210ae9e 100644 --- a/storage/src/vespa/storage/storageserver/configurable_bucket_resolver.cpp +++ b/storage/src/vespa/storage/storageserver/configurable_bucket_resolver.cpp @@ -9,6 +9,11 @@ using namespace document; namespace storage { +ConfigurableBucketResolver::ConfigurableBucketResolver(BucketSpaceMapping type_to_space) noexcept + : _type_to_space(std::move(type_to_space)) +{} +ConfigurableBucketResolver::~ConfigurableBucketResolver() = default; + document::Bucket ConfigurableBucketResolver::bucketFromId(const DocumentId& id) const { if (!id.hasDocType()) { // Legacy document ids without document type maps to default bucket space diff --git a/storage/src/vespa/storage/storageserver/configurable_bucket_resolver.h b/storage/src/vespa/storage/storageserver/configurable_bucket_resolver.h index 995e253f22c..5088b1f15b1 100644 --- a/storage/src/vespa/storage/storageserver/configurable_bucket_resolver.h +++ b/storage/src/vespa/storage/storageserver/configurable_bucket_resolver.h @@ -21,9 +21,8 @@ public: using BucketSpaceMapping = std::unordered_map<vespalib::string, document::BucketSpace, vespalib::hash<vespalib::string>>; const BucketSpaceMapping _type_to_space; public: - explicit ConfigurableBucketResolver(BucketSpaceMapping type_to_space) noexcept - : _type_to_space(std::move(type_to_space)) - {} + explicit ConfigurableBucketResolver(BucketSpaceMapping type_to_space) noexcept; + ~ConfigurableBucketResolver() override; document::Bucket bucketFromId(const document::DocumentId&) const override; document::BucketSpace bucketSpaceFromName(const vespalib::string& name) const override; diff --git a/storage/src/vespa/storage/storageserver/documentapiconverter.cpp b/storage/src/vespa/storage/storageserver/documentapiconverter.cpp index 9a5fb2bdd13..9ae6aaf0653 100644 --- a/storage/src/vespa/storage/storageserver/documentapiconverter.cpp +++ b/storage/src/vespa/storage/storageserver/documentapiconverter.cpp @@ -42,7 +42,7 @@ DocumentApiConverter::toStorageAPI(documentapi::DocumentMessage& fromMsg) switch (fromMsg.getType()) { case DocumentProtocol::MESSAGE_PUTDOCUMENT: { - documentapi::PutDocumentMessage& from(static_cast<documentapi::PutDocumentMessage&>(fromMsg)); + auto & from(static_cast<documentapi::PutDocumentMessage&>(fromMsg)); document::Bucket bucket = bucketResolver()->bucketFromId(from.getDocument().getId()); auto to = std::make_unique<api::PutCommand>(bucket, from.stealDocument(), from.getTimestamp()); to->setCondition(from.getCondition()); @@ -51,7 +51,7 @@ DocumentApiConverter::toStorageAPI(documentapi::DocumentMessage& fromMsg) } case DocumentProtocol::MESSAGE_UPDATEDOCUMENT: { - documentapi::UpdateDocumentMessage& from(static_cast<documentapi::UpdateDocumentMessage&>(fromMsg)); + auto & from(static_cast<documentapi::UpdateDocumentMessage&>(fromMsg)); document::Bucket bucket = bucketResolver()->bucketFromId(from.getDocumentUpdate().getId()); auto to = std::make_unique<api::UpdateCommand>(bucket, from.stealDocumentUpdate(), from.getNewTimestamp()); to->setOldTimestamp(from.getOldTimestamp()); @@ -69,13 +69,13 @@ DocumentApiConverter::toStorageAPI(documentapi::DocumentMessage& fromMsg) } case DocumentProtocol::MESSAGE_GETDOCUMENT: { - documentapi::GetDocumentMessage& from(static_cast<documentapi::GetDocumentMessage&>(fromMsg)); + auto & from(static_cast<documentapi::GetDocumentMessage&>(fromMsg)); toMsg = std::make_unique<api::GetCommand>(bucketResolver()->bucketFromId(from.getDocumentId()), from.getDocumentId(), from.getFieldSet()); break; } case DocumentProtocol::MESSAGE_CREATEVISITOR: { - documentapi::CreateVisitorMessage& from(static_cast<documentapi::CreateVisitorMessage&>(fromMsg)); + auto & from(static_cast<documentapi::CreateVisitorMessage&>(fromMsg)); auto to = std::make_unique<api::CreateVisitorCommand>(bucketResolver()->bucketSpaceFromName(from.getBucketSpace()), from.getLibraryName(), from.getInstanceId(), from.getDocumentSelection()); @@ -97,28 +97,28 @@ DocumentApiConverter::toStorageAPI(documentapi::DocumentMessage& fromMsg) } case DocumentProtocol::MESSAGE_DESTROYVISITOR: { - documentapi::DestroyVisitorMessage& from(static_cast<documentapi::DestroyVisitorMessage&>(fromMsg)); + auto & from(static_cast<documentapi::DestroyVisitorMessage&>(fromMsg)); toMsg = std::make_unique<api::DestroyVisitorCommand>(from.getInstanceId()); break; } case DocumentProtocol::MESSAGE_STATBUCKET: { - documentapi::StatBucketMessage& from(static_cast<documentapi::StatBucketMessage&>(fromMsg)); + auto & from(static_cast<documentapi::StatBucketMessage&>(fromMsg)); document::Bucket bucket(bucketResolver()->bucketSpaceFromName(from.getBucketSpace()), from.getBucketId()); toMsg = std::make_unique<api::StatBucketCommand>(bucket, from.getDocumentSelection()); break; } case DocumentProtocol::MESSAGE_GETBUCKETLIST: { - documentapi::GetBucketListMessage& from(static_cast<documentapi::GetBucketListMessage&>(fromMsg)); + auto & from(static_cast<documentapi::GetBucketListMessage&>(fromMsg)); document::Bucket bucket(bucketResolver()->bucketSpaceFromName(from.getBucketSpace()), from.getBucketId()); toMsg = std::make_unique<api::GetBucketListCommand>(bucket); break; } case DocumentProtocol::MESSAGE_VISITORINFO: { - documentapi::VisitorInfoMessage& from(static_cast<documentapi::VisitorInfoMessage&>(fromMsg)); - api::VisitorInfoCommand::UP to(new api::VisitorInfoCommand); + auto & from(static_cast<documentapi::VisitorInfoMessage&>(fromMsg)); + auto to = std::make_unique<api::VisitorInfoCommand>(); for (uint32_t i = 0; i < from.getFinishedBuckets().size(); ++i) { to->setBucketCompleted(from.getFinishedBuckets()[i], 0); } @@ -130,7 +130,7 @@ DocumentApiConverter::toStorageAPI(documentapi::DocumentMessage& fromMsg) } case DocumentProtocol::MESSAGE_REMOVELOCATION: { - documentapi::RemoveLocationMessage& from(static_cast<documentapi::RemoveLocationMessage&>(fromMsg)); + auto & from(static_cast<documentapi::RemoveLocationMessage&>(fromMsg)); document::Bucket bucket(bucketResolver()->bucketSpaceFromName(from.getBucketSpace()), document::BucketId(0)); toMsg = std::make_unique<api::RemoveLocationCommand>(from.getDocumentSelection(), bucket); break; @@ -166,8 +166,8 @@ DocumentApiConverter::toStorageAPI(documentapi::DocumentReply& fromReply, switch (fromReply.getType()) { case documentapi::DocumentProtocol::REPLY_CREATEVISITOR: { - documentapi::CreateVisitorReply& fromRep(static_cast<documentapi::CreateVisitorReply&>(fromReply)); - const api::CreateVisitorCommand& fromCmd(static_cast<const api::CreateVisitorCommand&>(fromCommand)); + auto & fromRep(static_cast<documentapi::CreateVisitorReply&>(fromReply)); + const auto & fromCmd(static_cast<const api::CreateVisitorCommand&>(fromCommand)); api::CreateVisitorReply::UP to(new api::CreateVisitorReply(fromCmd)); to->setVisitorStatistics(fromRep.getVisitorStatistics()); @@ -176,8 +176,8 @@ DocumentApiConverter::toStorageAPI(documentapi::DocumentReply& fromReply, } case documentapi::DocumentProtocol::REPLY_STATBUCKET: { - documentapi::StatBucketReply& fromRep(static_cast<documentapi::StatBucketReply&>(fromReply)); - const api::StatBucketCommand& fromCmd(static_cast<const api::StatBucketCommand&>(fromCommand)); + auto & fromRep(static_cast<documentapi::StatBucketReply&>(fromReply)); + const auto & fromCmd(static_cast<const api::StatBucketCommand&>(fromCommand)); toMsg = std::make_unique<api::StatBucketReply>(fromCmd, fromRep.getResults()); break; @@ -204,16 +204,16 @@ DocumentApiConverter::toDocumentAPI(api::StorageCommand& fromMsg) switch (fromMsg.getType().getId()) { case api::MessageType::PUT_ID: { - api::PutCommand& from(static_cast<api::PutCommand&>(fromMsg)); - documentapi::PutDocumentMessage::UP to(new documentapi::PutDocumentMessage(from.getDocument())); + auto & from(static_cast<api::PutCommand&>(fromMsg)); + auto to = std::make_unique<documentapi::PutDocumentMessage>(from.getDocument()); to->setTimestamp(from.getTimestamp()); toMsg = std::move(to); break; } case api::MessageType::UPDATE_ID: { - api::UpdateCommand& from(static_cast<api::UpdateCommand&>(fromMsg)); - documentapi::UpdateDocumentMessage::UP to(new documentapi::UpdateDocumentMessage(from.getUpdate())); + auto & from(static_cast<api::UpdateCommand&>(fromMsg)); + auto to = std::make_unique<documentapi::UpdateDocumentMessage>(from.getUpdate()); to->setOldTimestamp(from.getOldTimestamp()); to->setNewTimestamp(from.getTimestamp()); toMsg = std::move(to); @@ -221,14 +221,14 @@ DocumentApiConverter::toDocumentAPI(api::StorageCommand& fromMsg) } case api::MessageType::REMOVE_ID: { - api::RemoveCommand& from(static_cast<api::RemoveCommand&>(fromMsg)); + auto & from(static_cast<api::RemoveCommand&>(fromMsg)); toMsg = std::make_unique<documentapi::RemoveDocumentMessage>(from.getDocumentId()); break; } case api::MessageType::VISITOR_INFO_ID: { - api::VisitorInfoCommand& from(static_cast<api::VisitorInfoCommand&>(fromMsg)); - documentapi::VisitorInfoMessage::UP to(new documentapi::VisitorInfoMessage); + auto & from(static_cast<api::VisitorInfoCommand&>(fromMsg)); + auto to = std::make_unique<documentapi::VisitorInfoMessage>(); for (uint32_t i = 0; i < from.getCompletedBucketsList().size(); ++i) { to->getFinishedBuckets().push_back(from.getCompletedBucketsList()[i].bucketId); @@ -239,25 +239,25 @@ DocumentApiConverter::toDocumentAPI(api::StorageCommand& fromMsg) } case api::MessageType::SEARCHRESULT_ID: { - api::SearchResultCommand& from(static_cast<api::SearchResultCommand&>(fromMsg)); - toMsg = std::make_unique<documentapi::SearchResultMessage>(from); + auto & from(static_cast<api::SearchResultCommand&>(fromMsg)); + toMsg = std::make_unique<documentapi::SearchResultMessage>(std::move(from)); break; } case api::MessageType::QUERYRESULT_ID: { - api::QueryResultCommand& from(static_cast<api::QueryResultCommand&>(fromMsg)); - toMsg = std::make_unique<documentapi::QueryResultMessage>(from.getSearchResult(), from.getDocumentSummary()); + auto & from(static_cast<api::QueryResultCommand&>(fromMsg)); + toMsg = std::make_unique<documentapi::QueryResultMessage>(std::move(from.getSearchResult()), from.getDocumentSummary()); break; } case api::MessageType::DOCUMENTSUMMARY_ID: { - api::DocumentSummaryCommand& from(static_cast<api::DocumentSummaryCommand&>(fromMsg)); + auto & from(static_cast<api::DocumentSummaryCommand&>(fromMsg)); toMsg = std::make_unique<documentapi::DocumentSummaryMessage>(from); break; } case api::MessageType::MAPVISITOR_ID: { - api::MapVisitorCommand& from(static_cast<api::MapVisitorCommand&>(fromMsg)); + auto & from(static_cast<api::MapVisitorCommand&>(fromMsg)); documentapi::MapVisitorMessage::UP to(new documentapi::MapVisitorMessage); to->getData() = from.getData(); toMsg = std::move(to); @@ -265,16 +265,15 @@ DocumentApiConverter::toDocumentAPI(api::StorageCommand& fromMsg) } case api::MessageType::EMPTYBUCKETS_ID: { - api::EmptyBucketsCommand& from(static_cast<api::EmptyBucketsCommand&>(fromMsg)); + auto & from(static_cast<api::EmptyBucketsCommand&>(fromMsg)); toMsg = std::make_unique<documentapi::EmptyBucketsMessage>(from.getBuckets()); break; } case api::MessageType::VISITOR_CREATE_ID: { - api::CreateVisitorCommand& from(static_cast<api::CreateVisitorCommand&>(fromMsg)); - documentapi::CreateVisitorMessage::UP to( - new documentapi::CreateVisitorMessage(from.getLibraryName(), from.getInstanceId(), - from.getControlDestination(), from.getDataDestination())); + auto & from(static_cast<api::CreateVisitorCommand&>(fromMsg)); + auto to = std::make_unique<documentapi::CreateVisitorMessage>(from.getLibraryName(), from.getInstanceId(), + from.getControlDestination(), from.getDataDestination()); to->setBucketSpace(bucketResolver()->nameFromBucketSpace(from.getBucketSpace())); to->setDocumentSelection(from.getDocumentSelection()); to->setMaximumPendingReplyCount(from.getMaximumPendingReplyCount()); @@ -291,15 +290,15 @@ DocumentApiConverter::toDocumentAPI(api::StorageCommand& fromMsg) } case api::MessageType::VISITOR_DESTROY_ID: { - api::DestroyVisitorCommand& from(static_cast<api::DestroyVisitorCommand&>(fromMsg)); - documentapi::DestroyVisitorMessage::UP to(new documentapi::DestroyVisitorMessage); + auto & from(static_cast<api::DestroyVisitorCommand&>(fromMsg)); + auto to = std::make_unique<documentapi::DestroyVisitorMessage>(); to->setInstanceId(from.getInstanceId()); toMsg = std::move(to); break; } case api::MessageType::STATBUCKET_ID: { - api::StatBucketCommand& from(static_cast<api::StatBucketCommand&>(fromMsg)); + auto & from(static_cast<api::StatBucketCommand&>(fromMsg)); auto statMsg = std::make_unique<documentapi::StatBucketMessage>(from.getBucket().getBucketId(), from.getDocumentSelection()); statMsg->setBucketSpace(bucketResolver()->nameFromBucketSpace(from.getBucket().getBucketSpace())); toMsg = std::move(statMsg); diff --git a/storage/src/vespa/storage/storageserver/rpc/slime_cluster_state_bundle_codec.cpp b/storage/src/vespa/storage/storageserver/rpc/slime_cluster_state_bundle_codec.cpp index 1c5b38967cc..8c994991b9b 100644 --- a/storage/src/vespa/storage/storageserver/rpc/slime_cluster_state_bundle_codec.cpp +++ b/storage/src/vespa/storage/storageserver/rpc/slime_cluster_state_bundle_codec.cpp @@ -26,11 +26,12 @@ namespace { class OutputBuf : public vespalib::Output { public: explicit OutputBuf(size_t estimatedSize) : _buf(estimatedSize) { } + ~OutputBuf() override; vespalib::DataBuffer & getBuf() { return _buf; } private: vespalib::WritableMemory reserve(size_t bytes) override { _buf.ensureFree(bytes); - return vespalib::WritableMemory(_buf.getFree(), _buf.getFreeLen()); + return {_buf.getFree(), _buf.getFreeLen()}; } Output &commit(size_t bytes) override { _buf.moveFreeToData(bytes); @@ -39,19 +40,21 @@ private: vespalib::DataBuffer _buf; }; +OutputBuf::~OutputBuf() = default; + vespalib::string serialize_state(const lib::ClusterState& state) { vespalib::asciistream as; state.serialize(as, false); return as.str(); } -static const Memory StatesField("states"); -static const Memory BaselineField("baseline"); -static const Memory SpacesField("spaces"); -static const Memory DeferredActivationField("deferred-activation"); -static const Memory FeedBlockField("feed-block"); -static const Memory BlockFeedInClusterField("block-feed-in-cluster"); -static const Memory DescriptionField("description"); +const Memory StatesField("states"); +const Memory BaselineField("baseline"); +const Memory SpacesField("spaces"); +const Memory DeferredActivationField("deferred-activation"); +const Memory FeedBlockField("feed-block"); +const Memory BlockFeedInClusterField("block-feed-in-cluster"); +const Memory DescriptionField("description"); } diff --git a/storage/src/vespa/storageapi/message/searchresult.h b/storage/src/vespa/storageapi/message/searchresult.h index 4795876102d..b12fa5e1613 100644 --- a/storage/src/vespa/storageapi/message/searchresult.h +++ b/storage/src/vespa/storageapi/message/searchresult.h @@ -4,8 +4,7 @@ #include "visitor.h" #include <vespa/vdslib/container/searchresult.h> -namespace storage { -namespace api { +namespace storage::api { /** * @class SearchResultCommand @@ -33,5 +32,4 @@ public: DECLARE_STORAGEREPLY(SearchResultReply, onSearchResultReply) }; -} // api -} // storage +} diff --git a/vdslib/src/vespa/vdslib/container/searchresult.cpp b/vdslib/src/vespa/vdslib/container/searchresult.cpp index 6989fbca8e0..3d7ae1631af 100644 --- a/vdslib/src/vespa/vdslib/container/searchresult.cpp +++ b/vdslib/src/vespa/vdslib/container/searchresult.cpp @@ -121,9 +121,11 @@ SearchResult::SearchResult(document::ByteBuffer & buf) : deserialize(buf); } +SearchResult::SearchResult(SearchResult &&) noexcept = default; SearchResult::~SearchResult() = default; -void SearchResult::deserialize(document::ByteBuffer & buf) +void +SearchResult::deserialize(document::ByteBuffer & buf) { int32_t tmp; buf.getIntNetwork(tmp); _totalHits = tmp; diff --git a/vdslib/src/vespa/vdslib/container/searchresult.h b/vdslib/src/vespa/vdslib/container/searchresult.h index 90fb282c8fd..2be2e5ee1c6 100644 --- a/vdslib/src/vespa/vdslib/container/searchresult.h +++ b/vdslib/src/vespa/vdslib/container/searchresult.h @@ -52,6 +52,7 @@ public: * @param buf A byte buffer that contains a serialized message. */ SearchResult(document::ByteBuffer & buf); + SearchResult(SearchResult &&) noexcept; ~SearchResult(); AggregatorList & getGroupingList() { return _groupingList; } |