summaryrefslogtreecommitdiffstats
path: root/storage
diff options
context:
space:
mode:
authorTor Brede Vekterli <vekterli@verizonmedia.com>2019-10-10 09:14:32 +0000
committerTor Brede Vekterli <vekterli@verizonmedia.com>2019-10-10 10:40:57 +0000
commitfd3346863f1f664b2f0dce4f9b0d4878d87e4de3 (patch)
tree4d02730311e05047173050e488cd9120f8df846f /storage
parent9c0b9c858723df9bb2e5ba19490d97b1aff8fa0d (diff)
Don't recompute bucket key inside merge function
Diffstat (limited to 'storage')
-rw-r--r--storage/src/vespa/storage/distributor/bucketdbupdater.cpp11
1 files changed, 8 insertions, 3 deletions
diff --git a/storage/src/vespa/storage/distributor/bucketdbupdater.cpp b/storage/src/vespa/storage/distributor/bucketdbupdater.cpp
index b6ee85d3543..35af71898e6 100644
--- a/storage/src/vespa/storage/distributor/bucketdbupdater.cpp
+++ b/storage/src/vespa/storage/distributor/bucketdbupdater.cpp
@@ -174,12 +174,17 @@ public:
{}
Result merge(BucketDatabase::Merger& m) override {
- const auto key = m.bucket_key();
- while (_current != _last && (_current->getBucketId().toKey() < key)) {
+ const uint64_t key_to_insert = m.bucket_key();
+ uint64_t key_at_cursor = 0;
+ while (_current != _last) {
+ key_at_cursor = _current->getBucketId().toKey();
+ if (key_at_cursor >= key_to_insert) {
+ break;
+ }
m.insert_before_current(*_current);
++_current;
}
- if (_current != _last && _current->getBucketId().toKey() == key) {
+ if ((_current != _last) && (key_at_cursor == key_to_insert)) {
// If we encounter a bucket that already exists, replace value wholesale.
// Don't try to cleverly merge replicas, as the values we currently hold
// in the read-only DB may be stale.