diff options
author | Tor Egge <Tor.Egge@broadpark.no> | 2020-10-27 15:16:03 +0100 |
---|---|---|
committer | Tor Egge <Tor.Egge@broadpark.no> | 2020-10-27 15:16:03 +0100 |
commit | 91eb5d5e3a8ab31803569e0e5d68ff1d217d3853 (patch) | |
tree | b5bea84db50e8e9e37a548564c99897f69b11b6f /storage | |
parent | 243a0602d6d7d6c6cf4ab759fe9f394631f2ba0c (diff) |
Add comments about per-reply masks.
Diffstat (limited to 'storage')
3 files changed, 16 insertions, 1 deletions
diff --git a/storage/src/tests/persistence/mergehandlertest.cpp b/storage/src/tests/persistence/mergehandlertest.cpp index a7f1ab5a58d..b3ec8816f1f 100644 --- a/storage/src/tests/persistence/mergehandlertest.cpp +++ b/storage/src/tests/persistence/mergehandlertest.cpp @@ -1303,8 +1303,12 @@ TEST_F(MergeHandlerTest, partially_filled_apply_bucket_diff_reply) EXPECT_EQ(2u, diff.size()); EXPECT_EQ(EntryCheck(20000u, 4u), diff[0]._entry); EXPECT_EQ(EntryCheck(20100u, 4u), diff[1]._entry); + /* + * Only fill first diff entry to simulate max chunk size being exceeded + * when filling diff entries on source node (node 3). + */ fill_entry(diff[0], *doc1, getEnv().getDocumentTypeRepo()); - diff[0]._entry._hasMask |= 2u; + diff[0]._entry._hasMask |= 2u; // Simulate diff entry having been applied on node 1. handler.handleApplyBucketDiffReply(*reply, messageKeeper()); LOG(debug, "handled first ApplyBucketDiffReply"); } diff --git a/storage/src/vespa/storage/persistence/filestorage/mergestatus.cpp b/storage/src/vespa/storage/persistence/filestorage/mergestatus.cpp index 9b4372c73fc..97d3da28abe 100644 --- a/storage/src/vespa/storage/persistence/filestorage/mergestatus.cpp +++ b/storage/src/vespa/storage/persistence/filestorage/mergestatus.cpp @@ -77,6 +77,10 @@ MergeStatus::MergeStatus(const framework::Clock& clock, const metrics::LoadType& MergeStatus::~MergeStatus() = default; +/* + * Note: hasMask parameter and _entry._hasMask in part vector are per-reply masks, + * based on the nodes returned in the ApplyBucketDiffReply. + */ bool MergeStatus::removeFromDiff( const std::vector<api::ApplyBucketDiffCommand::Entry>& part, @@ -124,6 +128,11 @@ MergeStatus::removeFromDiff( it = diff.erase(it); altered = true; } else { + /* + * Remap from per-reply mask for the ApplyBucketDiffReply to a + * per-merge-operation mask with same bit assignment as _hasMask in + * the diff vector. + */ uint16_t mask = remap_mask(it2->_entry._hasMask); if (mask != it->_hasMask) { // Hasmasks have changed, meaning bucket contents changed on diff --git a/storage/src/vespa/storage/persistence/filestorage/mergestatus.h b/storage/src/vespa/storage/persistence/filestorage/mergestatus.h index e122199c986..18ced81c280 100644 --- a/storage/src/vespa/storage/persistence/filestorage/mergestatus.h +++ b/storage/src/vespa/storage/persistence/filestorage/mergestatus.h @@ -32,6 +32,8 @@ public: ~MergeStatus(); /** + * Note: hasMask parameter and _entry._hasMask in part vector are per-reply masks, + * based on the nodes returned in ApplyBucketDiffReply. * @return true if any entries were removed from the internal diff * or the two diffs had entries with mismatching hasmasks, which * indicates that bucket contents have changed during the merge. |