From a773a60c694bd3e112b33d6ce300d419ad56ccc2 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Sun, 11 Jan 2015 20:56:32 +0100 Subject: Error handling for remove. --- common/storage.h | 2 ++ common/storage_lmdb.cpp | 16 +++++++++++++--- 2 files changed, 15 insertions(+), 3 deletions(-) (limited to 'common') diff --git a/common/storage.h b/common/storage.h index 075fcfd..04e3142 100644 --- a/common/storage.h +++ b/common/storage.h @@ -68,6 +68,8 @@ public: const std::function &resultHandler, const std::function &errorHandler); void remove(void const *keyData, uint keySize); + void remove(void const *keyData, uint keySize, + const std::function &errorHandler); static std::function basicErrorHandler(); qint64 diskUsage() const; diff --git a/common/storage_lmdb.cpp b/common/storage_lmdb.cpp index 7d06f96..13a6853 100644 --- a/common/storage_lmdb.cpp +++ b/common/storage_lmdb.cpp @@ -332,20 +332,29 @@ void Storage::scan(const char *keyData, uint keySize, } void Storage::remove(void const *keyData, uint keySize) +{ + remove(keyData, keySize, basicErrorHandler()); +} + +void Storage::remove(void const *keyData, uint keySize, const std::function &errorHandler) { if (!d->env) { + Error error(d->name.toStdString(), -1, "Not open"); + errorHandler(error); return; } if (d->mode == ReadOnly) { - std::cerr << "tried to write in read-only mode." << std::endl; + Error error(d->name.toStdString(), -3, "Tried to write in read-only mode"); + errorHandler(error); return; } const bool implicitTransaction = !d->transaction || d->readTransaction; if (implicitTransaction) { - // TODO: if this fails, still try the write below? if (!startTransaction()) { + Error error(d->name.toStdString(), -2, "Could not start transaction"); + errorHandler(error); return; } } @@ -357,7 +366,8 @@ void Storage::remove(void const *keyData, uint keySize) rc = mdb_del(d->transaction, d->dbi, &key, 0); if (rc) { - std::cerr << "mdb_del: " << rc << " " << mdb_strerror(rc) << std::endl; + Error error(d->name.toStdString(), -1, QString("Error on mdb_del: %1 %2").arg(rc).arg(mdb_strerror(rc)).toStdString()); + errorHandler(error); } if (implicitTransaction) { -- cgit v1.2.3