diff --git a/src/dbwrapper.cpp b/src/dbwrapper.cpp index b909ce75b5a..b74c645b8f9 100644 --- a/src/dbwrapper.cpp +++ b/src/dbwrapper.cpp @@ -152,6 +152,18 @@ void CDBBatch::WriteImpl(Span ssKey, CDataStream& ssValue) size_estimate += 3 + (slKey.size() > 127) + slKey.size() + (slValue.size() > 127) + slValue.size(); } +void CDBBatch::EraseImpl(Span ssKey) +{ + leveldb::Slice slKey(CharCast(ssKey.data()), ssKey.size()); + batch.Delete(slKey); + // LevelDB serializes erases as: + // - byte: header + // - varint: key length + // - byte[]: key + // The formula below assumes the key is less than 16kB. + size_estimate += 2 + (slKey.size() > 127) + slKey.size(); +} + CDBWrapper::CDBWrapper(const DBParams& params) : m_name{fs::PathToString(params.path.stem())}, m_path{params.path}, m_is_memory{params.memory_only} { diff --git a/src/dbwrapper.h b/src/dbwrapper.h index 81c75f651ec..61f5003db74 100644 --- a/src/dbwrapper.h +++ b/src/dbwrapper.h @@ -98,6 +98,7 @@ private: size_t size_estimate{0}; void WriteImpl(Span ssKey, CDataStream& ssValue); + void EraseImpl(Span ssKey); public: /** @@ -128,15 +129,7 @@ public: { ssKey.reserve(DBWRAPPER_PREALLOC_KEY_SIZE); ssKey << key; - leveldb::Slice slKey(CharCast(ssKey.data()), ssKey.size()); - - batch.Delete(slKey); - // LevelDB serializes erases as: - // - byte: header - // - varint: key length - // - byte[]: key - // The formula below assumes the key is less than 16kB. - size_estimate += 2 + (slKey.size() > 127) + slKey.size(); + EraseImpl(ssKey); ssKey.clear(); }