mirror of
https://github.com/dragonflydb/dragonfly.git
synced 2025-05-11 02:15:45 +02:00
fix(server): update post updater iterator in tiering (#2497)
* fix(server): update post updater iterator in tiering Signed-off-by: adi_holden <adi@dragonflydb.io>
This commit is contained in:
parent
b2bdb0f683
commit
503891b1fa
4 changed files with 29 additions and 18 deletions
|
@ -328,7 +328,6 @@ void DbSlice::AutoUpdater::Run() {
|
|||
if (fields_.action == DestructorAction::kDoNothing) {
|
||||
return;
|
||||
}
|
||||
// TBD add logic to update iterator if needed as we can now preempt in cb
|
||||
|
||||
// Check that AutoUpdater does not run after a key was removed.
|
||||
// If this CHECK() failed for you, it probably means that you deleted a key while having an auto
|
||||
|
@ -336,17 +335,23 @@ void DbSlice::AutoUpdater::Run() {
|
|||
DCHECK(IsValid(fields_.db_slice->db_arr_[fields_.db_ind]->prime.Find(fields_.key)))
|
||||
<< "Key was removed before PostUpdate() - this is a bug!";
|
||||
|
||||
// Make sure that the DB has not changed in size since this object was created.
|
||||
// Adding or removing elements from the DB may invalidate iterators.
|
||||
CHECK_EQ(fields_.db_size, fields_.db_slice->DbSize(fields_.db_ind))
|
||||
<< "Attempting to run post-update after DB was modified";
|
||||
|
||||
CHECK_EQ(fields_.deletion_count, fields_.db_slice->deletion_count_)
|
||||
<< "Attempting to run post-update after a deletion was issued";
|
||||
|
||||
DCHECK(fields_.action == DestructorAction::kRun);
|
||||
CHECK_NE(fields_.db_slice, nullptr);
|
||||
|
||||
if (shard_set->IsTieringEnabled()) {
|
||||
// When triering is enabled we can preempt on write to disk, therefore it can be invalidated
|
||||
// until we run the post updated.
|
||||
fields_.it = fields_.db_slice->db_arr_[fields_.db_ind]->Launder(fields_.it, fields_.key);
|
||||
} else {
|
||||
// Make sure that the DB has not changed in size since this object was created.
|
||||
// Adding or removing elements from the DB may invalidate iterators.
|
||||
CHECK_EQ(fields_.db_size, fields_.db_slice->DbSize(fields_.db_ind))
|
||||
<< "Attempting to run post-update after DB was modified";
|
||||
|
||||
CHECK_EQ(fields_.deletion_count, fields_.db_slice->deletion_count_)
|
||||
<< "Attempting to run post-update after a deletion was issued";
|
||||
}
|
||||
|
||||
fields_.db_slice->PostUpdate(fields_.db_ind, fields_.it, fields_.key, fields_.orig_heap_size);
|
||||
Cancel(); // Reset to not run again
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue