diff options
| author | Gavin Andresen <[email protected]> | 2013-01-29 19:37:44 -0800 |
|---|---|---|
| committer | Gavin Andresen <[email protected]> | 2013-01-29 19:37:44 -0800 |
| commit | db3b4ade7ba8a91afaa649177d5f297f20eb40fd (patch) | |
| tree | 9a03e88480630844c8732379b2b7286313b1b901 /src/leveldb.cpp | |
| parent | Merge branch 'master' of github.com:bitcoin/bitcoin (diff) | |
| parent | Deal with LevelDB errors (diff) | |
| download | discoin-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.cpp | 16 |
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; } - |