Bug fix, DeltaTree was not updating numItems after erase / insert operations which only change the deleted flag of an existing equivalent entry.

This commit is contained in:
Steve Atherton 2020-02-20 22:20:27 -08:00
parent 0c7c815396
commit 986e533c8c
2 changed files with 8 additions and 0 deletions

View File

@ -370,6 +370,7 @@ public:
auto &d = n->raw->delta();
if(d.getDeleted()) {
d.setDeleted(false);
++tree->numItems;
return true;
}
else {
@ -504,6 +505,7 @@ public:
void erase() {
node->setDeleted(true);
--mirror->tree->numItems;
moveNext();
}

View File

@ -5699,21 +5699,27 @@ TEST_CASE("!/redwood/correctness/unit/deltaTree/RedwoodRecordRef") {
// Test delete/insert behavior for each item, making no net changes
printf("Testing seek/delete/insert for existing keys with random values\n");
ASSERT(tree->numItems == items.size());
for(auto rec : items) {
// Insert existing should fail
ASSERT(!r.insert(rec));
ASSERT(tree->numItems == items.size());
// Erase existing should succeed
ASSERT(r.erase(rec));
ASSERT(tree->numItems == items.size() - 1);
// Erase deleted should fail
ASSERT(!r.erase(rec));
ASSERT(tree->numItems == items.size() - 1);
// Insert deleted should succeed
ASSERT(r.insert(rec));
ASSERT(tree->numItems == items.size());
// Insert existing should fail
ASSERT(!r.insert(rec));
ASSERT(tree->numItems == items.size());
}
DeltaTree<RedwoodRecordRef>::Cursor fwd = r.getCursor();