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"); }
void HandleError(const leveldb::Status &status) noexcept(false) { if (status.ok()) return; LogPrintf("%s\n", status.ToString()); 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"); }
bool LevelDBDatabase::remove(const LevelDBSlice& key) { leveldb::WriteOptions writeOptions; writeOptions.sync = true; const leveldb::Status s = m_db->Delete(writeOptions, makeSlice(key)); if (s.ok()) return true; if (s.IsNotFound()) return false; LOG_ERROR("LevelDB remove failed: %s", s.ToString().c_str()); return false; }
bool LevelDBDatabase::get(const LevelDBSlice& key, Vector<char>& value) { std::string result; leveldb::ReadOptions readOptions; readOptions.verify_checksums = true; // FIXME: Disable this if the performance impact is too great. const leveldb::Status s = m_db->Get(readOptions, makeSlice(key), &result); if (s.ok()) { value = makeVector(result); return true; } if (s.IsNotFound()) return false; LOG_ERROR("LevelDB get failed: %s", s.ToString().c_str()); return false; }
extern ERL_NIF_TERM make_status_tuple(ErlNifEnv* env, leveldb::Status status){ const char* type; if(status.IsNotFound()){ type = "not_found"; } else if(status.IsCorruption()){ type = "corruption"; } else if(status.IsIOError()){ type = "io_error"; } else{ type = "unspecified"; } const char* stString = status.ToString().c_str(); return enif_make_tuple2(env, enif_make_atom(env, "error"), enif_make_atom(env, type)); }
static void histogramLevelDBError(const char* histogramName, const leveldb::Status& s) { ASSERT(!s.ok()); enum { LevelDBNotFound, LevelDBCorruption, LevelDBIOError, LevelDBOther, LevelDBMaxError }; int levelDBError = LevelDBOther; if (s.IsNotFound()) levelDBError = LevelDBNotFound; else if (s.IsCorruption()) levelDBError = LevelDBCorruption; else if (s.IsIOError()) levelDBError = LevelDBIOError; HistogramSupport::histogramEnumeration(histogramName, levelDBError, LevelDBMaxError); }
void LevelDB::checkDbError(leveldb::Status aStatus) throw(DbException) { if (aStatus.ok()) return; if (aStatus.IsNotFound()) return; string ret = Text::toUtf8(aStatus.ToString()); #ifdef _WIN32 if (aStatus.IsCorruption() || aStatus.IsIOError()) { if (ret.back() != '.') ret += "."; ret += " " + STRING_F(DB_ERROR_HINT, STRING(HASHING)); } #endif throw DbException(ret); }
bool LevelDBDatabase::safeGet(const LevelDBSlice& key, Vector<char>& value, bool& found, const LevelDBSnapshot* snapshot) { found = false; std::string result; leveldb::ReadOptions readOptions; readOptions.verify_checksums = true; // FIXME: Disable this if the performance impact is too great. readOptions.snapshot = snapshot ? snapshot->m_snapshot : 0; const leveldb::Status s = m_db->Get(readOptions, makeSlice(key), &result); if (s.ok()) { found = true; value.clear(); value.append(result.c_str(), result.length()); return true; } if (s.IsNotFound()) return true; LOG_ERROR("LevelDB get failed: %s", s.ToString().c_str()); return false; }