From b0a7783dbc6c414cb5ece4970fd540f22d6890ef Mon Sep 17 00:00:00 2001 From: Richard Holland Date: Sun, 18 Aug 2024 20:32:35 +1000 Subject: [PATCH] add delete to snug --- src/ripple/nodestore/backend/snug.hpp | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/src/ripple/nodestore/backend/snug.hpp b/src/ripple/nodestore/backend/snug.hpp index 82595b11d..90c1eb6a4 100644 --- a/src/ripple/nodestore/backend/snug.hpp +++ b/src/ripple/nodestore/backend/snug.hpp @@ -287,9 +287,15 @@ private: uint8_t* start = data + offset; for (int i = 0; i < 256 * 1024; i += 1024) { - if (!IS_ENTRY(start + i, key) && !IS_ZERO_ENTRY(start + i)) + bool const found = IS_ENTRY(start + i, key); + if (!found && !IS_ZERO_ENTRY(start + i)) continue; + // special edge case: the key doesn't exist and they're trying to + // delete it + if (!found && len == 0) + return 0; + // read flags uint64_t flags = *((uint64_t*)(start + i + 32)); @@ -323,9 +329,17 @@ private: if (!new_big) flags = len; - /// write entry - WRITE_KEY(start + i, key, flags); - memcpy(start + i + 40, val, (len > 984 ? 984 : len)); + if (len == 0) + { + // deletion requests are written as zero keys + memset(start + i, 0, 1024); + } + else + { + /// write entry + WRITE_KEY(start + i, key, flags); + memcpy(start + i + 40, val, (len > 984 ? 984 : len)); + } // sort the bucket backwards so 0's appear at the end qsort(start, 256, 1024, compare_entries_reverse);