From 3923bcca7ced07c4a97c43ea69cbad90a504eb4e Mon Sep 17 00:00:00 2001 From: "Wladimir J. van der Laan" Date: Wed, 20 Apr 2016 11:48:57 +0200 Subject: [PATCH] dbwrapper: Move `HandleError` to `dbwrapper_private` HandleError is implementation-specific. --- src/dbwrapper.cpp | 38 ++++++++++++++++++++----------------- src/dbwrapper.h | 14 +++++++++++--- src/paymentdisclosuredb.cpp | 6 +++--- 3 files changed, 35 insertions(+), 23 deletions(-) diff --git a/src/dbwrapper.cpp b/src/dbwrapper.cpp index 91e9a9a2a..b34be5af7 100644 --- a/src/dbwrapper.cpp +++ b/src/dbwrapper.cpp @@ -14,20 +14,6 @@ #include #include -void HandleError(const leveldb::Status& status) -{ - if (status.ok()) - return; - LogPrintf("%s\n", status.ToString()); - if (status.IsCorruption()) - throw dbwrapper_error("Database corrupted"); - if (status.IsIOError()) - throw dbwrapper_error("Database I/O error"); - if (status.IsNotFound()) - throw dbwrapper_error("Database entry missing"); - throw dbwrapper_error("Unknown database error"); -} - static leveldb::Options GetOptions(size_t nCacheSize) { leveldb::Options options; @@ -60,13 +46,13 @@ CDBWrapper::CDBWrapper(const boost::filesystem::path& path, size_t nCacheSize, b if (fWipe) { LogPrintf("Wiping LevelDB in %s\n", path.string()); leveldb::Status result = leveldb::DestroyDB(path.string(), options); - HandleError(result); + dbwrapper_private::HandleError(result); } TryCreateDirectory(path); LogPrintf("Opening LevelDB in %s\n", path.string()); } leveldb::Status status = leveldb::DB::Open(options, path.string(), &pdb); - HandleError(status); + dbwrapper_private::HandleError(status); LogPrintf("Opened LevelDB successfully\n"); } @@ -85,7 +71,7 @@ CDBWrapper::~CDBWrapper() bool CDBWrapper::WriteBatch(CDBBatch& batch, bool fSync) { leveldb::Status status = pdb->Write(fSync ? syncoptions : writeoptions, &batch.batch); - HandleError(status); + dbwrapper_private::HandleError(status); return true; } @@ -100,3 +86,21 @@ CDBIterator::~CDBIterator() { delete piter; } bool CDBIterator::Valid() { return piter->Valid(); } void CDBIterator::SeekToFirst() { piter->SeekToFirst(); } void CDBIterator::Next() { piter->Next(); } + +namespace dbwrapper_private { + +void HandleError(const leveldb::Status& status) +{ + if (status.ok()) + return; + LogPrintf("%s\n", status.ToString()); + if (status.IsCorruption()) + throw dbwrapper_error("Database corrupted"); + if (status.IsIOError()) + throw dbwrapper_error("Database I/O error"); + if (status.IsNotFound()) + throw dbwrapper_error("Database entry missing"); + throw dbwrapper_error("Unknown database error"); +} + +}; diff --git a/src/dbwrapper.h b/src/dbwrapper.h index 5beaccbd0..ca5b108ff 100644 --- a/src/dbwrapper.h +++ b/src/dbwrapper.h @@ -22,9 +22,17 @@ public: dbwrapper_error(const std::string& msg) : std::runtime_error(msg) {} }; +class CDBWrapper; + +/** These should be considered an implementation detail of the specific database. + */ +namespace dbwrapper_private { + +/** Handle database error by throwing dbwrapper_error exception. + */ void HandleError(const leveldb::Status& status); -class CDBWrapper; +}; /** Batch of changes queued to be written to a CDBWrapper */ class CDBBatch @@ -179,7 +187,7 @@ public: if (status.IsNotFound()) return false; LogPrintf("LevelDB read failure: %s\n", status.ToString()); - HandleError(status); + dbwrapper_private::HandleError(status); } try { CDataStream ssValue(strValue.data(), strValue.data() + strValue.size(), SER_DISK, CLIENT_VERSION); @@ -212,7 +220,7 @@ public: if (status.IsNotFound()) return false; LogPrintf("LevelDB read failure: %s\n", status.ToString()); - HandleError(status); + dbwrapper_private::HandleError(status); } return true; } diff --git a/src/paymentdisclosuredb.cpp b/src/paymentdisclosuredb.cpp index 17302a167..1851e77ec 100644 --- a/src/paymentdisclosuredb.cpp +++ b/src/paymentdisclosuredb.cpp @@ -38,7 +38,7 @@ PaymentDisclosureDB::PaymentDisclosureDB(const boost::filesystem::path& dbPath) TryCreateDirectory(path); options.create_if_missing = true; leveldb::Status status = leveldb::DB::Open(options, path.string(), &db); - HandleError(status); // throws exception + dbwrapper_private::HandleError(status); // throws exception LogPrintf("PaymentDisclosure: Opened LevelDB successfully\n"); } @@ -62,7 +62,7 @@ bool PaymentDisclosureDB::Put(const PaymentDisclosureKey& key, const PaymentDisc leveldb::Slice slice(&ssValue[0], ssValue.size()); leveldb::Status status = db->Put(writeOptions, key.ToString(), slice); - HandleError(status); + dbwrapper_private::HandleError(status); return true; } @@ -80,7 +80,7 @@ bool PaymentDisclosureDB::Get(const PaymentDisclosureKey& key, PaymentDisclosure if (status.IsNotFound()) return false; LogPrintf("PaymentDisclosure: LevelDB read failure: %s\n", status.ToString()); - HandleError(status); + dbwrapper_private::HandleError(status); } try {