diff options
author | Tor Brede Vekterli <vekterli@verizonmedia.com> | 2019-10-10 09:14:32 +0000 |
---|---|---|
committer | Tor Brede Vekterli <vekterli@verizonmedia.com> | 2019-10-10 10:40:57 +0000 |
commit | fd3346863f1f664b2f0dce4f9b0d4878d87e4de3 (patch) | |
tree | 4d02730311e05047173050e488cd9120f8df846f /storage | |
parent | 9c0b9c858723df9bb2e5ba19490d97b1aff8fa0d (diff) |
Don't recompute bucket key inside merge function
Diffstat (limited to 'storage')
-rw-r--r-- | storage/src/vespa/storage/distributor/bucketdbupdater.cpp | 11 |
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. |