diff --git a/src/engine/writetransaction.cpp b/src/engine/writetransaction.cpp --- a/src/engine/writetransaction.cpp +++ b/src/engine/writetransaction.cpp @@ -265,6 +265,12 @@ PostingDB postingDB(m_dbis.postingDbi, m_txn); PositionDB positionDB(m_dbis.positionDBi, m_txn); + int operationCount = m_pendingOperations.size(); + if (operationCount > 100000) + { + qWarning() << "WriteTransaction->commit(): suspiciously large transaction, operationCount=" << operationCount; + } + QHashIterator > iter(m_pendingOperations); while (iter.hasNext()) { iter.next(); diff --git a/src/tools/balooctl/main.cpp b/src/tools/balooctl/main.cpp --- a/src/tools/balooctl/main.cpp +++ b/src/tools/balooctl/main.cpp @@ -209,15 +209,14 @@ return 1; } - Transaction tr(db, Transaction::ReadWrite); - for (int i = 1; i < parser.positionalArguments().size(); ++i) { const QString url = QFileInfo(parser.positionalArguments().at(i)).absoluteFilePath(); quint64 id = filePathToId(QFile::encodeName(url)); if (id == 0) { out << "Could not stat file: " << url << endl; continue; } + Transaction tr(db, Transaction::ReadWrite); if (tr.inPhaseOne(id)) { out << "Skipping: " << url << " Reason: Already scheduled for indexing\n"; continue; @@ -229,8 +228,8 @@ Indexer indexer(url, &tr); out << "Indexing " << url << endl; indexer.index(); + tr.commit(); } - tr.commit(); out << "File(s) indexed\n"; return 0; @@ -248,24 +247,23 @@ return 1; } - Transaction tr(db, Transaction::ReadWrite); - for (int i = 1; i < parser.positionalArguments().size(); ++i) { const QString url = QFileInfo(parser.positionalArguments().at(i)).absoluteFilePath(); quint64 id = filePathToId(QFile::encodeName(url)); if (id == 0) { out << "Could not stat file: " << url << endl; continue; } + Transaction tr(db, Transaction::ReadWrite); if (tr.documentData(id).isEmpty()) { out << "Skipping: " << url << " Reason: Not yet indexed\n"; continue; } Indexer indexer(url, &tr); out << "Clearing " << url << endl; tr.removeDocument(id); + tr.commit(); } - tr.commit(); out << "File(s) cleared\n"; return 0;