aboutsummaryrefslogtreecommitdiff
path: root/src/leveldb.cpp
diff options
context:
space:
mode:
authorGavin Andresen <[email protected]>2013-01-29 19:37:44 -0800
committerGavin Andresen <[email protected]>2013-01-29 19:37:44 -0800
commitdb3b4ade7ba8a91afaa649177d5f297f20eb40fd (patch)
tree9a03e88480630844c8732379b2b7286313b1b901 /src/leveldb.cpp
parentMerge branch 'master' of github.com:bitcoin/bitcoin (diff)
parentDeal with LevelDB errors (diff)
downloaddiscoin-db3b4ade7ba8a91afaa649177d5f297f20eb40fd.tar.xz
discoin-db3b4ade7ba8a91afaa649177d5f297f20eb40fd.zip
Merge pull request #2224 from sipa/valstate
Improve error handling during validation
Diffstat (limited to 'src/leveldb.cpp')
-rw-r--r--src/leveldb.cpp16
1 files changed, 14 insertions, 2 deletions
diff --git a/src/leveldb.cpp b/src/leveldb.cpp
index 9e2f32a17..b41764f51 100644
--- a/src/leveldb.cpp
+++ b/src/leveldb.cpp
@@ -12,6 +12,18 @@
#include <boost/filesystem.hpp>
+void HandleError(const leveldb::Status &status) throw(leveldb_error) {
+ if (status.ok())
+ return;
+ if (status.IsCorruption())
+ throw leveldb_error("Database corrupted");
+ if (status.IsIOError())
+ throw leveldb_error("Database I/O error");
+ if (status.IsNotFound())
+ throw leveldb_error("Database entry missing");
+ throw leveldb_error("Unknown database error");
+}
+
static leveldb::Options GetOptions(size_t nCacheSize) {
leveldb::Options options;
options.block_cache = leveldb::NewLRUCache(nCacheSize / 2);
@@ -57,12 +69,12 @@ CLevelDB::~CLevelDB() {
options.env = NULL;
}
-bool CLevelDB::WriteBatch(CLevelDBBatch &batch, bool fSync) {
+bool CLevelDB::WriteBatch(CLevelDBBatch &batch, bool fSync) throw(leveldb_error) {
leveldb::Status status = pdb->Write(fSync ? syncoptions : writeoptions, &batch.batch);
if (!status.ok()) {
printf("LevelDB write failure: %s\n", status.ToString().c_str());
+ HandleError(status);
return false;
}
return true;
}
-