diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2023-08-18 10:31:02 +0000 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2023-08-18 10:31:02 +0000 |
commit | 928d4b33f09baae4e0b2d1db491b4499d387809d (patch) | |
tree | 4d81251dcb228759d36e031c589c863ea24bea87 | |
parent | b8f821694760e8865878b2fd8ca46c75e36740c4 (diff) |
Move vectors, not copy
4 files changed, 36 insertions, 26 deletions
diff --git a/storage/src/tests/distributor/bucketdbmetricupdatertest.cpp b/storage/src/tests/distributor/bucketdbmetricupdatertest.cpp index 4d04e3ca51a..57a7fb529be 100644 --- a/storage/src/tests/distributor/bucketdbmetricupdatertest.cpp +++ b/storage/src/tests/distributor/bucketdbmetricupdatertest.cpp @@ -202,7 +202,7 @@ TEST_F(BucketDBMetricUpdaterTest, buckets_with_varying_trustedness) { { BucketInfo info(makeInfo(100, 200)); info.resetTrusted(); - BucketDatabase::Entry e(document::BucketId(16, 3), info); + BucketDatabase::Entry e(document::BucketId(16, 3), std::move(info)); metricUpdater.visit(e, 2); } metricUpdater.completeRound(false); @@ -233,7 +233,7 @@ TEST_F(BucketDBMetricUpdaterTest, pick_largest_copy_if_no_trusted) { // No trusted copies, so must pick second copy. BucketInfo info(makeInfo(100, 200)); info.resetTrusted(); - BucketDatabase::Entry e(document::BucketId(16, 2), info); + BucketDatabase::Entry e(document::BucketId(16, 2), std::move(info)); metricUpdater.visit(e, 2); metricUpdater.completeRound(false); metricUpdater.getLastCompleteStats().propagateMetrics(ims, dms); @@ -270,7 +270,7 @@ BucketDBMetricUpdaterTest::visitBucketWith2Copies1Trusted(BucketDBMetricUpdater& BucketInfo info; addNode(info, 0, 100); addNode(info, 1, 101); // Note different checksums => #trusted = 1 - BucketDatabase::Entry e(document::BucketId(16, 1), info); + BucketDatabase::Entry e(document::BucketId(16, 1), std::move(info)); metricUpdater.visit(e, 2); } @@ -281,18 +281,17 @@ BucketDBMetricUpdaterTest::visitBucketWith2CopiesBothTrusted(BucketDBMetricUpdat BucketInfo info; addNode(info, 0, 200); addNode(info, 2, 200); - BucketDatabase::Entry e(document::BucketId(16, 2), info); + BucketDatabase::Entry e(document::BucketId(16, 2), std::move(info)); metricUpdater.visit(e, 2); } // Single replica on node 2. void -BucketDBMetricUpdaterTest::visitBucketWith1Copy( - BucketDBMetricUpdater& metricUpdater) +BucketDBMetricUpdaterTest::visitBucketWith1Copy(BucketDBMetricUpdater& metricUpdater) { BucketInfo info; addNode(info, 2, 100); - BucketDatabase::Entry e(document::BucketId(16, 1), info); + BucketDatabase::Entry e(document::BucketId(16, 1), std::move(info)); metricUpdater.visit(e, 2); } diff --git a/storage/src/vespa/storage/bucketdb/bucketdatabase.h b/storage/src/vespa/storage/bucketdb/bucketdatabase.h index 4e0b727036a..d3fdce8f0d8 100644 --- a/storage/src/vespa/storage/bucketdb/bucketdatabase.h +++ b/storage/src/vespa/storage/bucketdb/bucketdatabase.h @@ -22,26 +22,29 @@ public: BucketInfoType _info; public: - EntryBase() : _bucketId(0) {} // Invalid entry - EntryBase(const document::BucketId& bId, const BucketInfoType& bucketInfo) - : _bucketId(bId), _info(bucketInfo) {} - EntryBase(const document::BucketId& bId, BucketInfoType&& bucketInfo) - : _bucketId(bId), _info(std::move(bucketInfo)) {} - explicit EntryBase(const document::BucketId& bId) : _bucketId(bId) {} - - bool operator==(const EntryBase& other) const { + EntryBase() noexcept : _bucketId(0), _info() {} // Invalid entry + EntryBase(const document::BucketId& bId, BucketInfoType&& bucketInfo) noexcept + : _bucketId(bId), + _info(std::move(bucketInfo)) + {} + explicit EntryBase(const document::BucketId& bId) noexcept : _bucketId(bId), _info() {} + EntryBase(EntryBase &&) noexcept = default; + EntryBase & operator=(EntryBase &&) noexcept = default; + EntryBase(const EntryBase &) = default; + EntryBase & operator=(const EntryBase &) = default; + bool operator==(const EntryBase& other) const noexcept { return (_bucketId == other._bucketId && _info == other._info); } - bool valid() const { return (_bucketId.getRawId() != 0); } + bool valid() const noexcept { return (_bucketId.getRawId() != 0); } std::string toString() const; - const document::BucketId& getBucketId() const { return _bucketId; } - const BucketInfoType& getBucketInfo() const { return _info; } - BucketInfoType& getBucketInfo() { return _info; } - BucketInfoType* operator->() { return &_info; } - const BucketInfoType* operator->() const { return &_info; } + const document::BucketId& getBucketId() const noexcept { return _bucketId; } + const BucketInfoType& getBucketInfo() const noexcept { return _info; } + BucketInfoType& getBucketInfo() noexcept { return _info; } + BucketInfoType* operator->() noexcept { return &_info; } + const BucketInfoType* operator->() const noexcept { return &_info; } - static EntryBase createInvalid() { + static EntryBase createInvalid() noexcept { return EntryBase(); } }; diff --git a/storage/src/vespa/storage/distributor/maintenance/maintenancescanner.h b/storage/src/vespa/storage/distributor/maintenance/maintenancescanner.h index e4ccb6d88ad..b894ec9a1cd 100644 --- a/storage/src/vespa/storage/distributor/maintenance/maintenancescanner.h +++ b/storage/src/vespa/storage/distributor/maintenance/maintenancescanner.h @@ -23,12 +23,20 @@ public: static ScanResult createDone() { return ScanResult(true); } static ScanResult createNotDone(document::BucketSpace bucketSpace, BucketDatabase::Entry entry) { - return ScanResult(bucketSpace, entry); + return ScanResult(bucketSpace, std::move(entry)); } private: - explicit ScanResult(bool done) : _done(done), _bucketSpace(document::BucketSpace::invalid()), _entry() {} - ScanResult(document::BucketSpace bucketSpace, const BucketDatabase::Entry& e) : _done(false), _bucketSpace(bucketSpace), _entry(e) {} + explicit ScanResult(bool done) noexcept + : _done(done), + _bucketSpace(document::BucketSpace::invalid()), + _entry() + {} + ScanResult(document::BucketSpace bucketSpace, BucketDatabase::Entry e) noexcept + : _done(false), + _bucketSpace(bucketSpace), + _entry(std::move(e)) + {} }; virtual ScanResult scanNext() = 0; diff --git a/storage/src/vespa/storage/distributor/maintenance/simplemaintenancescanner.cpp b/storage/src/vespa/storage/distributor/maintenance/simplemaintenancescanner.cpp index 86399c1b620..ab27f2d2e43 100644 --- a/storage/src/vespa/storage/distributor/maintenance/simplemaintenancescanner.cpp +++ b/storage/src/vespa/storage/distributor/maintenance/simplemaintenancescanner.cpp @@ -73,7 +73,7 @@ SimpleMaintenanceScanner::scanNext() countBucket(_bucketSpaceItr->first, entry.getBucketInfo()); prioritizeBucket(document::Bucket(_bucketSpaceItr->first, entry.getBucketId())); _bucketCursor = entry.getBucketId(); - return ScanResult::createNotDone(_bucketSpaceItr->first, entry); + return ScanResult::createNotDone(_bucketSpaceItr->first, std::move(entry)); } } |