File Baloo-engine-treat-every-non-success-code-as-a-failure.patch of Package baloo5.11795

From eb68430ae5f4fc4c4a2e5b1798683ff6a639ad3d Mon Sep 17 00:00:00 2001
From: Valerii Malov <jazzvoid@gmail.com>
Date: Sun, 10 Mar 2019 20:19:31 +0300
Subject: Baloo engine: treat every non-success code as a failure

Summary:
Treating only MDB_NOTFOUND as an error leads to use of uninitliazed
pointers and handle IDs in other cases (e.g. when get fails with
MDB_BAD_TXN) and wreaks havoc in the application.

CCBUG: 361186
CCBUG: 390823
CCBUG: 372880
CCBUG: 395888
CCBUG: 367480
CCBUG: 403720

Reviewers: #baloo, bruns, poboiko

Reviewed By: #baloo, bruns

Subscribers: cullmann, ngraham, bruns, kde-frameworks-devel, #baloo

Tags: #frameworks, #baloo

Differential Revision: https://phabricator.kde.org/D18664
---
 src/engine/database.cpp          | 21 +++++++------
 src/engine/documentdatadb.cpp    | 43 +++++++++++++++-----------
 src/engine/documentdb.cpp        | 52 +++++++++++++++++--------------
 src/engine/documentiddb.cpp      | 52 +++++++++++++++++--------------
 src/engine/documenttimedb.cpp    | 41 +++++++++++++++----------
 src/engine/documenturldb.cpp     |  1 -
 src/engine/documenturldb.h       |  7 +++--
 src/engine/fsutils.cpp           |  9 +++---
 src/engine/idfilenamedb.cpp      | 43 +++++++++++++++++---------
 src/engine/idtreedb.cpp          | 35 +++++++++++++--------
 src/engine/mtimedb.cpp           | 66 ++++++++++++++++++++++------------------
 src/engine/phraseanditerator.cpp |  2 --
 src/engine/positiondb.cpp        | 43 ++++++++++++++------------
 src/engine/postingdb.cpp         | 58 +++++++++++++++++++----------------
 src/engine/transaction.cpp       | 60 ++++++++++++++++++++++++++++--------
 src/engine/transaction.h         |  8 ++---
 src/file/extractorprocess.cpp    |  5 +--
 src/file/fileindexscheduler.cpp  | 10 +++---
 src/file/indexcleaner.cpp        |  9 +++---
 src/file/main.cpp                |  1 -
 src/file/metadatamover.cpp       |  2 +-
 21 files changed, 338 insertions(+), 230 deletions(-)

diff --git a/src/engine/database.cpp b/src/engine/database.cpp
index b670f7a..3bc29e2 100644
--- a/src/engine/database.cpp
+++ b/src/engine/database.cpp
@@ -41,6 +41,8 @@
 #include "idutils.h"
 #include "fsutils.h"
 
+#include "enginedebug.h"
+
 #include <QFile>
 #include <QFileInfo>
 #include <QDir>
@@ -85,7 +87,7 @@ bool Database::open(OpenMode mode)
 
     if (mode == CreateDatabase) {
         if (!QFileInfo(dir.absolutePath()).permission(QFile::WriteOwner)) {
-            qCritical() << m_path << "does not have write permissions. Aborting";
+            qCCritical(ENGINE) << m_path << "does not have write permissions. Aborting";
             return false;
         }
 
@@ -123,8 +125,9 @@ bool Database::open(OpenMode mode)
     }
 
     rc = mdb_reader_check(m_env, nullptr);
-    Q_ASSERT_X(rc == 0, "Database::open reader_check", mdb_strerror(rc));
+
     if (rc) {
+        qCWarning(ENGINE) << "Database::open reader_check" << mdb_strerror(rc);
         mdb_env_close(m_env);
         m_env = nullptr;
         return false;
@@ -136,8 +139,8 @@ bool Database::open(OpenMode mode)
     MDB_txn* txn;
     if (mode != CreateDatabase) {
         int rc = mdb_txn_begin(m_env, nullptr, MDB_RDONLY, &txn);
-        Q_ASSERT_X(rc == 0, "Database::transaction ro begin", mdb_strerror(rc));
         if (rc) {
+            qCWarning(ENGINE) << "Database::transaction ro begin" << mdb_strerror(rc);
             mdb_env_close(m_env);
             m_env = nullptr;
             return false;
@@ -161,8 +164,8 @@ bool Database::open(OpenMode mode)
 
         m_dbis.mtimeDbi = MTimeDB::open(txn);
 
-        Q_ASSERT(m_dbis.isValid());
         if (!m_dbis.isValid()) {
+            qCWarning(ENGINE) << "dbis is invalid";
             mdb_txn_abort(txn);
             mdb_env_close(m_env);
             m_env = nullptr;
@@ -170,16 +173,16 @@ bool Database::open(OpenMode mode)
         }
 
         rc = mdb_txn_commit(txn);
-        Q_ASSERT_X(rc == 0, "Database::transaction ro commit", mdb_strerror(rc));
         if (rc) {
+            qCWarning(ENGINE) << "Database::transaction ro commit" << mdb_strerror(rc);
             mdb_env_close(m_env);
             m_env = nullptr;
             return false;
         }
     } else {
         int rc = mdb_txn_begin(m_env, nullptr, 0, &txn);
-        Q_ASSERT_X(rc == 0, "Database::transaction begin", mdb_strerror(rc));
         if (rc) {
+            qCWarning(ENGINE) << "Database::transaction begin" << mdb_strerror(rc);
             mdb_env_close(m_env);
             m_env = nullptr;
             return false;
@@ -203,8 +206,8 @@ bool Database::open(OpenMode mode)
 
         m_dbis.mtimeDbi = MTimeDB::create(txn);
 
-        Q_ASSERT(m_dbis.isValid());
-        if (!m_dbis.isValid()) {
+        if (!m_dbis.isValid())
+            qCWarning(ENGINE) << "dbis is invalid";{
             mdb_txn_abort(txn);
             mdb_env_close(m_env);
             m_env = nullptr;
@@ -212,8 +215,8 @@ bool Database::open(OpenMode mode)
         }
 
         rc = mdb_txn_commit(txn);
-        Q_ASSERT_X(rc == 0, "Database::transaction commit", mdb_strerror(rc));
         if (rc) {
+            qCWarning(ENGINE) << "Database::transaction commit" << mdb_strerror(rc);
             mdb_env_close(m_env);
             m_env = nullptr;
             return false;
diff --git a/src/engine/documentdatadb.cpp b/src/engine/documentdatadb.cpp
index 6eddb3f..35a91f8 100644
--- a/src/engine/documentdatadb.cpp
+++ b/src/engine/documentdatadb.cpp
@@ -18,6 +18,7 @@
  */
 
 #include "documentdatadb.h"
+#include "enginedebug.h"
 
 using namespace Baloo;
 
@@ -35,21 +36,24 @@ DocumentDataDB::~DocumentDataDB()
 
 MDB_dbi DocumentDataDB::create(MDB_txn* txn)
 {
-    MDB_dbi dbi;
+    MDB_dbi dbi = 0;
     int rc = mdb_dbi_open(txn, "documentdatadb", MDB_CREATE | MDB_INTEGERKEY, &dbi);
-    Q_ASSERT_X(rc == 0, "DocumentUrlDB::create", mdb_strerror(rc));
+    if (rc) {
+        qCWarning(ENGINE) << "DocumentDataDB::create" << mdb_strerror(rc);
+        return 0;
+    }
 
     return dbi;
 }
 
 MDB_dbi DocumentDataDB::open(MDB_txn* txn)
 {
-    MDB_dbi dbi;
+    MDB_dbi dbi = 0;
     int rc = mdb_dbi_open(txn, "documentdatadb", MDB_INTEGERKEY, &dbi);
-    if (rc == MDB_NOTFOUND) {
+    if (rc) {
+        qCWarning(ENGINE) << "DocumentDataDB::open" << mdb_strerror(rc);
         return 0;
     }
-    Q_ASSERT_X(rc == 0, "DocumentUrlDB::create", mdb_strerror(rc));
 
     return dbi;
 }
@@ -68,7 +72,9 @@ void DocumentDataDB::put(quint64 docId, const QByteArray& url)
     val.mv_data = static_cast<void*>(const_cast<char*>(url.constData()));
 
     int rc = mdb_put(m_txn, m_dbi, &key, &val, 0);
-    Q_ASSERT_X(rc == 0, "DocumentDataDB::put", mdb_strerror(rc));
+    if (rc) {
+        qCWarning(ENGINE) << "DocumentDataDB::put" << mdb_strerror(rc);
+    }
 }
 
 QByteArray DocumentDataDB::get(quint64 docId)
@@ -79,12 +85,14 @@ QByteArray DocumentDataDB::get(quint64 docId)
     key.mv_size = sizeof(quint64);
     key.mv_data = static_cast<void*>(&docId);
 
-    MDB_val val;
+    MDB_val val{0, nullptr};
     int rc = mdb_get(m_txn, m_dbi, &key, &val);
-    if (rc == MDB_NOTFOUND) {
+    if (rc) {
+        if (rc != MDB_NOTFOUND) {
+            qCDebug(ENGINE) << "DocumentDataDB::get" << docId << mdb_strerror(rc);
+        }
         return QByteArray();
     }
-    Q_ASSERT_X(rc == 0, "DocumentDataDB::get", mdb_strerror(rc));
 
     return QByteArray(static_cast<char*>(val.mv_data), val.mv_size);
 }
@@ -98,10 +106,9 @@ void DocumentDataDB::del(quint64 docId)
     key.mv_data = static_cast<void*>(&docId);
 
     int rc = mdb_del(m_txn, m_dbi, &key, nullptr);
-    if (rc == MDB_NOTFOUND) {
-        return;
+    if (rc != 0 && rc != MDB_NOTFOUND) {
+        qCDebug(ENGINE) << "DocumentDataDB::del" << docId << mdb_strerror(rc);
     }
-    Q_ASSERT_X(rc == 0, "DocumentUrlDB::del", mdb_strerror(rc));
 }
 
 bool DocumentDataDB::contains(quint64 docId)
@@ -112,12 +119,14 @@ bool DocumentDataDB::contains(quint64 docId)
     key.mv_size = sizeof(quint64);
     key.mv_data = static_cast<void*>(&docId);
 
-    MDB_val val;
+    MDB_val val{0, nullptr};
     int rc = mdb_get(m_txn, m_dbi, &key, &val);
-    if (rc == MDB_NOTFOUND) {
+    if (rc) {
+        if (rc != MDB_NOTFOUND) {
+            qCDebug(ENGINE) << "DocumentDataDB::contains" << docId << mdb_strerror(rc);
+        }
         return false;
     }
-    Q_ASSERT_X(rc == 0, "DocumentDataDB::contains", mdb_strerror(rc));
 
     return true;
 }
@@ -133,10 +142,10 @@ QMap<quint64, QByteArray> DocumentDataDB::toTestMap() const
     QMap<quint64, QByteArray> map;
     while (1) {
         int rc = mdb_cursor_get(cursor, &key, &val, MDB_NEXT);
-        if (rc == MDB_NOTFOUND) {
+        if (rc) {
+            qCDebug(ENGINE) << "DocumentDataDB::toTestMap" << mdb_strerror(rc);
             break;
         }
-        Q_ASSERT_X(rc == 0, "DocumentDataDB::toTestMap", mdb_strerror(rc));
 
         const quint64 id = *(static_cast<quint64*>(key.mv_data));
         const QByteArray ba(static_cast<char*>(val.mv_data), val.mv_size);
diff --git a/src/engine/documentdb.cpp b/src/engine/documentdb.cpp
index 7581901..fceda60 100644
--- a/src/engine/documentdb.cpp
+++ b/src/engine/documentdb.cpp
@@ -20,8 +20,7 @@
 
 #include "documentdb.h"
 #include "doctermscodec.h"
-
-#include <QDebug>
+#include "enginedebug.h"
 
 using namespace Baloo;
 
@@ -39,21 +38,24 @@ DocumentDB::~DocumentDB()
 
 MDB_dbi DocumentDB::create(const char* name, MDB_txn* txn)
 {
-    MDB_dbi dbi;
-    int rc = mdb_dbi_open(txn, name, MDB_CREATE | MDB_INTEGERKEY, &dbi);
-    Q_ASSERT_X(rc == 0, "DocumentDB::create", mdb_strerror(rc));
+    MDB_dbi dbi = 0;
+    const int rc = mdb_dbi_open(txn, name, MDB_CREATE | MDB_INTEGERKEY, &dbi);
+    if (rc) {
+        qCWarning(ENGINE) << "DocumentDB::create" << name << mdb_strerror(rc);
+        return 0;
+    }
 
     return dbi;
 }
 
 MDB_dbi DocumentDB::open(const char* name, MDB_txn* txn)
 {
-    MDB_dbi dbi;
-    int rc = mdb_dbi_open(txn, name, MDB_INTEGERKEY, &dbi);
-    if (rc == MDB_NOTFOUND) {
+    MDB_dbi dbi = 0;
+    const int rc = mdb_dbi_open(txn, name, MDB_INTEGERKEY, &dbi);
+    if (rc) {
+        qCWarning(ENGINE) << "DocumentDB::open" << name << mdb_strerror(rc);
         return 0;
     }
-    Q_ASSERT_X(rc == 0, "DocumentDB::open", mdb_strerror(rc));
 
     return dbi;
 }
@@ -75,7 +77,9 @@ void DocumentDB::put(quint64 docId, const QVector<QByteArray>& list)
     val.mv_data = static_cast<void*>(arr.data());
 
     int rc = mdb_put(m_txn, m_dbi, &key, &val, 0);
-    Q_ASSERT_X(rc == 0, "DocumentDB::put", mdb_strerror(rc));
+    if (rc) {
+        qCWarning(ENGINE) << "DocumentDB::put" << mdb_strerror(rc);
+    }
 }
 
 QVector<QByteArray> DocumentDB::get(quint64 docId)
@@ -86,19 +90,19 @@ QVector<QByteArray> DocumentDB::get(quint64 docId)
     key.mv_size = sizeof(quint64);
     key.mv_data = static_cast<void*>(&docId);
 
-    MDB_val val;
+    MDB_val val{0, nullptr};
     int rc = mdb_get(m_txn, m_dbi, &key, &val);
-    if (rc == MDB_NOTFOUND) {
+    if (rc) {
+        qCDebug(ENGINE) << "DocumentDB::get" << docId << mdb_strerror(rc);
         return QVector<QByteArray>();
     }
-    Q_ASSERT_X(rc == 0, "DocumentDB::get", mdb_strerror(rc));
 
     QByteArray arr = QByteArray::fromRawData(static_cast<char*>(val.mv_data), val.mv_size);
 
     DocTermsCodec codec;
     auto result = codec.decode(arr);
     if (result.isEmpty()) {
-        qDebug() << "Document Terms DB contains corrupt data for " << docId;
+        qCDebug(ENGINE) << "Document Terms DB contains corrupt data for " << docId;
     }
     return result;
 }
@@ -112,10 +116,9 @@ void DocumentDB::del(quint64 docId)
     key.mv_data = static_cast<void*>(&docId);
 
     int rc = mdb_del(m_txn, m_dbi, &key, nullptr);
-    if (rc == MDB_NOTFOUND) {
-        return;
+    if (rc != 0 && rc != MDB_NOTFOUND) {
+        qCDebug(ENGINE) << "DocumentDB::del" << docId << mdb_strerror(rc);
     }
-    Q_ASSERT_X(rc == 0, "DocumentDB::del", mdb_strerror(rc));
 }
 
 bool DocumentDB::contains(quint64 docId)
@@ -128,10 +131,12 @@ bool DocumentDB::contains(quint64 docId)
 
     MDB_val val;
     int rc = mdb_get(m_txn, m_dbi, &key, &val);
-    if (rc == MDB_NOTFOUND) {
+    if (rc) {
+        if (rc != MDB_NOTFOUND) {
+            qCDebug(ENGINE) << "DocumentDB::contains" << docId << mdb_strerror(rc);
+        }
         return false;
     }
-    Q_ASSERT_X(rc == 0, "DocumentDB::contains", mdb_strerror(rc));
 
     return true;
 }
@@ -140,7 +145,10 @@ uint DocumentDB::size()
 {
     MDB_stat stat;
     int rc = mdb_stat(m_txn, m_dbi, &stat);
-    Q_ASSERT_X(rc == 0, "DocumentDB::size", mdb_strerror(rc));
+    if (rc) {
+        qCDebug(ENGINE) << "DocumentDB::size" << mdb_strerror(rc);
+        return 0;
+    }
 
     return stat.ms_entries;
 }
@@ -156,10 +164,10 @@ QMap<quint64, QVector<QByteArray>> DocumentDB::toTestMap() const
     QMap<quint64, QVector<QByteArray>> map;
     while (1) {
         int rc = mdb_cursor_get(cursor, &key, &val, MDB_NEXT);
-        if (rc == MDB_NOTFOUND) {
+        if (rc) {
+            qCWarning(ENGINE) << "PostingDB::toTestMap" << mdb_strerror(rc);
             break;
         }
-        Q_ASSERT_X(rc == 0, "PostingDB::toTestMap", mdb_strerror(rc));
 
         const quint64 id = *(static_cast<quint64*>(key.mv_data));
         const QVector<QByteArray> vec = DocTermsCodec().decode(QByteArray(static_cast<char*>(val.mv_data), val.mv_size));
diff --git a/src/engine/documentiddb.cpp b/src/engine/documentiddb.cpp
index e7ce997..6e6dfe7 100644
--- a/src/engine/documentiddb.cpp
+++ b/src/engine/documentiddb.cpp
@@ -19,8 +19,7 @@
  */
 
 #include "documentiddb.h"
-
-#include <QDebug>
+#include "enginedebug.h"
 
 using namespace Baloo;
 
@@ -38,21 +37,24 @@ DocumentIdDB::~DocumentIdDB()
 
 MDB_dbi DocumentIdDB::create(const char* name, MDB_txn* txn)
 {
-    MDB_dbi dbi;
+    MDB_dbi dbi = 0;
     int rc = mdb_dbi_open(txn, name, MDB_CREATE | MDB_INTEGERKEY, &dbi);
-    Q_ASSERT_X(rc == 0, "DocumentIdDB::create", mdb_strerror(rc));
+    if (rc) {
+        qCWarning(ENGINE) << "DocumentIdDB::create" << name << mdb_strerror(rc);
+        return 0;
+    }
 
     return dbi;
 }
 
 MDB_dbi DocumentIdDB::open(const char* name, MDB_txn* txn)
 {
-    MDB_dbi dbi;
+    MDB_dbi dbi = 0;
     int rc = mdb_dbi_open(txn, name, MDB_INTEGERKEY, &dbi);
-    if (rc == MDB_NOTFOUND) {
+    if (rc) {
+        qCWarning(ENGINE) << "DocumentIdDB::open" << name << mdb_strerror(rc);
         return 0;
     }
-    Q_ASSERT_X(rc == 0, "DocumentIdDB::create", mdb_strerror(rc));
 
     return dbi;
 }
@@ -70,7 +72,9 @@ void DocumentIdDB::put(quint64 docId)
     val.mv_data = nullptr;
 
     int rc = mdb_put(m_txn, m_dbi, &key, &val, 0);
-    Q_ASSERT_X(rc == 0, "DocumentIdDB::put", mdb_strerror(rc));
+    if (rc) {
+        qCWarning(ENGINE) << "DocumentIdDB::put" << mdb_strerror(rc);
+    }
 }
 
 bool DocumentIdDB::contains(quint64 docId)
@@ -81,12 +85,14 @@ bool DocumentIdDB::contains(quint64 docId)
     key.mv_size = sizeof(quint64);
     key.mv_data = static_cast<void*>(&docId);
 
-    MDB_val val;
+    MDB_val val{0, nullptr};
     int rc = mdb_get(m_txn, m_dbi, &key, &val);
-    if (rc == MDB_NOTFOUND) {
+    if (rc) {
+        if (rc != MDB_NOTFOUND) {
+            qCDebug(ENGINE) << "DocumentIdDB::contains" << docId << mdb_strerror(rc);
+        }
         return false;
     }
-    Q_ASSERT_X(rc == 0, "DocumentIdDB::contains", mdb_strerror(rc));
 
     return true;
 }
@@ -100,10 +106,9 @@ void DocumentIdDB::del(quint64 docId)
     key.mv_data = static_cast<void*>(&docId);
 
     int rc = mdb_del(m_txn, m_dbi, &key, nullptr);
-    if (rc == MDB_NOTFOUND) {
-        return;
+    if (rc != 0 && rc != MDB_NOTFOUND) {
+        qCDebug(ENGINE) << "DocumentIdDB::del" << docId << mdb_strerror(rc);
     }
-    Q_ASSERT_X(rc == 0, "DocumentIdDB::del", mdb_strerror(rc));
 }
 
 QVector<quint64> DocumentIdDB::fetchItems(int size)
@@ -116,12 +121,12 @@ QVector<quint64> DocumentIdDB::fetchItems(int size)
     QVector<quint64> vec;
 
     for (int i = 0; i < size; i++) {
-        MDB_val key;
+        MDB_val key{0, nullptr};
         int rc = mdb_cursor_get(cursor, &key, nullptr, MDB_NEXT);
-        if (rc == MDB_NOTFOUND) {
+        if (rc) {
+            qCDebug(ENGINE) << "DocumentIdDB::fetchItems" << size << mdb_strerror(rc);
             break;
         }
-        Q_ASSERT_X(rc == 0, "DocumentIdDB::fetchItems", mdb_strerror(rc));
 
         quint64 id = *(static_cast<quint64*>(key.mv_data));
         vec << id;
@@ -135,7 +140,10 @@ uint DocumentIdDB::size()
 {
     MDB_stat stat;
     int rc = mdb_stat(m_txn, m_dbi, &stat);
-    Q_ASSERT_X(rc == 0, "DocumentIdDB::size", mdb_strerror(rc));
+    if (rc) {
+        qCDebug(ENGINE) << "DocumentIdDB::size" << mdb_strerror(rc);
+        return 0;
+    }
 
     return stat.ms_entries;
 }
@@ -145,16 +153,16 @@ QVector<quint64> DocumentIdDB::toTestVector() const
     MDB_cursor* cursor;
     mdb_cursor_open(m_txn, m_dbi, &cursor);
 
-    MDB_val key = {0, nullptr};
-    MDB_val val;
+    MDB_val key{0, nullptr};
+    MDB_val val{0, nullptr};
 
     QVector<quint64> vec;
     while (1) {
         int rc = mdb_cursor_get(cursor, &key, &val, MDB_NEXT);
-        if (rc == MDB_NOTFOUND) {
+        if (rc) {
+            qCDebug(ENGINE) << "DocumentTimeDB::toTestMap" << mdb_strerror(rc);
             break;
         }
-        Q_ASSERT_X(rc == 0, "DocumentTimeDB::toTestMap", mdb_strerror(rc));
 
         const quint64 id = *(static_cast<quint64*>(key.mv_data));
         vec << id;
diff --git a/src/engine/documenttimedb.cpp b/src/engine/documenttimedb.cpp
index a8a5e8e..6ee9b96 100644
--- a/src/engine/documenttimedb.cpp
+++ b/src/engine/documenttimedb.cpp
@@ -19,6 +19,7 @@
  */
 
 #include "documenttimedb.h"
+#include "enginedebug.h"
 
 using namespace Baloo;
 
@@ -36,21 +37,24 @@ DocumentTimeDB::~DocumentTimeDB()
 
 MDB_dbi DocumentTimeDB::create(MDB_txn* txn)
 {
-    MDB_dbi dbi;
+    MDB_dbi dbi = 0;
     int rc = mdb_dbi_open(txn, "documenttimedb", MDB_CREATE | MDB_INTEGERKEY, &dbi);
-    Q_ASSERT_X(rc == 0, "DocumentTimeDB::create", mdb_strerror(rc));
+    if (rc) {
+        qCWarning(ENGINE) << "DocumentTimeDB::create" << mdb_strerror(rc);
+        return 0;
+    }
 
     return dbi;
 }
 
 MDB_dbi DocumentTimeDB::open(MDB_txn* txn)
 {
-    MDB_dbi dbi;
+    MDB_dbi dbi = 0;
     int rc = mdb_dbi_open(txn, "documenttimedb", MDB_INTEGERKEY, &dbi);
-    if (rc == MDB_NOTFOUND) {
+    if (rc) {
+        qCWarning(ENGINE) << "DocumentTimeDB::open" << mdb_strerror(rc);
         return 0;
     }
-    Q_ASSERT_X(rc == 0, "DocumentTimeDB::create", mdb_strerror(rc));
 
     return dbi;
 }
@@ -68,7 +72,9 @@ void DocumentTimeDB::put(quint64 docId, const TimeInfo& info)
     val.mv_data = static_cast<void*>(const_cast<TimeInfo*>(&info));
 
     int rc = mdb_put(m_txn, m_dbi, &key, &val, 0);
-    Q_ASSERT_X(rc == 0, "DocumentTimeDB::put", mdb_strerror(rc));
+    if (rc) {
+        qCWarning(ENGINE) << "DocumentTimeDB::put" << docId << mdb_strerror(rc);
+    }
 }
 
 DocumentTimeDB::TimeInfo DocumentTimeDB::get(quint64 docId)
@@ -79,12 +85,14 @@ DocumentTimeDB::TimeInfo DocumentTimeDB::get(quint64 docId)
     key.mv_size = sizeof(quint64);
     key.mv_data = &docId;
 
-    MDB_val val;
+    MDB_val val{0, nullptr};
     int rc = mdb_get(m_txn, m_dbi, &key, &val);
-    if (rc == MDB_NOTFOUND) {
+    if (rc) {
+        if (rc != MDB_NOTFOUND) {
+            qCDebug(ENGINE) << "DocumentTimeDB::get" << docId << mdb_strerror(rc);
+        }
         return TimeInfo();
     }
-    Q_ASSERT_X(rc == 0, "DocumentTimeDB::get", mdb_strerror(rc));
 
     return *(static_cast<TimeInfo*>(val.mv_data));
 }
@@ -98,10 +106,9 @@ void DocumentTimeDB::del(quint64 docId)
     key.mv_data = static_cast<void*>(&docId);
 
     int rc = mdb_del(m_txn, m_dbi, &key, nullptr);
-    if (rc == MDB_NOTFOUND) {
-        return;
+    if (rc != 0 && rc != MDB_NOTFOUND) {
+        qCDebug(ENGINE) << "DocumentTimeDB::del" << docId << mdb_strerror(rc);
     }
-    Q_ASSERT_X(rc == 0, "DocumentTimeDB::del", mdb_strerror(rc));
 }
 
 bool DocumentTimeDB::contains(quint64 docId)
@@ -114,10 +121,12 @@ bool DocumentTimeDB::contains(quint64 docId)
 
     MDB_val val;
     int rc = mdb_get(m_txn, m_dbi, &key, &val);
-    if (rc == MDB_NOTFOUND) {
+    if (rc) {
+        if (rc != MDB_NOTFOUND) {
+            qCDebug(ENGINE) << "DocumentTimeDB::contains" << docId << mdb_strerror(rc);
+        }
         return false;
     }
-    Q_ASSERT_X(rc == 0, "DocumentTimeDB::contains", mdb_strerror(rc));
 
     return true;
 }
@@ -133,10 +142,10 @@ QMap<quint64, DocumentTimeDB::TimeInfo> DocumentTimeDB::toTestMap() const
     QMap<quint64, TimeInfo> map;
     while (1) {
         int rc = mdb_cursor_get(cursor, &key, &val, MDB_NEXT);
-        if (rc == MDB_NOTFOUND) {
+        if (rc) {
+            qCDebug(ENGINE) << "DocumentTimeDB::toTestMap" << mdb_strerror(rc);
             break;
         }
-        Q_ASSERT_X(rc == 0, "DocumentTimeDB::toTestMap", mdb_strerror(rc));
 
         const quint64 id = *(static_cast<quint64*>(key.mv_data));
         const TimeInfo ti = *(static_cast<TimeInfo*>(val.mv_data));
diff --git a/src/engine/documenturldb.cpp b/src/engine/documenturldb.cpp
index fb35edd..7c3c4f9 100644
--- a/src/engine/documenturldb.cpp
+++ b/src/engine/documenturldb.cpp
@@ -24,7 +24,6 @@
 
 #include <algorithm>
 #include <QPair>
-#include <QDebug>
 
 using namespace Baloo;
 
diff --git a/src/engine/documenturldb.h b/src/engine/documenturldb.h
index eb42e1c..bd96c26 100644
--- a/src/engine/documenturldb.h
+++ b/src/engine/documenturldb.h
@@ -135,9 +135,10 @@ void DocumentUrlDB::replace(quint64 docId, const QByteArray& url, Functor should
                 auto filePath = idFilenameDb.get(docId);
                 auto fileName = QFile::decodeName(filePath.name);
                 if (QFile::exists(fileName)) {
-                    Q_ASSERT_X(idTreeDb.get(docId).isEmpty(),
-                               "DocumentUrlDB::del",
-                               "This folder still has sub-files in its cache. It cannot be deleted");
+                    if (!idTreeDb.get(docId).isEmpty()) {
+                        qWarning() << "DocumentUrlDB::del"
+                                   << "This folder still has sub-files in its cache. It cannot be deleted";
+                    }
                 } else {
                     /*
                      * FIXME: this is not an ideal solution we need to figure out how such currptions are
diff --git a/src/engine/fsutils.cpp b/src/engine/fsutils.cpp
index 3f42f7f..bf9bfc2 100644
--- a/src/engine/fsutils.cpp
+++ b/src/engine/fsutils.cpp
@@ -21,8 +21,7 @@
  */
 
 #include "fsutils.h"
-
-#include <QDebug>
+#include "enginedebug.h"
 
 #ifdef Q_OS_LINUX
 #include <errno.h>
@@ -54,7 +53,7 @@ void FSUtils::disableCoW(const QString &path)
     ulong flags = 0;
     const int fd = open(qPrintable(path), O_RDONLY);
     if (fd == -1) {
-        qWarning() << "Failed to open" << path << "to modify flags (" << errno << ")";
+        qCWarning(ENGINE) << "Failed to open" << path << "to modify flags (" << errno << ")";
         return;
     }
 
@@ -62,7 +61,7 @@ void FSUtils::disableCoW(const QString &path)
         const int errno_ioctl = errno;
         // ignore ENOTTY, filesystem does not support attrs (and likely neither supports COW)
         if (errno_ioctl != ENOTTY) {
-            qWarning() << "ioctl error: failed to get file flags (" << errno_ioctl << ")";
+            qCWarning(ENGINE) << "ioctl error: failed to get file flags (" << errno_ioctl << ")";
         }
         close(fd);
         return;
@@ -73,7 +72,7 @@ void FSUtils::disableCoW(const QString &path)
             const int errno_ioctl = errno;
             // ignore EOPNOTSUPP, returned on filesystems not supporting COW
             if (errno_ioctl != EOPNOTSUPP) {
-                qWarning() << "ioctl error: failed to set file flags (" << errno_ioctl << ")";
+                qCWarning(ENGINE) << "ioctl error: failed to set file flags (" << errno_ioctl << ")";
             }
             close(fd);
             return;
diff --git a/src/engine/idfilenamedb.cpp b/src/engine/idfilenamedb.cpp
index f03faae..91ab571 100644
--- a/src/engine/idfilenamedb.cpp
+++ b/src/engine/idfilenamedb.cpp
@@ -19,6 +19,7 @@
  */
 
 #include "idfilenamedb.h"
+#include "enginedebug.h"
 
 using namespace Baloo;
 
@@ -36,21 +37,24 @@ IdFilenameDB::~IdFilenameDB()
 
 MDB_dbi IdFilenameDB::create(MDB_txn* txn)
 {
-    MDB_dbi dbi;
+    MDB_dbi dbi = 0;
     int rc = mdb_dbi_open(txn, "idfilename", MDB_CREATE | MDB_INTEGERKEY, &dbi);
-    Q_ASSERT_X(rc == 0, "IdFilenameDB::create", mdb_strerror(rc));
+    if (rc) {
+        qCWarning(ENGINE) << "IdFilenameDB::create" << mdb_strerror(rc);
+        return 0;
+    }
 
     return dbi;
 }
 
 MDB_dbi IdFilenameDB::open(MDB_txn* txn)
 {
-    MDB_dbi dbi;
+    MDB_dbi dbi = 0;
     int rc = mdb_dbi_open(txn, "idfilename", MDB_INTEGERKEY, &dbi);
-    if (rc == MDB_NOTFOUND) {
+    if (rc) {
+        qCWarning(ENGINE) << "IdFilenameDB::open" << mdb_strerror(rc);
         return 0;
     }
-    Q_ASSERT_X(rc == 0, "IdFilenameDB::open", mdb_strerror(rc));
 
     return dbi;
 }
@@ -73,7 +77,9 @@ void IdFilenameDB::put(quint64 docId, const FilePath& path)
     val.mv_data = static_cast<void*>(data.data());
 
     int rc = mdb_put(m_txn, m_dbi, &key, &val, 0);
-    Q_ASSERT_X(rc == 0, "IdFilenameDB::put", mdb_strerror(rc));
+    if (rc) {
+        qCWarning(ENGINE) << "IdFilenameDB::put" << mdb_strerror(rc);
+    }
 }
 
 IdFilenameDB::FilePath IdFilenameDB::get(quint64 docId)
@@ -86,12 +92,14 @@ IdFilenameDB::FilePath IdFilenameDB::get(quint64 docId)
 
     FilePath path;
 
-    MDB_val val;
+    MDB_val val{0, nullptr};
     int rc = mdb_get(m_txn, m_dbi, &key, &val);
-    if (rc == MDB_NOTFOUND) {
+    if (rc) {
+        if (rc != MDB_NOTFOUND) {
+            qCDebug(ENGINE) << "IdfilenameDB::get" << docId << mdb_strerror(rc);
+        }
         return path;
     }
-    Q_ASSERT_X(rc == 0, "IdfilenameDB::get", mdb_strerror(rc));
 
     path.parentId = static_cast<quint64*>(val.mv_data)[0];
     path.name = QByteArray(static_cast<char*>(val.mv_data) + 8, val.mv_size - 8);
@@ -107,12 +115,14 @@ bool IdFilenameDB::contains(quint64 docId)
     key.mv_size = sizeof(quint64);
     key.mv_data = static_cast<void*>(&docId);
 
-    MDB_val val;
+    MDB_val val{0, nullptr};
     int rc = mdb_get(m_txn, m_dbi, &key, &val);
-    if (rc == MDB_NOTFOUND) {
+    if (rc) {
+        if (rc != MDB_NOTFOUND) {
+            qCDebug(ENGINE) << "IdfilenameDB::contains" << docId << mdb_strerror(rc);
+        }
         return false;
     }
-    Q_ASSERT_X(rc == 0, "IdfilenameDB::contains", mdb_strerror(rc));
     return true;
 }
 
@@ -125,7 +135,9 @@ void IdFilenameDB::del(quint64 docId)
     key.mv_data = static_cast<void*>(&docId);
 
     int rc = mdb_del(m_txn, m_dbi, &key, nullptr);
-    Q_ASSERT_X(rc == 0, "IdfilenameDB::del", mdb_strerror(rc));
+    if (rc != 0 && rc != MDB_NOTFOUND) {
+        qCDebug(ENGINE) << "IdFilenameDB::del" << mdb_strerror(rc);
+    }
 }
 
 QMap<quint64, IdFilenameDB::FilePath> IdFilenameDB::toTestMap() const
@@ -139,10 +151,11 @@ QMap<quint64, IdFilenameDB::FilePath> IdFilenameDB::toTestMap() const
     QMap<quint64, FilePath> map;
     while (1) {
         int rc = mdb_cursor_get(cursor, &key, &val, MDB_NEXT);
-        if (rc == MDB_NOTFOUND) {
+        if (rc) {
+            qCDebug(ENGINE) << "IdFilenameDB::toTestMap" << mdb_strerror(rc);
             break;
         }
-        Q_ASSERT_X(rc == 0, "IdFilenameDB::toTestMap", mdb_strerror(rc));
+
 
         const quint64 id = *(static_cast<quint64*>(key.mv_data));
 
diff --git a/src/engine/idtreedb.cpp b/src/engine/idtreedb.cpp
index 5ba289d..1a2c99a 100644
--- a/src/engine/idtreedb.cpp
+++ b/src/engine/idtreedb.cpp
@@ -19,9 +19,9 @@
  */
 
 #include "idtreedb.h"
+#include "enginedebug.h"
 #include "postingiterator.h"
 
-#include <QDebug>
 #include <algorithm>
 
 using namespace Baloo;
@@ -36,21 +36,24 @@ IdTreeDB::IdTreeDB(MDB_dbi dbi, MDB_txn* txn)
 
 MDB_dbi IdTreeDB::create(MDB_txn* txn)
 {
-    MDB_dbi dbi;
+    MDB_dbi dbi = 0;
     int rc = mdb_dbi_open(txn, "idtree", MDB_CREATE | MDB_INTEGERKEY, &dbi);
-    Q_ASSERT_X(rc == 0, "IdTreeDB::create", mdb_strerror(rc));
+    if (rc) {
+        qCWarning(ENGINE) << "IdTreeDB::create" << mdb_strerror(rc);
+        return 0;
+    }
 
     return dbi;
 }
 
 MDB_dbi IdTreeDB::open(MDB_txn* txn)
 {
-    MDB_dbi dbi;
+    MDB_dbi dbi = 0;
     int rc = mdb_dbi_open(txn, "idtree", MDB_INTEGERKEY, &dbi);
-    if (rc == MDB_NOTFOUND) {
+    if (rc) {
+        qCWarning(ENGINE) << "IdTreeDB::open" << mdb_strerror(rc);
         return 0;
     }
-    Q_ASSERT_X(rc == 0, "IdTreeDB::open", mdb_strerror(rc));
 
     return dbi;
 }
@@ -69,7 +72,9 @@ void IdTreeDB::put(quint64 docId, const QVector<quint64> subDocIds)
     val.mv_data = static_cast<void*>(const_cast<quint64*>(subDocIds.constData()));
 
     int rc = mdb_put(m_txn, m_dbi, &key, &val, 0);
-    Q_ASSERT_X(rc == 0, "IdTreeDB::put", mdb_strerror(rc));
+    if (rc) {
+        qCWarning(ENGINE) << "IdTreeDB::put" << mdb_strerror(rc);
+    }
 }
 
 QVector<quint64> IdTreeDB::get(quint64 docId)
@@ -78,12 +83,14 @@ QVector<quint64> IdTreeDB::get(quint64 docId)
     key.mv_size = sizeof(quint64);
     key.mv_data = static_cast<void*>(&docId);
 
-    MDB_val val;
+    MDB_val val{0, nullptr};
     int rc = mdb_get(m_txn, m_dbi, &key, &val);
-    if (rc == MDB_NOTFOUND) {
+    if (rc) {
+        if (rc != MDB_NOTFOUND) {
+            qCDebug(ENGINE) << "IdTreeDB::get" << docId << mdb_strerror(rc);
+        }
         return QVector<quint64>();
     }
-    Q_ASSERT_X(rc == 0, "IdTreeeDB::get", mdb_strerror(rc));
 
     // FIXME: This still makes a copy of the data. Perhaps we can avoid that?
     QVector<quint64> list(val.mv_size / sizeof(quint64));
@@ -99,7 +106,9 @@ void IdTreeDB::del(quint64 docId)
     key.mv_data = static_cast<void*>(&docId);
 
     int rc = mdb_del(m_txn, m_dbi, &key, nullptr);
-    Q_ASSERT_X(rc == 0, "IdTreeDB::del", mdb_strerror(rc));
+    if (rc != 0 && rc != MDB_NOTFOUND) {
+        qCDebug(ENGINE) << "IdTreeDB::del" << mdb_strerror(rc);
+    }
 }
 
 //
@@ -169,10 +178,10 @@ QMap<quint64, QVector<quint64>> IdTreeDB::toTestMap() const
     QMap<quint64, QVector<quint64>> map;
     while (1) {
         int rc = mdb_cursor_get(cursor, &key, &val, MDB_NEXT);
-        if (rc == MDB_NOTFOUND) {
+        if (rc) {
+            qCDebug(ENGINE) << "PostingDB::toTestMap" << mdb_strerror(rc);
             break;
         }
-        Q_ASSERT_X(rc == 0, "PostingDB::toTestMap", mdb_strerror(rc));
 
         const quint64 id = *(static_cast<quint64*>(key.mv_data));
 
diff --git a/src/engine/mtimedb.cpp b/src/engine/mtimedb.cpp
index c5b5159..5685b85 100644
--- a/src/engine/mtimedb.cpp
+++ b/src/engine/mtimedb.cpp
@@ -19,6 +19,7 @@
  */
 
 #include "mtimedb.h"
+#include "enginedebug.h"
 #include "vectorpostingiterator.h"
 #include <algorithm>
 
@@ -38,21 +39,24 @@ MTimeDB::~MTimeDB()
 
 MDB_dbi MTimeDB::create(MDB_txn* txn)
 {
-    MDB_dbi dbi;
+    MDB_dbi dbi = 0;
     int rc = mdb_dbi_open(txn, "mtimedb", MDB_CREATE | MDB_INTEGERKEY | MDB_DUPSORT | MDB_DUPFIXED | MDB_INTEGERDUP, &dbi);
-    Q_ASSERT_X(rc == 0, "MTimeDB::create", mdb_strerror(rc));
+    if (rc) {
+        qCWarning(ENGINE) << "MTimeDB::create" << mdb_strerror(rc);
+        return 0;
+    }
 
     return dbi;
 }
 
 MDB_dbi MTimeDB::open(MDB_txn* txn)
 {
-    MDB_dbi dbi;
+    MDB_dbi dbi = 0;
     int rc = mdb_dbi_open(txn, "mtimedb", MDB_INTEGERKEY | MDB_DUPSORT | MDB_DUPFIXED | MDB_INTEGERDUP, &dbi);
-    if (rc == MDB_NOTFOUND) {
+    if (rc) {
+        qCWarning(ENGINE) << "MTimeDB::open" << mdb_strerror(rc);
         return 0;
     }
-    Q_ASSERT_X(rc == 0, "MTimeDB::open", mdb_strerror(rc));
 
     return dbi;
 }
@@ -71,7 +75,9 @@ void MTimeDB::put(quint32 mtime, quint64 docId)
     val.mv_data = static_cast<void*>(&docId);
 
     int rc = mdb_put(m_txn, m_dbi, &key, &val, 0);
-    Q_ASSERT_X(rc == 0, "MTimeDB::put", mdb_strerror(rc));
+    if (rc) {
+        qCWarning(ENGINE) << "MTimeDB::put" << mdb_strerror(rc);
+    }
 }
 
 QVector<quint64> MTimeDB::get(quint32 mtime)
@@ -87,23 +93,26 @@ QVector<quint64> MTimeDB::get(quint32 mtime)
     MDB_cursor* cursor;
     mdb_cursor_open(m_txn, m_dbi, &cursor);
 
-    MDB_val val;
+    MDB_val val{0, nullptr};
     int rc = mdb_cursor_get(cursor, &key, &val, MDB_SET_RANGE);
-    if (rc == MDB_NOTFOUND) {
+    if (rc) {
+        if (rc != MDB_NOTFOUND) {
+            qCDebug(ENGINE) << "MTimeDB::get" << mtime << mdb_strerror(rc);
+        }
         mdb_cursor_close(cursor);
         return values;
     }
-    Q_ASSERT_X(rc == 0, "MTimeDB::get", mdb_strerror(rc));
 
     values << *static_cast<quint64*>(val.mv_data);
 
     while (1) {
         rc = mdb_cursor_get(cursor, &key, &val, MDB_NEXT_DUP);
-        if (rc == MDB_NOTFOUND) {
+        if (rc) {
+            if (rc != MDB_NOTFOUND) {
+                qCDebug(ENGINE) << "MTimeDB::get (loop)" << mtime << mdb_strerror(rc);
+            }
             break;
         }
-        Q_ASSERT_X(rc == 0, "MTimeDB::get while", mdb_strerror(rc));
-
         values << *static_cast<quint64*>(val.mv_data);
     }
 
@@ -127,10 +136,9 @@ void MTimeDB::del(quint32 mtime, quint64 docId)
     val.mv_data = static_cast<void*>(&docId);
 
     int rc = mdb_del(m_txn, m_dbi, &key, &val);
-    if (rc == MDB_NOTFOUND) {
-        return;
+    if (rc != 0 && rc != MDB_NOTFOUND) {
+        qCDebug(ENGINE) << "MTimeDB::del" << mtime << docId << mdb_strerror(rc);
     }
-    Q_ASSERT_X(rc == 0, "DocumentDB::del", mdb_strerror(rc));
 }
 
 //
@@ -150,13 +158,13 @@ PostingIterator* MTimeDB::iter(quint32 mtime, MTimeDB::Comparator com)
     MDB_cursor* cursor;
     mdb_cursor_open(m_txn, m_dbi, &cursor);
 
-    MDB_val val;
+    MDB_val val{0, nullptr};
     int rc = mdb_cursor_get(cursor, &key, &val, MDB_SET_RANGE);
-    if (rc == MDB_NOTFOUND) {
+    if (rc) {
+        qCDebug(ENGINE) << "MTimeDB::iter" << mtime << mdb_strerror(rc);
         mdb_cursor_close(cursor);
         return nullptr;
     }
-    Q_ASSERT_X(rc == 0, "MTimeDB::iter", mdb_strerror(rc));
 
     QVector<quint64> results;
     results << *static_cast<quint64*>(val.mv_data);
@@ -164,10 +172,10 @@ PostingIterator* MTimeDB::iter(quint32 mtime, MTimeDB::Comparator com)
     if (com == GreaterEqual) {
         while (1) {
             rc = mdb_cursor_get(cursor, &key, &val, MDB_NEXT);
-            if (rc == MDB_NOTFOUND) {
+            if (rc) {
+                qCDebug(ENGINE) << "MTimeDB::iter (loop)" << mtime << mdb_strerror(rc);
                 break;
             }
-            Q_ASSERT_X(rc == 0, "MTimeDB::iter >=", mdb_strerror(rc));
 
             results << *static_cast<quint64*>(val.mv_data);
         }
@@ -175,10 +183,10 @@ PostingIterator* MTimeDB::iter(quint32 mtime, MTimeDB::Comparator com)
     else {
         while (1) {
             rc = mdb_cursor_get(cursor, &key, &val, MDB_PREV);
-            if (rc == MDB_NOTFOUND) {
+            if (rc) {
+                qCDebug(ENGINE) << "MTimeDB::iter (loop)" << mtime << mdb_strerror(rc);
                 break;
             }
-            Q_ASSERT_X(rc == 0, "MTimeDB::iter >=", mdb_strerror(rc));
 
             quint64 id = *static_cast<quint64*>(val.mv_data);
             results.push_front(id);
@@ -203,23 +211,23 @@ PostingIterator* MTimeDB::iterRange(quint32 beginTime, quint32 endTime)
     MDB_cursor* cursor;
     mdb_cursor_open(m_txn, m_dbi, &cursor);
 
-    MDB_val val;
+    MDB_val val{0, nullptr};
     int rc = mdb_cursor_get(cursor, &key, &val, MDB_SET_RANGE);
-    if (rc == MDB_NOTFOUND) {
+    if (rc) {
+        qCDebug(ENGINE) << "MTimeDB::iterRange" << beginTime << endTime << mdb_strerror(rc);
         mdb_cursor_close(cursor);
         return nullptr;
     }
-    Q_ASSERT_X(rc == 0, "MTimeDB::iterRange", mdb_strerror(rc));
 
     QVector<quint64> results;
     results << *static_cast<quint64*>(val.mv_data);
 
     while (1) {
         rc = mdb_cursor_get(cursor, &key, &val, MDB_NEXT);
-        if (rc == MDB_NOTFOUND) {
+        if (rc) {
+            qCDebug(ENGINE) << "MTimeDB::iterRange" << beginTime << endTime << mdb_strerror(rc);
             break;
         }
-        Q_ASSERT_X(rc == 0, "MTimeDB::iter >=", mdb_strerror(rc));
 
         quint32 time = *static_cast<quint32*>(key.mv_data);
         if (time > endTime) {
@@ -245,10 +253,10 @@ QMap<quint32, quint64> MTimeDB::toTestMap() const
     QMap<quint32, quint64> map;
     while (1) {
         int rc = mdb_cursor_get(cursor, &key, &val, MDB_NEXT);
-        if (rc == MDB_NOTFOUND) {
+        if (rc) {
+            qCDebug(ENGINE) << "MTimeDB::toTestMap" << mdb_strerror(rc);
             break;
         }
-        Q_ASSERT_X(rc == 0, "MTimeDB::toTestMap", mdb_strerror(rc));
 
         const quint32 time = *(static_cast<quint32*>(key.mv_data));
         const quint64 id = *(static_cast<quint64*>(val.mv_data));
diff --git a/src/engine/phraseanditerator.cpp b/src/engine/phraseanditerator.cpp
index 2c20b11..ddcb397 100644
--- a/src/engine/phraseanditerator.cpp
+++ b/src/engine/phraseanditerator.cpp
@@ -20,8 +20,6 @@
 
 #include "phraseanditerator.h"
 
-#include <QDebug>
-
 using namespace Baloo;
 
 PhraseAndIterator::PhraseAndIterator(const QVector<PostingIterator*>& iterators)
diff --git a/src/engine/positiondb.cpp b/src/engine/positiondb.cpp
index d104917..6b8f2b5 100644
--- a/src/engine/positiondb.cpp
+++ b/src/engine/positiondb.cpp
@@ -18,13 +18,12 @@
  *
  */
 
+#include "enginedebug.h"
 #include "positiondb.h"
 #include "positioncodec.h"
 #include "positioninfo.h"
 #include "postingiterator.h"
 
-#include <QDebug>
-
 using namespace Baloo;
 
 PositionDB::PositionDB(MDB_dbi dbi, MDB_txn* txn)
@@ -41,21 +40,24 @@ PositionDB::~PositionDB()
 
 MDB_dbi PositionDB::create(MDB_txn* txn)
 {
-    MDB_dbi dbi;
+    MDB_dbi dbi = 0;
     int rc = mdb_dbi_open(txn, "positiondb", MDB_CREATE, &dbi);
-    Q_ASSERT_X(rc == 0, "PositionDB::create", mdb_strerror(rc));
+    if (rc) {
+        qCWarning(ENGINE) << "PositionDB::create" << mdb_strerror(rc);
+        return 0;
+    }
 
     return dbi;
 }
 
 MDB_dbi PositionDB::open(MDB_txn* txn)
 {
-    MDB_dbi dbi;
+    MDB_dbi dbi = 0;
     int rc = mdb_dbi_open(txn, "positiondb", 0, &dbi);
-    if (rc == MDB_NOTFOUND) {
+    if (rc) {
+        qCWarning(ENGINE) << "PositionDB::open" << mdb_strerror(rc);
         return 0;
     }
-    Q_ASSERT_X(rc == 0, "PositionDB::open", mdb_strerror(rc));
 
     return dbi;
 }
@@ -77,7 +79,9 @@ void PositionDB::put(const QByteArray& term, const QVector<PositionInfo>& list)
     val.mv_data = static_cast<void*>(data.data());
 
     int rc = mdb_put(m_txn, m_dbi, &key, &val, 0);
-    Q_ASSERT_X(rc == 0, "PositionDB::put", mdb_strerror(rc));
+    if (rc) {
+        qCWarning(ENGINE) << "PositionDB::put" << mdb_strerror(rc);
+    }
 }
 
 QVector<PositionInfo> PositionDB::get(const QByteArray& term)
@@ -88,12 +92,14 @@ QVector<PositionInfo> PositionDB::get(const QByteArray& term)
     key.mv_size = term.size();
     key.mv_data = static_cast<void*>(const_cast<char*>(term.constData()));
 
-    MDB_val val;
+    MDB_val val{0, nullptr};
     int rc = mdb_get(m_txn, m_dbi, &key, &val);
-    if (rc == MDB_NOTFOUND) {
+    if (rc) {
+        if (rc != MDB_NOTFOUND) {
+            qCDebug(ENGINE) << "PositionDB::get" << term << mdb_strerror(rc);
+        }
         return QVector<PositionInfo>();
     }
-    Q_ASSERT_X(rc == 0, "PositionDB::get", mdb_strerror(rc));
 
     QByteArray data = QByteArray::fromRawData(static_cast<char*>(val.mv_data), val.mv_size);
 
@@ -110,10 +116,9 @@ void PositionDB::del(const QByteArray& term)
     key.mv_data = static_cast<void*>(const_cast<char*>(term.constData()));
 
     int rc = mdb_del(m_txn, m_dbi, &key, nullptr);
-    if (rc == MDB_NOTFOUND) {
-        return;
+    if (rc != 0 && rc != MDB_NOTFOUND) {
+        qCDebug(ENGINE) << "PositionDB::del" << term << mdb_strerror(rc);
     }
-    Q_ASSERT_X(rc == 0, "PositionDB::del", mdb_strerror(rc));
 }
 
 //
@@ -165,12 +170,12 @@ PostingIterator* PositionDB::iter(const QByteArray& term)
     key.mv_size = term.size();
     key.mv_data = static_cast<void*>(const_cast<char*>(term.constData()));
 
-    MDB_val val;
+    MDB_val val{0, nullptr};
     int rc = mdb_get(m_txn, m_dbi, &key, &val);
-    if (rc == MDB_NOTFOUND) {
+    if (rc) {
+        qCDebug(ENGINE) << "PositionDB::iter" << term << mdb_strerror(rc);
         return nullptr;
     }
-    Q_ASSERT_X(rc == 0, "PositionDB::iter", mdb_strerror(rc));
 
     return new DBPositionIterator(static_cast<char*>(val.mv_data), val.mv_size);
 }
@@ -186,10 +191,10 @@ QMap<QByteArray, QVector<PositionInfo>> PositionDB::toTestMap() const
     QMap<QByteArray, QVector<PositionInfo>> map;
     while (1) {
         int rc = mdb_cursor_get(cursor, &key, &val, MDB_NEXT);
-        if (rc == MDB_NOTFOUND) {
+        if (rc) {
+            qCDebug(ENGINE) << "PostingDB::toTestMap" << mdb_strerror(rc);
             break;
         }
-        Q_ASSERT_X(rc == 0, "PostingDB::toTestMap", mdb_strerror(rc));
 
         const QByteArray ba(static_cast<char*>(key.mv_data), key.mv_size);
         const QVector<PositionInfo> vinfo = PositionCodec().decode(QByteArray(static_cast<char*>(val.mv_data), val.mv_size));
diff --git a/src/engine/postingdb.cpp b/src/engine/postingdb.cpp
index c965223..d16fd29 100644
--- a/src/engine/postingdb.cpp
+++ b/src/engine/postingdb.cpp
@@ -18,12 +18,11 @@
  *
  */
 
+#include "enginedebug.h"
 #include "postingdb.h"
 #include "orpostingiterator.h"
 #include "postingcodec.h"
 
-#include <QDebug>
-
 using namespace Baloo;
 
 PostingDB::PostingDB(MDB_dbi dbi, MDB_txn* txn)
@@ -40,21 +39,24 @@ PostingDB::~PostingDB()
 
 MDB_dbi PostingDB::create(MDB_txn* txn)
 {
-    MDB_dbi dbi;
+    MDB_dbi dbi = 0;
     int rc = mdb_dbi_open(txn, "postingdb", MDB_CREATE, &dbi);
-    Q_ASSERT_X(rc == 0, "PostingDB::create", mdb_strerror(rc));
+    if (rc) {
+        qCWarning(ENGINE) << "PostingDB::create" << mdb_strerror(rc);
+        return 0;
+    }
 
     return dbi;
 }
 
 MDB_dbi PostingDB::open(MDB_txn* txn)
 {
-    MDB_dbi dbi;
+    MDB_dbi dbi = 0;
     int rc = mdb_dbi_open(txn, "postingdb", 0, &dbi);
-    if (rc == MDB_NOTFOUND) {
+    if (rc) {
+        qCWarning(ENGINE) << "PostingDB::open" << mdb_strerror(rc);
         return 0;
     }
-    Q_ASSERT_X(rc == 0, "PostingDB::open", mdb_strerror(rc));
 
     return dbi;
 }
@@ -76,7 +78,9 @@ void PostingDB::put(const QByteArray& term, const PostingList& list)
     val.mv_data = static_cast<void*>(arr.data());
 
     int rc = mdb_put(m_txn, m_dbi, &key, &val, 0);
-    Q_ASSERT_X(rc == 0, "PostingDB::put", mdb_strerror(rc));
+    if (rc) {
+        qCWarning(ENGINE) << "PostingDB::put" << mdb_strerror(rc);
+    }
 }
 
 PostingList PostingDB::get(const QByteArray& term)
@@ -87,12 +91,14 @@ PostingList PostingDB::get(const QByteArray& term)
     key.mv_size = term.size();
     key.mv_data = static_cast<void*>(const_cast<char*>(term.constData()));
 
-    MDB_val val;
+    MDB_val val{0, nullptr};
     int rc = mdb_get(m_txn, m_dbi, &key, &val);
-    if (rc == MDB_NOTFOUND) {
+    if (rc) {
+        if (rc != MDB_NOTFOUND) {
+            qCDebug(ENGINE) << "PostingDB::get" << term << mdb_strerror(rc);
+        }
         return PostingList();
     }
-    Q_ASSERT_X(rc == 0, "PostingDB::get", mdb_strerror(rc));
 
     QByteArray arr = QByteArray::fromRawData(static_cast<char*>(val.mv_data), val.mv_size);
 
@@ -109,10 +115,9 @@ void PostingDB::del(const QByteArray& term)
     key.mv_data = static_cast<void*>(const_cast<char*>(term.constData()));
 
     int rc = mdb_del(m_txn, m_dbi, &key, nullptr);
-    if (rc == MDB_NOTFOUND) {
-        return;
+    if (rc != 0 && rc != MDB_NOTFOUND) {
+        qCDebug(ENGINE) << "PostingDB::del" << term << mdb_strerror(rc);
     }
-    Q_ASSERT_X(rc == 0, "PostingDB::del", mdb_strerror(rc));
 }
 
 QVector< QByteArray > PostingDB::fetchTermsStartingWith(const QByteArray& term)
@@ -126,9 +131,7 @@ QVector< QByteArray > PostingDB::fetchTermsStartingWith(const QByteArray& term)
 
     QVector<QByteArray> terms;
     int rc = mdb_cursor_get(cursor, &key, nullptr, MDB_SET_RANGE);
-    while (rc != MDB_NOTFOUND) {
-        Q_ASSERT_X(rc == 0, "PostingDB::fetchTermsStartingWith", mdb_strerror(rc));
-
+    while (rc == 0) {
         const QByteArray arr(static_cast<char*>(key.mv_data), key.mv_size);
         if (!arr.startsWith(term)) {
             break;
@@ -136,7 +139,9 @@ QVector< QByteArray > PostingDB::fetchTermsStartingWith(const QByteArray& term)
         terms << arr;
         rc = mdb_cursor_get(cursor, &key, nullptr, MDB_NEXT);
     }
-    Q_ASSERT_X(rc == 0, "PostingDB::fetchTermsStartingWith", mdb_strerror(rc));
+    if (rc != MDB_NOTFOUND) {
+        qCDebug(ENGINE) << "PostingDB::fetchTermsStartingWith" << mdb_strerror(rc);
+    }
 
     mdb_cursor_close(cursor);
     return terms;
@@ -161,10 +166,10 @@ PostingIterator* PostingDB::iter(const QByteArray& term)
 
     MDB_val val;
     int rc = mdb_get(m_txn, m_dbi, &key, &val);
-    if (rc == MDB_NOTFOUND) {
+    if (rc) {
+        qCDebug(ENGINE) << "PostingDB::iter" << term << mdb_strerror(rc);
         return nullptr;
     }
-    Q_ASSERT_X(rc == 0, "PostingDB::iter", mdb_strerror(rc));
 
     return new DBPostingIterator(val.mv_data, val.mv_size);
 }
@@ -214,9 +219,7 @@ PostingIterator* PostingDB::iter(const QByteArray& prefix, Validator validate)
 
     MDB_val val;
     int rc = mdb_cursor_get(cursor, &key, &val, MDB_SET_RANGE);
-    while (rc != MDB_NOTFOUND) {
-        Q_ASSERT_X(rc == 0, "PostingDB::regexpIter", mdb_strerror(rc));
-
+    while (rc == 0) {
         const QByteArray arr(static_cast<char*>(key.mv_data), key.mv_size);
         if (!arr.startsWith(prefix)) {
             break;
@@ -226,8 +229,9 @@ PostingIterator* PostingDB::iter(const QByteArray& prefix, Validator validate)
         }
         rc = mdb_cursor_get(cursor, &key, &val, MDB_NEXT);
     }
-    if (rc != MDB_NOTFOUND) {
-        Q_ASSERT_X(rc == 0, "PostingDB::regexpIter", mdb_strerror(rc));
+
+    if (rc != 0 && rc != MDB_NOTFOUND) {
+        qCWarning(ENGINE) << "PostingDB::regexpIter" << mdb_strerror(rc);
     }
 
     mdb_cursor_close(cursor);
@@ -279,10 +283,10 @@ QMap<QByteArray, PostingList> PostingDB::toTestMap() const
     QMap<QByteArray, PostingList> map;
     while (1) {
         int rc = mdb_cursor_get(cursor, &key, &val, MDB_NEXT);
-        if (rc == MDB_NOTFOUND) {
+        if (rc) {
+            qCDebug(ENGINE) << "PostingDB::toTestMap" << mdb_strerror(rc);
             break;
         }
-        Q_ASSERT_X(rc == 0, "PostingDB::toTestMap", mdb_strerror(rc));
 
         const QByteArray ba(static_cast<char*>(key.mv_data), key.mv_size);
         const PostingList plist = PostingCodec().decode(QByteArray(static_cast<char*>(val.mv_data), val.mv_size));
diff --git a/src/engine/transaction.cpp b/src/engine/transaction.cpp
index fd4a85c..d56dbae 100644
--- a/src/engine/transaction.cpp
+++ b/src/engine/transaction.cpp
@@ -39,6 +39,8 @@
 #include "database.h"
 #include "databasesize.h"
 
+#include "enginedebug.h"
+
 #include <QFile>
 #include <QFileInfo>
 
@@ -51,7 +53,10 @@ Transaction::Transaction(const Database& db, Transaction::TransactionType type)
 {
     uint flags = type == ReadOnly ? MDB_RDONLY : 0;
     int rc = mdb_txn_begin(db.m_env, nullptr, flags, &m_txn);
-    Q_ASSERT_X(rc == 0, "Transaction", mdb_strerror(rc));
+    if (rc) {
+        qCDebug(ENGINE) << "Transaction" << mdb_strerror(rc);
+        return;
+    }
 
     if (type == ReadWrite) {
         m_writeTrans = new WriteTransaction(m_dbis, m_txn);
@@ -65,11 +70,12 @@ Transaction::Transaction(Database* db, Transaction::TransactionType type)
 
 Transaction::~Transaction()
 {
-    if (m_writeTrans)
-        qWarning() << "Closing an active WriteTransaction without calling abort/commit";
+    if (m_writeTrans) {
+        qWarning(ENGINE) << "Closing an active WriteTransaction without calling abort/commit";
+    }
 
     if (m_txn) {
-        abort();
+        abortTransaction();
     }
 }
 
@@ -154,7 +160,11 @@ QByteArray Transaction::documentData(quint64 id) const
 bool Transaction::hasChanges() const
 {
     Q_ASSERT(m_txn);
-    Q_ASSERT(m_writeTrans);
+    if (!m_writeTrans) {
+        qCWarning(ENGINE) << "m_writeTrans is null";
+        return false;
+    }
+
     return m_writeTrans->hasChanges();
 }
 
@@ -228,7 +238,10 @@ void Transaction::addDocument(const Document& doc)
 {
     Q_ASSERT(m_txn);
     Q_ASSERT(doc.id() > 0);
-    Q_ASSERT(m_writeTrans);
+    if (!m_writeTrans) {
+        qCWarning(ENGINE) << "m_writeTrans is null";
+        return;
+    }
 
     m_writeTrans->addDocument(doc);
 }
@@ -237,7 +250,10 @@ void Transaction::removeDocument(quint64 id)
 {
     Q_ASSERT(m_txn);
     Q_ASSERT(id > 0);
-    Q_ASSERT(m_writeTrans);
+    if (!m_writeTrans) {
+        qCWarning(ENGINE) << "m_writeTrans is null";
+        return;
+    }
 
     m_writeTrans->removeDocument(id);
 }
@@ -246,7 +262,10 @@ void Transaction::removeRecursively(quint64 id)
 {
     Q_ASSERT(m_txn);
     Q_ASSERT(id > 0);
-    Q_ASSERT(m_writeTrans);
+    if (!m_writeTrans) {
+        qCWarning(ENGINE) << "m_writeTrans is null";
+        return;
+    }
 
     m_writeTrans->removeRecursively(id);
 }
@@ -256,7 +275,14 @@ void Transaction::replaceDocument(const Document& doc, DocumentOperations operat
     Q_ASSERT(m_txn);
     Q_ASSERT(doc.id() > 0);
     Q_ASSERT(m_writeTrans);
-    Q_ASSERT_X(hasDocument(doc.id()), "Transaction::replaceDocument", "Document does not exist");
+    if (!hasDocument(doc.id())) {
+        qCDebug(ENGINE) << "Transaction::replaceDocument" << "Document does not exist";
+    }
+
+    if (!m_writeTrans) {
+        qCWarning(ENGINE) << "m_writeTrans is null";
+        return;
+    }
 
     m_writeTrans->replaceDocument(doc, operations);
 }
@@ -264,19 +290,24 @@ void Transaction::replaceDocument(const Document& doc, DocumentOperations operat
 void Transaction::commit()
 {
     Q_ASSERT(m_txn);
-    Q_ASSERT(m_writeTrans);
+    if (!m_writeTrans) {
+        qCWarning(ENGINE) << "m_writeTrans is null";
+        return;
+    }
 
     m_writeTrans->commit();
     delete m_writeTrans;
     m_writeTrans = nullptr;
 
     int rc = mdb_txn_commit(m_txn);
-    Q_ASSERT_X(rc == 0, "Transaction::commit", mdb_strerror(rc));
+    if (rc) {
+        qCWarning(ENGINE) << "Transaction::commit" << mdb_strerror(rc);
+    }
 
     m_txn = nullptr;
 }
 
-void Transaction::abort()
+void Transaction::abortTransaction()
 {
     Q_ASSERT(m_txn);
 
@@ -316,7 +347,10 @@ PostingIterator* Transaction::postingIterator(const EngineQuery& query) const
     if (query.op() == EngineQuery::Phrase) {
         const auto subQueries = query.subQueries();
         for (const EngineQuery& q : subQueries) {
-            Q_ASSERT_X(q.leaf(), "Transaction::toPostingIterator", "Phrase queries must contain leaf queries");
+            if (!q.leaf()) {
+                qCDebug(ENGINE) << "Transaction::toPostingIterator" << "Phrase queries must contain leaf queries";
+                continue;
+            }
             vec << positionDb.iter(q.term());
         }
 
diff --git a/src/engine/transaction.h b/src/engine/transaction.h
index bc56238..8874a5e 100644
--- a/src/engine/transaction.h
+++ b/src/engine/transaction.h
@@ -95,7 +95,7 @@ public:
     // Transaction handling
     //
     void commit();
-    void abort();
+    void abortTransaction();
     bool hasChanges() const;
 
     //
@@ -127,9 +127,9 @@ private:
     Transaction(const Transaction& rhs) = delete;
 
     const DatabaseDbis& m_dbis;
-    MDB_txn* m_txn;
-    MDB_env* m_env;
-    WriteTransaction* m_writeTrans;
+    MDB_txn *m_txn = nullptr;
+    MDB_env *m_env = nullptr;
+    WriteTransaction *m_writeTrans = nullptr;
 
     friend class DatabaseSanitizerImpl;
     friend class DBState; // for testing
diff --git a/src/file/extractorprocess.cpp b/src/file/extractorprocess.cpp
index c52c7e0..c18442f 100644
--- a/src/file/extractorprocess.cpp
+++ b/src/file/extractorprocess.cpp
@@ -20,8 +20,9 @@
 
 #include "extractorprocess.h"
 
+#include "baloodebug.h"
+
 #include <QStandardPaths>
-#include <QDebug>
 #include <QDataStream>
 
 using namespace Baloo;
@@ -91,7 +92,7 @@ void ExtractorProcess::slotIndexingFile()
             break;
 
         default:
-            qCritical() << "Got unknown result from extractor" << command << arg;
+            qCritical(BALOO) << "Got unknown result from extractor" << command << arg;
         }
     }
 }
diff --git a/src/file/fileindexscheduler.cpp b/src/file/fileindexscheduler.cpp
index c6c7fc8..01ecba0 100644
--- a/src/file/fileindexscheduler.cpp
+++ b/src/file/fileindexscheduler.cpp
@@ -19,6 +19,7 @@
 
 #include "fileindexscheduler.h"
 
+#include "baloodebug.h"
 #include "firstrunindexer.h"
 #include "newfileindexer.h"
 #include "modifiedfileindexer.h"
@@ -33,7 +34,6 @@
 #include <memory>
 
 #include <QTimer>
-#include <QDebug>
 #include <QDBusConnection>
 
 using namespace Baloo;
@@ -181,9 +181,9 @@ void FileIndexScheduler::handleFileRemoved(const QString& file)
 
 void FileIndexScheduler::powerManagementStatusChanged(bool isOnBattery)
 {
-    qDebug() << "Power state changed";
+    qCDebug(BALOO) << "Power state changed";
     if (isOnBattery && m_indexerState == ContentIndexing) {
-        qDebug() << "On battery stopping content indexer";
+        qCDebug(BALOO) << "On battery, stopping content indexer";
         m_contentIndexer->quit();
         //TODO: Maybe we can add a special state for suspended due to being on battery.
         m_indexerState = Idle;
@@ -196,14 +196,14 @@ void FileIndexScheduler::powerManagementStatusChanged(bool isOnBattery)
 void FileIndexScheduler::setSuspend(bool suspend)
 {
     if (suspend) {
-        qDebug() << "Suspending";
+        qCDebug(BALOO) << "Suspending";
         if (m_indexerState == ContentIndexing) {
             m_contentIndexer->quit();
         }
         m_indexerState = Suspended;
         Q_EMIT stateChanged(m_indexerState);
     } else {
-        qDebug() << "Resuming";
+        qCDebug(BALOO) << "Resuming";
         m_indexerState = Idle;
         // No need to emit here we'll be emitting in scheduling
         scheduleIndexing();
diff --git a/src/file/indexcleaner.cpp b/src/file/indexcleaner.cpp
index 20eabe1..7d9cf10 100644
--- a/src/file/indexcleaner.cpp
+++ b/src/file/indexcleaner.cpp
@@ -24,7 +24,8 @@
 #include "transaction.h"
 #include "idutils.h"
 
-#include <QDebug>
+#include "baloodebug.h"
+
 #include <QFile>
 #include <QMimeDatabase>
 
@@ -52,19 +53,19 @@ void IndexCleaner::run()
         QString url = tr.documentUrl(id);
 
         if (!QFile::exists(url)) {
-            qDebug() << "not exists: " << url;
+            qCDebug(BALOO) << "not exists: " << url;
             return true;
         }
 
         if (!m_config->shouldBeIndexed(url)) {
-            qDebug() << "should not be indexed: " << url;
+            qCDebug(BALOO) << "should not be indexed: " << url;
             return true;
         }
 
         // FIXME: This mimetype is not completely accurate!
         QString mimetype = mimeDb.mimeTypeForFile(url, QMimeDatabase::MatchExtension).name();
         if (!m_config->shouldMimeTypeBeIndexed(mimetype)) {
-            qDebug() << "mimetype should not be indexed: " << url << mimetype;
+            qCDebug(BALOO) << "mimetype should not be indexed: " << url << mimetype;
             return true;
         }
 
diff --git a/src/file/main.cpp b/src/file/main.cpp
index 52c42e9..604dbc9 100644
--- a/src/file/main.cpp
+++ b/src/file/main.cpp
@@ -24,7 +24,6 @@
 #include <KCrash>
 #include <KLocalizedString>
 
-#include <QDebug>
 #include <QFileInfo>
 #include <iostream>
 
diff --git a/src/file/metadatamover.cpp b/src/file/metadatamover.cpp
index c5d2a89..663daff 100644
--- a/src/file/metadatamover.cpp
+++ b/src/file/metadatamover.cpp
@@ -191,7 +191,7 @@ void MetadataMover::watcherServiceUnregistered(const QString &serviceName)
         return;
     }
 
-    qDebug() << "MetadataMover::watcherServiceUnregistered" << itService.key();
+    qCDebug(BALOO) << "MetadataMover::watcherServiceUnregistered" << itService.key();
 
     delete itService.value();
     m_watcherApplications.erase(itService);
-- 
cgit v1.1

openSUSE Build Service is sponsored by