[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [baloo] src: Open baloo lmdb database read-only beside in baloo_file/baloo_file_extractor + balooctl
From: Christoph Cullmann <cullmann () kde ! org>
Date: 2016-09-11 21:39:57
Message-ID: E1bjCTl-0003Xr-FT () code ! kde ! org
[Download RAW message or body]
Git commit 02047b524a176da447d8c96e15c7e2abae8339ae by Christoph Cullmann.
Committed on 11/09/2016 at 21:36.
Pushed by cullmann into branch 'master'.
Open baloo lmdb database read-only beside in baloo_file/baloo_file_extractor + \
balooctl (for some commands) + unit tests
At the moment, any application that uses baloo can corrupt the db.
Now, only the things that need to write to it open it with read-write.
This only works as long as the library exposes only read-only things like Query/...
REVIEW: 128892
M +3 -3 src/engine/database.cpp
M +13 -1 src/engine/database.h
M +1 -1 src/file/extractor/app.cpp
M +1 -1 src/lib/file.cpp
M +1 -1 src/lib/searchstore.cpp
M +1 -1 src/lib/taglistjob.cpp
M +1 -1 src/qml/experimental/monitor.cpp
M +4 -4 src/tools/balooctl/main.cpp
M +1 -1 src/tools/balooctl/statuscommand.cpp
M +1 -1 src/tools/balooshow/main.cpp
http://commits.kde.org/baloo/02047b524a176da447d8c96e15c7e2abae8339ae
diff --git a/src/engine/database.cpp b/src/engine/database.cpp
index c83f540..0c91d0e 100644
--- a/src/engine/database.cpp
+++ b/src/engine/database.cpp
@@ -79,7 +79,7 @@ bool Database::open(OpenMode mode)
}
QFileInfo indexInfo(dir, QStringLiteral("index"));
- if (mode == OpenDatabase && !indexInfo.exists()) {
+ if ((mode != CreateDatabase) && !indexInfo.exists()) {
return false;
}
@@ -117,7 +117,7 @@ bool Database::open(OpenMode mode)
// The directory needs to be created before opening the environment
QByteArray arr = QFile::encodeName(indexInfo.absoluteFilePath());
- rc = mdb_env_open(m_env, arr.constData(), MDB_NOSUBDIR | MDB_NOMEMINIT, 0664);
+ rc = mdb_env_open(m_env, arr.constData(), MDB_NOSUBDIR | MDB_NOMEMINIT | ((mode \
== ReadOnlyDatabase) ? MDB_RDONLY : 0), 0664); if (rc) {
mdb_env_close(m_env);
m_env = nullptr;
@@ -136,7 +136,7 @@ bool Database::open(OpenMode mode)
// Individual Databases
//
MDB_txn* txn;
- if (mode == OpenDatabase) {
+ if (mode != CreateDatabase) {
int rc = mdb_txn_begin(m_env, NULL, MDB_RDONLY, &txn);
Q_ASSERT_X(rc == 0, "Database::transaction ro begin", mdb_strerror(rc));
if (rc) {
diff --git a/src/engine/database.h b/src/engine/database.h
index 6ccb2a5..735ecd5 100644
--- a/src/engine/database.h
+++ b/src/engine/database.h
@@ -49,8 +49,20 @@ public:
* Database open mode
*/
enum OpenMode {
+ /**
+ * Create + open read-write dabase.
+ */
CreateDatabase,
- OpenDatabase
+
+ /**
+ * Read-Write Database, only works if database exists.
+ */
+ ReadWriteDatabase,
+
+ /**
+ * Read-Only Database, only works if database exists.
+ */
+ ReadOnlyDatabase
};
/**
diff --git a/src/file/extractor/app.cpp b/src/file/extractor/app.cpp
index 0ca7276..6843165 100644
--- a/src/file/extractor/app.cpp
+++ b/src/file/extractor/app.cpp
@@ -55,7 +55,7 @@ App::App(QObject* parent)
void App::slotNewInput()
{
Database *db = globalDatabaseInstance();
- if (!db->open(Database::OpenDatabase)) {
+ if (!db->open(Database::ReadWriteDatabase)) {
qCritical() << "Failed to open the database";
exit(1);
}
diff --git a/src/lib/file.cpp b/src/lib/file.cpp
index cbbc912..1176f35 100644
--- a/src/lib/file.cpp
+++ b/src/lib/file.cpp
@@ -96,7 +96,7 @@ bool File::load()
}
Database *db = globalDatabaseInstance();
- if (!db->open(Database::OpenDatabase)) {
+ if (!db->open(Database::ReadOnlyDatabase)) {
return false;
}
diff --git a/src/lib/searchstore.cpp b/src/lib/searchstore.cpp
index 060a4fd..265016b 100644
--- a/src/lib/searchstore.cpp
+++ b/src/lib/searchstore.cpp
@@ -48,7 +48,7 @@ SearchStore::SearchStore()
: m_db(0)
{
m_db = globalDatabaseInstance();
- if (!m_db->open(Database::OpenDatabase)) {
+ if (!m_db->open(Database::ReadOnlyDatabase)) {
m_db = 0;
}
diff --git a/src/lib/taglistjob.cpp b/src/lib/taglistjob.cpp
index 76ac8ff..3d1b0c8 100644
--- a/src/lib/taglistjob.cpp
+++ b/src/lib/taglistjob.cpp
@@ -46,7 +46,7 @@ TagListJob::~TagListJob()
void TagListJob::start()
{
Database *db = globalDatabaseInstance();
- if (!db->open(Database::OpenDatabase)) {
+ if (!db->open(Database::ReadOnlyDatabase)) {
setError(UserDefinedError);
setErrorText(QStringLiteral("Failed to open the database"));
emitResult();
diff --git a/src/qml/experimental/monitor.cpp b/src/qml/experimental/monitor.cpp
index 11c06ae..679b914 100644
--- a/src/qml/experimental/monitor.cpp
+++ b/src/qml/experimental/monitor.cpp
@@ -126,7 +126,7 @@ void Monitor::balooStarted(const QString& service)
void Monitor::fetchTotalFiles()
{
Baloo::Database *db = Baloo::globalDatabaseInstance();
- if (db->open(Baloo::Database::OpenDatabase)) {
+ if (db->open(Baloo::Database::ReadOnlyDatabase)) {
Baloo::Transaction tr(db, Baloo::Transaction::ReadOnly);
m_totalFiles = tr.size();
m_filesIndexed = tr.size() - tr.phaseOneSize();
diff --git a/src/tools/balooctl/main.cpp b/src/tools/balooctl/main.cpp
index 2a6b175..b12b39d 100644
--- a/src/tools/balooctl/main.cpp
+++ b/src/tools/balooctl/main.cpp
@@ -191,7 +191,7 @@ int main(int argc, char* argv[])
}
Database *db = globalDatabaseInstance();
- if (!db->open(Database::OpenDatabase)) {
+ if (!db->open(Database::ReadWriteDatabase)) {
out << "Baloo Index could not be opened\n";
return 1;
}
@@ -230,7 +230,7 @@ int main(int argc, char* argv[])
}
Database *db = globalDatabaseInstance();
- if (!db->open(Database::OpenDatabase)) {
+ if (!db->open(Database::ReadWriteDatabase)) {
out << "Baloo Index could not be opened\n";
return 1;
}
@@ -260,7 +260,7 @@ int main(int argc, char* argv[])
if (command == QStringLiteral("indexSize")) {
Database *db = globalDatabaseInstance();
- if (!db->open(Database::OpenDatabase)) {
+ if (!db->open(Database::ReadOnlyDatabase)) {
out << "Baloo Index could not be opened\n";
return 1;
}
@@ -311,7 +311,7 @@ int main(int argc, char* argv[])
if (command == QStringLiteral("checkDb")) {
Database *db = globalDatabaseInstance();
- if (!db->open(Database::OpenDatabase)) {
+ if (!db->open(Database::ReadOnlyDatabase)) {
out << "Baloo Index could not be opened\n";
return 1;
}
diff --git a/src/tools/balooctl/statuscommand.cpp \
b/src/tools/balooctl/statuscommand.cpp index 1a56c64..fede101 100644
--- a/src/tools/balooctl/statuscommand.cpp
+++ b/src/tools/balooctl/statuscommand.cpp
@@ -56,7 +56,7 @@ int StatusCommand::exec(const QCommandLineParser& parser)
}
Database *db = globalDatabaseInstance();
- if (!db->open(Database::OpenDatabase)) {
+ if (!db->open(Database::ReadOnlyDatabase)) {
out << i18n("Baloo Index could not be opened") << endl;
return 1;
}
diff --git a/src/tools/balooshow/main.cpp b/src/tools/balooshow/main.cpp
index f45f2e0..54c64df 100644
--- a/src/tools/balooshow/main.cpp
+++ b/src/tools/balooshow/main.cpp
@@ -101,7 +101,7 @@ int main(int argc, char* argv[])
QString text;
Baloo::Database *db = Baloo::globalDatabaseInstance();
- if (!db->open(Baloo::Database::OpenDatabase)) {
+ if (!db->open(Baloo::Database::ReadOnlyDatabase)) {
stream << i18n("The Baloo index could not be opened. Please run \"balooctl \
status\" to see if Baloo is enabled and working.") << endl;
return 1;
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic