summaryrefslogtreecommitdiff
path: root/src/database-leveldb.cpp
diff options
context:
space:
mode:
authorsfan5 <sfan5@live.de>2014-06-25 07:25:33 +0200
committersfan5 <sfan5@live.de>2014-07-06 21:20:40 +0200
commitd020e0771d938e7ae12e082b5bd4f686e77f0bdb (patch)
tree577a5c40f2195e5cfe92deb6f70ed1f5f00c1410 /src/database-leveldb.cpp
parent9b44bbd0a6236019b0c4f32156baa513f9674431 (diff)
downloadminetest-d020e0771d938e7ae12e082b5bd4f686e77f0bdb.tar.gz
minetest-d020e0771d938e7ae12e082b5bd4f686e77f0bdb.tar.bz2
minetest-d020e0771d938e7ae12e082b5bd4f686e77f0bdb.zip
Improve error reporting in leveldb backend
Diffstat (limited to 'src/database-leveldb.cpp')
-rw-r--r--src/database-leveldb.cpp21
1 files changed, 13 insertions, 8 deletions
diff --git a/src/database-leveldb.cpp b/src/database-leveldb.cpp
index 0526b0b29..1b201fc1a 100644
--- a/src/database-leveldb.cpp
+++ b/src/database-leveldb.cpp
@@ -36,12 +36,17 @@ LevelDB databases
#include "settings.h"
#include "log.h"
+#define ENSURE_STATUS_OK(s) \
+ if (!s.ok()) { \
+ throw FileNotGoodException(std::string("LevelDB error: ") + s.ToString()); \
+ }
+
Database_LevelDB::Database_LevelDB(ServerMap *map, std::string savedir)
{
leveldb::Options options;
options.create_if_missing = true;
leveldb::Status status = leveldb::DB::Open(options, savedir + DIR_DELIM + "map.db", &m_database);
- assert(status.ok());
+ ENSURE_STATUS_OK(status);
srvmap = map;
}
@@ -81,7 +86,8 @@ void Database_LevelDB::saveBlock(MapBlock *block)
// Write block to database
std::string tmp = o.str();
- m_database->Put(leveldb::WriteOptions(), i64tos(getBlockAsInteger(p3d)), tmp);
+ leveldb::Status status = m_database->Put(leveldb::WriteOptions(), i64tos(getBlockAsInteger(p3d)), tmp);
+ ENSURE_STATUS_OK(status);
// We just wrote it to the disk so clear modified flag
block->resetModified();
@@ -92,9 +98,10 @@ MapBlock* Database_LevelDB::loadBlock(v3s16 blockpos)
v2s16 p2d(blockpos.X, blockpos.Z);
std::string datastr;
- leveldb::Status s = m_database->Get(leveldb::ReadOptions(),
+ leveldb::Status status = m_database->Get(leveldb::ReadOptions(),
i64tos(getBlockAsInteger(blockpos)), &datastr);
- if (datastr.length() == 0 && s.ok()) {
+ ENSURE_STATUS_OK(status);
+ if (datastr.length() == 0) {
errorstream << "Blank block data in database (datastr.length() == 0) ("
<< blockpos.X << "," << blockpos.Y << "," << blockpos.Z << ")" << std::endl;
@@ -105,9 +112,7 @@ MapBlock* Database_LevelDB::loadBlock(v3s16 blockpos)
throw SerializationError("Blank block data in database");
}
return NULL;
- }
-
- if (s.ok()) {
+ } else {
/*
Make sure sector is loaded
*/
@@ -176,7 +181,7 @@ void Database_LevelDB::listAllLoadableBlocks(std::list<v3s16> &dst)
for (it->SeekToFirst(); it->Valid(); it->Next()) {
dst.push_back(getIntegerAsBlock(stoi64(it->key().ToString())));
}
- assert(it->status().ok()); // Check for any errors found during the scan
+ ENSURE_STATUS_OK(it->status()); // Check for any errors found during the scan
delete it;
}