|
|
@ -15,20 +15,6 @@ |
|
|
|
#include <memenv.h> |
|
|
|
#include <memenv.h> |
|
|
|
#include <stdint.h> |
|
|
|
#include <stdint.h> |
|
|
|
|
|
|
|
|
|
|
|
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) |
|
|
|
static leveldb::Options GetOptions(size_t nCacheSize) |
|
|
|
{ |
|
|
|
{ |
|
|
|
leveldb::Options options; |
|
|
|
leveldb::Options options; |
|
|
@ -61,13 +47,13 @@ CDBWrapper::CDBWrapper(const boost::filesystem::path& path, size_t nCacheSize, b |
|
|
|
if (fWipe) { |
|
|
|
if (fWipe) { |
|
|
|
LogPrintf("Wiping LevelDB in %s\n", path.string()); |
|
|
|
LogPrintf("Wiping LevelDB in %s\n", path.string()); |
|
|
|
leveldb::Status result = leveldb::DestroyDB(path.string(), options); |
|
|
|
leveldb::Status result = leveldb::DestroyDB(path.string(), options); |
|
|
|
HandleError(result); |
|
|
|
dbwrapper_private::HandleError(result); |
|
|
|
} |
|
|
|
} |
|
|
|
TryCreateDirectory(path); |
|
|
|
TryCreateDirectory(path); |
|
|
|
LogPrintf("Opening LevelDB in %s\n", path.string()); |
|
|
|
LogPrintf("Opening LevelDB in %s\n", path.string()); |
|
|
|
} |
|
|
|
} |
|
|
|
leveldb::Status status = leveldb::DB::Open(options, path.string(), &pdb); |
|
|
|
leveldb::Status status = leveldb::DB::Open(options, path.string(), &pdb); |
|
|
|
HandleError(status); |
|
|
|
dbwrapper_private::HandleError(status); |
|
|
|
LogPrintf("Opened LevelDB successfully\n"); |
|
|
|
LogPrintf("Opened LevelDB successfully\n"); |
|
|
|
|
|
|
|
|
|
|
|
// The base-case obfuscation key, which is a noop.
|
|
|
|
// The base-case obfuscation key, which is a noop.
|
|
|
@ -105,7 +91,7 @@ CDBWrapper::~CDBWrapper() |
|
|
|
bool CDBWrapper::WriteBatch(CDBBatch& batch, bool fSync) |
|
|
|
bool CDBWrapper::WriteBatch(CDBBatch& batch, bool fSync) |
|
|
|
{ |
|
|
|
{ |
|
|
|
leveldb::Status status = pdb->Write(fSync ? syncoptions : writeoptions, &batch.batch); |
|
|
|
leveldb::Status status = pdb->Write(fSync ? syncoptions : writeoptions, &batch.batch); |
|
|
|
HandleError(status); |
|
|
|
dbwrapper_private::HandleError(status); |
|
|
|
return true; |
|
|
|
return true; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -143,6 +129,20 @@ void CDBIterator::Next() { piter->Next(); } |
|
|
|
|
|
|
|
|
|
|
|
namespace dbwrapper_private { |
|
|
|
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"); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
const std::vector<unsigned char>& GetObfuscateKey(const CDBWrapper &w) |
|
|
|
const std::vector<unsigned char>& GetObfuscateKey(const CDBWrapper &w) |
|
|
|
{ |
|
|
|
{ |
|
|
|
return w.obfuscate_key; |
|
|
|
return w.obfuscate_key; |
|
|
|