From a5a61963afa3f14fae644c7512597b650c930d91 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Tue, 11 Aug 2015 23:50:31 +0200 Subject: Removed legacy API --- common/storage.h | 43 -------- common/storage_common.cpp | 13 --- common/storage_lmdb.cpp | 269 ---------------------------------------------- 3 files changed, 325 deletions(-) diff --git a/common/storage.h b/common/storage.h index fb44c1c..9fe4e99 100644 --- a/common/storage.h +++ b/common/storage.h @@ -107,49 +107,6 @@ public: Transaction createTransaction(AccessMode mode = ReadWrite, const std::function &errorHandler = std::function()); - - //Old API - bool isInTransaction() const; - bool startTransaction(AccessMode mode = ReadWrite, const std::function &errorHandler = std::function()); - bool commitTransaction(const std::function &errorHandler = std::function()); - void abortTransaction(); - - /** - * Write values. - */ - bool write(const void *key, size_t keySize, const void *value, size_t valueSize, const std::function &errorHandler = std::function()); - - /** - * Convenience API - */ - bool write(const QByteArray &key, const QByteArray &value, const std::function &errorHandler = std::function()); - - /** - * Read values with a give key. - * - * * An empty @param key results in a full scan - * * If duplicates are existing (revisions), all values are returned. - * * The pointers of the returned values are valid during the execution of the @param resultHandler - * - * @return The number of values retrieved. - */ - int scan(const QByteArray &key, const std::function &resultHandler, const std::function &errorHandler = std::function()); - - /** - * Convenience API - */ - int scan(const QByteArray &key, const std::function &resultHandler, const std::function &errorHandler = std::function()); - - /** - * Remove a value - */ - void remove(void const *key, uint keySize, const std::function &errorHandler = std::function()); - - /** - * Convenience API - */ - void remove(const QByteArray &key, const std::function &errorHandler = std::function()); - /** * Set the default error handler. */ diff --git a/common/storage_common.cpp b/common/storage_common.cpp index 8006a8e..4de585d 100644 --- a/common/storage_common.cpp +++ b/common/storage_common.cpp @@ -54,19 +54,6 @@ std::function Storage::defaultErrorHandler() return basicErrorHandler(); } -int Storage::scan(const QByteArray &key, const std::function &resultHandler, const std::function &errorHandler) -{ - return scan(key, [&resultHandler](void *keyPtr, int keySize, void *valuePtr, int valueSize) { - return resultHandler(QByteArray::fromRawData((char*)(valuePtr), valueSize)); - }, - errorHandler); -} - -bool Storage::write(const QByteArray &sKey, const QByteArray &sValue, const std::function &errorHandler) -{ - return write(const_cast(sKey.data()), sKey.size(), const_cast(sValue.data()), sValue.size(), errorHandler); -} - void Storage::setMaxRevision(qint64 revision) { auto transaction = createTransaction(Akonadi2::Storage::ReadWrite); diff --git a/common/storage_lmdb.cpp b/common/storage_lmdb.cpp index d3c52b7..c02d523 100644 --- a/common/storage_lmdb.cpp +++ b/common/storage_lmdb.cpp @@ -397,275 +397,6 @@ Storage::Transaction Storage::createTransaction(AccessMode type, const std::func return Transaction(); } -bool Storage::startTransaction(AccessMode type, - const std::function &errorHandler) -{ - if (!d->env) { - return false; - } - - bool requestedRead = type == ReadOnly; - - if (d->mode == ReadOnly && !requestedRead) { - Error error(d->name.toLatin1(), ErrorCodes::GenericError, "Requested read/write transaction in read-only mode."); - errorHandler ? errorHandler(error) : defaultErrorHandler()(error); - return false; - } - - //We already have a transaction - if (d->transaction && (!d->readTransaction || requestedRead)) { - return true; - } - - if (d->transaction) { - // we are about to turn a read transaction into a writable one - abortTransaction(); - } - - if (d->firstOpen && requestedRead) { - //This is only required for named databases - - //A write transaction is at least required the first time - // mdb_txn_begin(d->env, nullptr, 0, &d->transaction); - //Open the database - //With this we could open multiple named databases if we wanted to - // mdb_dbi_open(d->transaction, nullptr, 0, &d->dbi); - // mdb_txn_abort(d->transaction); - } - - int rc; - rc = mdb_txn_begin(d->env, NULL, requestedRead ? MDB_RDONLY : 0, &d->transaction); - if (!rc) { - rc = mdb_dbi_open(d->transaction, NULL, d->allowDuplicates ? MDB_DUPSORT : 0, &d->dbi); - if (rc) { - Error error(d->name.toLatin1(), ErrorCodes::GenericError, "Error while opening transaction: " + QByteArray(mdb_strerror(rc))); - errorHandler ? errorHandler(error) : defaultErrorHandler()(error); - } - } else { - if (rc) { - Error error(d->name.toLatin1(), ErrorCodes::GenericError, "Error while beginning transaction: " + QByteArray(mdb_strerror(rc))); - errorHandler ? errorHandler(error) : defaultErrorHandler()(error); - } - } - - d->firstOpen = false; - d->readTransaction = requestedRead; - return !rc; -} - -bool Storage::commitTransaction(const std::function &errorHandler) -{ - if (!d->env) { - return false; - } - - if (!d->transaction) { - return false; - } - - int rc; - rc = mdb_txn_commit(d->transaction); - d->transaction = 0; - - if (rc) { - Error error(d->name.toLatin1(), ErrorCodes::GenericError, "Error during transaction commit: " + QByteArray(mdb_strerror(rc))); - errorHandler ? errorHandler(error) : defaultErrorHandler()(error); - } - - return !rc; -} - -void Storage::abortTransaction() -{ - if (!d->env || !d->transaction) { - return; - } - - mdb_txn_abort(d->transaction); - d->transaction = 0; -} - -bool Storage::write(const void *keyPtr, size_t keySize, const void *valuePtr, size_t valueSize, - const std::function &errorHandler) -{ - if (!d->env) { - Error error(d->name.toLatin1(), ErrorCodes::NotOpen, "Not open"); - errorHandler ? errorHandler(error) : defaultErrorHandler()(error); - return false; - } - - if (d->mode == ReadOnly) { - Error error(d->name.toLatin1(), ErrorCodes::GenericError, "Tried to write in read-only mode."); - errorHandler ? errorHandler(error) : defaultErrorHandler()(error); - return false; - } - - if (!keyPtr || keySize == 0) { - Error error(d->name.toLatin1(), ErrorCodes::GenericError, "Tried to write empty key."); - errorHandler ? errorHandler(error) : defaultErrorHandler()(error); - return false; - } - - const bool implicitTransaction = !d->transaction || d->readTransaction; - if (implicitTransaction) { - if (!startTransaction()) { - Error error(d->name.toLatin1(), ErrorCodes::TransactionError, "Failed to start transaction."); - errorHandler ? errorHandler(error) : defaultErrorHandler()(error); - return false; - } - } - - int rc; - MDB_val key, data; - key.mv_size = keySize; - key.mv_data = const_cast(keyPtr); - data.mv_size = valueSize; - data.mv_data = const_cast(valuePtr); - rc = mdb_put(d->transaction, d->dbi, &key, &data, 0); - - if (rc) { - Error error(d->name.toLatin1(), ErrorCodes::GenericError, "mdb_put: " + QByteArray(mdb_strerror(rc))); - errorHandler ? errorHandler(error) : defaultErrorHandler()(error); - } - - if (implicitTransaction) { - if (rc) { - Error error(d->name.toLatin1(), ErrorCodes::GenericError, "aborting transaction"); - errorHandler ? errorHandler(error) : defaultErrorHandler()(error); - abortTransaction(); - } else { - rc = commitTransaction(); - } - } - - return !rc; -} - -int Storage::scan(const QByteArray &k, - const std::function &resultHandler, - const std::function &errorHandler) -{ - if (!d->env) { - Error error(d->name.toLatin1(), ErrorCodes::NotOpen, "Not open"); - errorHandler ? errorHandler(error) : defaultErrorHandler()(error); - return 0; - } - - int rc; - MDB_val key; - MDB_val data; - MDB_cursor *cursor; - - key.mv_data = (void*)k.constData(); - key.mv_size = k.size(); - - const bool implicitTransaction = !d->transaction; - if (implicitTransaction) { - if (!startTransaction(ReadOnly)) { - Error error(d->name.toLatin1(), ErrorCodes::TransactionError, "Could not start transaction"); - errorHandler ? errorHandler(error) : defaultErrorHandler()(error); - return 0; - } - } - - rc = mdb_cursor_open(d->transaction, d->dbi, &cursor); - if (rc) { - Error error(d->name.toLatin1(), getErrorCode(rc), QByteArray("Error during mdb_cursor open: ") + QByteArray(mdb_strerror(rc))); - errorHandler ? errorHandler(error) : defaultErrorHandler()(error); - return 0; - } - - int numberOfRetrievedValues = 0; - - if (k.isEmpty() || d->allowDuplicates) { - if ((rc = mdb_cursor_get(cursor, &key, &data, d->allowDuplicates ? MDB_SET_RANGE : MDB_FIRST)) == 0) { - numberOfRetrievedValues++; - if (resultHandler(key.mv_data, key.mv_size, data.mv_data, data.mv_size)) { - while ((rc = mdb_cursor_get(cursor, &key, &data, d->allowDuplicates ? MDB_NEXT_DUP : MDB_NEXT)) == 0) { - numberOfRetrievedValues++; - if (!resultHandler(key.mv_data, key.mv_size, data.mv_data, data.mv_size)) { - break; - } - } - } - } - - //We never find the last value - if (rc == MDB_NOTFOUND) { - rc = 0; - } - } else { - if ((rc = mdb_cursor_get(cursor, &key, &data, MDB_SET)) == 0) { - numberOfRetrievedValues++; - resultHandler(key.mv_data, key.mv_size, data.mv_data, data.mv_size); - } - } - - mdb_cursor_close(cursor); - - if (rc) { - Error error(d->name.toLatin1(), getErrorCode(rc), QByteArray("Key: ") + k + " : " + QByteArray(mdb_strerror(rc))); - errorHandler ? errorHandler(error) : defaultErrorHandler()(error); - } - - if (implicitTransaction) { - abortTransaction(); - } - return numberOfRetrievedValues; -} - -void Storage::remove(const QByteArray &key, - const std::function &errorHandler) -{ - remove(key.data(), key.size(), errorHandler); -} - -void Storage::remove(const void *keyData, uint keySize, - const std::function &errorHandler) -{ - if (!d->env) { - Error error(d->name.toLatin1(), ErrorCodes::GenericError, "Not open"); - errorHandler ? errorHandler(error) : defaultErrorHandler()(error); - return; - } - - if (d->mode == ReadOnly) { - Error error(d->name.toLatin1(), ErrorCodes::ReadOnlyError, "Tried to write in read-only mode"); - errorHandler ? errorHandler(error) : defaultErrorHandler()(error); - return; - } - - const bool implicitTransaction = !d->transaction || d->readTransaction; - if (implicitTransaction) { - if (!startTransaction()) { - Error error(d->name.toLatin1(), ErrorCodes::TransactionError, "Could not start transaction"); - errorHandler ? errorHandler(error) : defaultErrorHandler()(error); - return; - } - } - - int rc; - MDB_val key; - key.mv_size = keySize; - key.mv_data = const_cast(keyData); - rc = mdb_del(d->transaction, d->dbi, &key, 0); - - if (rc) { - Error error(d->name.toLatin1(), ErrorCodes::GenericError, QString("Error on mdb_del: %1 %2").arg(rc).arg(mdb_strerror(rc)).toLatin1()); - errorHandler ? errorHandler(error) : defaultErrorHandler()(error); - } - - if (implicitTransaction) { - if (rc) { - abortTransaction(); - } else { - rc = commitTransaction(); - } - } - - return; -} - qint64 Storage::diskUsage() const { QFileInfo info(d->storageRoot + '/' + d->name + "/data.mdb"); -- cgit v1.2.3