Skip to content

Commit

Permalink
Add DynamicMemoryUsage() to LevelDB
Browse files Browse the repository at this point in the history
This adds a DynamicMemoryUsage() method similar to the existing methods
of the same name, and adds logging of memory usage to
CDBWrapper::WriteBatch.

Cherry-picked from: 741f017
  • Loading branch information
eklitzke authored and xanimo committed Jul 23, 2024
1 parent 34f493e commit cd65208
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 0 deletions.
20 changes: 20 additions & 0 deletions src/dbwrapper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ static leveldb::Options GetOptions(size_t nCacheSize)
}

CDBWrapper::CDBWrapper(const fs::path& path, size_t nCacheSize, bool fMemory, bool fWipe, bool obfuscate)
: m_name(fs::basename(path))
{
penv = NULL;
readoptions.verify_checksums = true;
Expand Down Expand Up @@ -89,11 +90,30 @@ CDBWrapper::~CDBWrapper()

bool CDBWrapper::WriteBatch(CDBBatch& batch, bool fSync)
{
const bool log_memory = LogAcceptCategory("leveldb");
double mem_before = 0;
if (log_memory) {
mem_before = DynamicMemoryUsage() / 1024 / 1024;
}
leveldb::Status status = pdb->Write(fSync ? syncoptions : writeoptions, &batch.batch);
dbwrapper_private::HandleError(status);
if (log_memory) {
double mem_after = DynamicMemoryUsage() / 1024 / 1024;
LogPrint("leveldb", "WriteBatch memory usage: db=%s, before=%.1fMiB, after=%.1fMiB\n",
m_name, mem_before, mem_after);
}
return true;
}

size_t CDBWrapper::DynamicMemoryUsage() const {
std::string memory;
if (!pdb->GetProperty("leveldb.approximate-memory-usage", &memory)) {
LogPrint("leveldb", "Failed to get approximate-memory-usage property\n");
return 0;
}
return stoul(memory);
}

// Prefixed with null character to avoid collisions with other keys
//
// We must use a string constructor which specifies length so that we copy
Expand Down
6 changes: 6 additions & 0 deletions src/dbwrapper.h
Original file line number Diff line number Diff line change
Expand Up @@ -202,6 +202,9 @@ class CDBWrapper
//! the database itself
leveldb::DB* pdb;

//! the name of this database
std::string m_name;

//! a key used for optional XOR-obfuscation of the database
std::vector<unsigned char> obfuscate_key;

Expand Down Expand Up @@ -288,6 +291,9 @@ class CDBWrapper

bool WriteBatch(CDBBatch& batch, bool fSync = false);

// Get an estimate of LevelDB memory usage (in bytes).
size_t DynamicMemoryUsage() const;

// not available for LevelDB; provide for compatibility with BDB
bool Flush()
{
Expand Down

0 comments on commit cd65208

Please sign in to comment.