|
Rex Dieter |
adf30af |
From ac118e12fca25826340b6c8561939be19c4b7170 Mon Sep 17 00:00:00 2001
|
|
Rex Dieter |
adf30af |
From: =?UTF-8?q?Dan=20Vr=C3=A1til?= <dvratil@redhat.com>
|
|
Rex Dieter |
adf30af |
Date: Mon, 8 Dec 2014 13:55:58 +0100
|
|
Rex Dieter |
adf30af |
Subject: [PATCH 27/30] Minor improvements in StatisticsCache as suggested by
|
|
Rex Dieter |
adf30af |
Millian
|
|
Rex Dieter |
adf30af |
|
|
Rex Dieter |
adf30af |
* rename instance() to self()
|
|
Rex Dieter |
adf30af |
* first call self() from main thread to avoid having mutex
|
|
Rex Dieter |
adf30af |
* use CountQueryBuilder
|
|
Rex Dieter |
adf30af |
---
|
|
Rex Dieter |
adf30af |
server/src/akonadi.cpp | 4 +++-
|
|
Rex Dieter |
adf30af |
server/src/handler/select.cpp | 2 +-
|
|
Rex Dieter |
adf30af |
server/src/handler/status.cpp | 2 +-
|
|
Rex Dieter |
adf30af |
server/src/handlerhelper.cpp | 2 +-
|
|
Rex Dieter |
adf30af |
server/src/storage/collectionstatistics.cpp | 10 ++--------
|
|
Rex Dieter |
adf30af |
server/src/storage/collectionstatistics.h | 2 +-
|
|
Rex Dieter |
adf30af |
server/src/storage/notificationcollector.cpp | 10 +++++-----
|
|
Rex Dieter |
adf30af |
7 files changed, 14 insertions(+), 18 deletions(-)
|
|
Rex Dieter |
adf30af |
|
|
Rex Dieter |
adf30af |
diff --git a/server/src/akonadi.cpp b/server/src/akonadi.cpp
|
|
Rex Dieter |
adf30af |
index 5369320..faef3a5 100644
|
|
Rex Dieter |
adf30af |
--- a/server/src/akonadi.cpp
|
|
Rex Dieter |
adf30af |
+++ b/server/src/akonadi.cpp
|
|
Rex Dieter |
adf30af |
@@ -35,6 +35,7 @@
|
|
Rex Dieter |
adf30af |
#include "utils.h"
|
|
Rex Dieter |
adf30af |
#include "debuginterface.h"
|
|
Rex Dieter |
adf30af |
#include "storage/itemretrievalthread.h"
|
|
Rex Dieter |
adf30af |
+#include "storage/collectionstatistics.h"
|
|
Rex Dieter |
adf30af |
#include "preprocessormanager.h"
|
|
Rex Dieter |
adf30af |
#include "search/searchmanager.h"
|
|
Rex Dieter |
adf30af |
#include "search/searchtaskmanagerthread.h"
|
|
Rex Dieter |
adf30af |
@@ -169,6 +170,8 @@ bool AkonadiServer::init()
|
|
Rex Dieter |
adf30af |
new DebugInterface( this );
|
|
Rex Dieter |
adf30af |
ResourceManager::self();
|
|
Rex Dieter |
adf30af |
|
|
Rex Dieter |
adf30af |
+ CollectionStatistics::self();
|
|
Rex Dieter |
adf30af |
+
|
|
Rex Dieter |
adf30af |
// Initialize the preprocessor manager
|
|
Rex Dieter |
adf30af |
PreprocessorManager::init();
|
|
Rex Dieter |
adf30af |
|
|
Rex Dieter |
adf30af |
@@ -194,7 +197,6 @@ bool AkonadiServer::init()
|
|
Rex Dieter |
adf30af |
mAgentSearchManagerThread = new SearchTaskManagerThread( this );
|
|
Rex Dieter |
adf30af |
mAgentSearchManagerThread->start();
|
|
Rex Dieter |
adf30af |
|
|
Rex Dieter |
adf30af |
-
|
|
Rex Dieter |
adf30af |
const QStringList searchManagers = settings.value( QLatin1String( "Search/Manager" ),
|
|
Rex Dieter |
adf30af |
QStringList() << QLatin1String( "Nepomuk" )
|
|
Rex Dieter |
adf30af |
<< QLatin1String( "Agent" ) ).toStringList();
|
|
Rex Dieter |
adf30af |
diff --git a/server/src/handler/select.cpp b/server/src/handler/select.cpp
|
|
Rex Dieter |
adf30af |
index f1ecc44..a94d971 100644
|
|
Rex Dieter |
adf30af |
--- a/server/src/handler/select.cpp
|
|
Rex Dieter |
adf30af |
+++ b/server/src/handler/select.cpp
|
|
Rex Dieter |
adf30af |
@@ -97,7 +97,7 @@ bool Select::parseStream()
|
|
Rex Dieter |
adf30af |
response.setString( "FLAGS (" + Flag::joinByName( Flag::retrieveAll(), QLatin1String( " " ) ).toLatin1() + ")" );
|
|
Rex Dieter |
adf30af |
Q_EMIT responseAvailable( response );
|
|
Rex Dieter |
adf30af |
|
|
Rex Dieter |
adf30af |
- const CollectionStatistics::Statistics stats = CollectionStatistics::instance()->statistics(col);
|
|
Rex Dieter |
adf30af |
+ const CollectionStatistics::Statistics stats = CollectionStatistics::self()->statistics(col);
|
|
Rex Dieter |
adf30af |
if ( stats.count == -1 ) {
|
|
Rex Dieter |
adf30af |
return failureResponse( "Unable to determine item count" );
|
|
Rex Dieter |
adf30af |
}
|
|
Rex Dieter |
adf30af |
diff --git a/server/src/handler/status.cpp b/server/src/handler/status.cpp
|
|
Rex Dieter |
adf30af |
index 283532c..5fc9bb1 100644
|
|
Rex Dieter |
adf30af |
--- a/server/src/handler/status.cpp
|
|
Rex Dieter |
adf30af |
+++ b/server/src/handler/status.cpp
|
|
Rex Dieter |
adf30af |
@@ -63,7 +63,7 @@ bool Status::parseStream()
|
|
Rex Dieter |
adf30af |
// Responses:
|
|
Rex Dieter |
adf30af |
// REQUIRED untagged responses: STATUS
|
|
Rex Dieter |
adf30af |
|
|
Rex Dieter |
adf30af |
- const CollectionStatistics::Statistics &stats = CollectionStatistics::instance()->statistics(col);
|
|
Rex Dieter |
adf30af |
+ const CollectionStatistics::Statistics &stats = CollectionStatistics::self()->statistics(col);
|
|
Rex Dieter |
adf30af |
if (stats.count == -1) {
|
|
Rex Dieter |
adf30af |
return failureResponse( "Failed to query statistics." );
|
|
Rex Dieter |
adf30af |
}
|
|
Rex Dieter |
adf30af |
diff --git a/server/src/handlerhelper.cpp b/server/src/handlerhelper.cpp
|
|
Rex Dieter |
adf30af |
index 39583ce..a88bc6e 100644
|
|
Rex Dieter |
adf30af |
--- a/server/src/handlerhelper.cpp
|
|
Rex Dieter |
adf30af |
+++ b/server/src/handlerhelper.cpp
|
|
Rex Dieter |
adf30af |
@@ -166,7 +166,7 @@ QByteArray HandlerHelper::collectionToByteArray( const Collection &col, bool hid
|
|
Rex Dieter |
adf30af |
b += " " AKONADI_PARAM_VIRTUAL " " + QByteArray::number( col.isVirtual() ) + ' ';
|
|
Rex Dieter |
adf30af |
|
|
Rex Dieter |
adf30af |
if ( includeStatistics ) {
|
|
Rex Dieter |
adf30af |
- const CollectionStatistics::Statistics &stats = CollectionStatistics::instance()->statistics(col);
|
|
Rex Dieter |
adf30af |
+ const CollectionStatistics::Statistics &stats = CollectionStatistics::self()->statistics(col);
|
|
Rex Dieter |
adf30af |
if (stats.count > -1) {
|
|
Rex Dieter |
adf30af |
b += AKONADI_ATTRIBUTE_MESSAGES " " + QByteArray::number( stats.count ) + ' ';
|
|
Rex Dieter |
adf30af |
b += AKONADI_ATTRIBUTE_UNSEEN " ";
|
|
Rex Dieter |
adf30af |
diff --git a/server/src/storage/collectionstatistics.cpp b/server/src/storage/collectionstatistics.cpp
|
|
Rex Dieter |
adf30af |
index b2c6915..7307956 100644
|
|
Rex Dieter |
adf30af |
--- a/server/src/storage/collectionstatistics.cpp
|
|
Rex Dieter |
adf30af |
+++ b/server/src/storage/collectionstatistics.cpp
|
|
Rex Dieter |
adf30af |
@@ -31,14 +31,11 @@ using namespace Akonadi::Server;
|
|
Rex Dieter |
adf30af |
|
|
Rex Dieter |
adf30af |
CollectionStatistics *CollectionStatistics::sInstance = 0;
|
|
Rex Dieter |
adf30af |
|
|
Rex Dieter |
adf30af |
-CollectionStatistics* CollectionStatistics::instance()
|
|
Rex Dieter |
adf30af |
+CollectionStatistics* CollectionStatistics::self()
|
|
Rex Dieter |
adf30af |
{
|
|
Rex Dieter |
adf30af |
- static QMutex lock;
|
|
Rex Dieter |
adf30af |
- lock.lock();
|
|
Rex Dieter |
adf30af |
if (sInstance == 0) {
|
|
Rex Dieter |
adf30af |
sInstance = new CollectionStatistics();
|
|
Rex Dieter |
adf30af |
}
|
|
Rex Dieter |
adf30af |
- lock.unlock();
|
|
Rex Dieter |
adf30af |
return sInstance;
|
|
Rex Dieter |
adf30af |
}
|
|
Rex Dieter |
adf30af |
|
|
Rex Dieter |
adf30af |
@@ -60,11 +57,8 @@ const CollectionStatistics::Statistics& CollectionStatistics::statistics(const C
|
|
Rex Dieter |
adf30af |
|
|
Rex Dieter |
adf30af |
CollectionStatistics::Statistics CollectionStatistics::getCollectionStatistics(const Collection &col)
|
|
Rex Dieter |
adf30af |
{
|
|
Rex Dieter |
adf30af |
- QueryBuilder qb(PimItem::tableName());
|
|
Rex Dieter |
adf30af |
// COUNT(DISTINCT PimItemTable.id)
|
|
Rex Dieter |
adf30af |
- qb.addAggregation(QString::fromLatin1("DISTINCT %1")
|
|
Rex Dieter |
adf30af |
- .arg(PimItem::idFullColumnName()),
|
|
Rex Dieter |
adf30af |
- QLatin1String("count"));
|
|
Rex Dieter |
adf30af |
+ CountQueryBuilder qb(PimItem::tableName(), PimItem::idFullColumnName(), CountQueryBuilder::Distinct);
|
|
Rex Dieter |
adf30af |
// SUM(PimItemTable.size)
|
|
Rex Dieter |
adf30af |
qb.addAggregation(PimItem::sizeFullColumnName(), QLatin1String("sum"));
|
|
Rex Dieter |
adf30af |
// SUM(CASE WHEN FlagTable.name IN ('\SEEN', '$IGNORED') THEN 1 ELSE 0 END)
|
|
Rex Dieter |
adf30af |
diff --git a/server/src/storage/collectionstatistics.h b/server/src/storage/collectionstatistics.h
|
|
Rex Dieter |
adf30af |
index 2c0af6a..a0b9f24 100644
|
|
Rex Dieter |
adf30af |
--- a/server/src/storage/collectionstatistics.h
|
|
Rex Dieter |
adf30af |
+++ b/server/src/storage/collectionstatistics.h
|
|
Rex Dieter |
adf30af |
@@ -50,7 +50,7 @@ public:
|
|
Rex Dieter |
adf30af |
qint64 read;
|
|
Rex Dieter |
adf30af |
};
|
|
Rex Dieter |
adf30af |
|
|
Rex Dieter |
adf30af |
- static CollectionStatistics* instance();
|
|
Rex Dieter |
adf30af |
+ static CollectionStatistics* self();
|
|
Rex Dieter |
adf30af |
|
|
Rex Dieter |
adf30af |
const Statistics& statistics(const Collection &col);
|
|
Rex Dieter |
adf30af |
void invalidateCollection(const Collection &col);
|
|
Rex Dieter |
adf30af |
diff --git a/server/src/storage/notificationcollector.cpp b/server/src/storage/notificationcollector.cpp
|
|
Rex Dieter |
adf30af |
index dbc7883..7ed255c 100644
|
|
Rex Dieter |
adf30af |
--- a/server/src/storage/notificationcollector.cpp
|
|
Rex Dieter |
adf30af |
+++ b/server/src/storage/notificationcollector.cpp
|
|
Rex Dieter |
adf30af |
@@ -134,7 +134,7 @@ void NotificationCollector::collectionChanged( const Collection &collection,
|
|
Rex Dieter |
adf30af |
if ( AkonadiServer::instance()->intervalChecker() ) {
|
|
Rex Dieter |
adf30af |
AkonadiServer::instance()->intervalChecker()->collectionAdded( collection.id() );
|
|
Rex Dieter |
adf30af |
}
|
|
Rex Dieter |
adf30af |
- CollectionStatistics::instance()->invalidateCollection(collection);
|
|
Rex Dieter |
adf30af |
+ CollectionStatistics::self()->invalidateCollection(collection);
|
|
Rex Dieter |
adf30af |
collectionNotification( NotificationMessageV2::Modify, collection, collection.parentId(), -1, resource, changes.toSet() );
|
|
Rex Dieter |
adf30af |
}
|
|
Rex Dieter |
adf30af |
|
|
Rex Dieter |
adf30af |
@@ -161,7 +161,7 @@ void NotificationCollector::collectionRemoved( const Collection &collection,
|
|
Rex Dieter |
adf30af |
if ( AkonadiServer::instance()->intervalChecker() ) {
|
|
Rex Dieter |
adf30af |
AkonadiServer::instance()->intervalChecker()->collectionRemoved( collection.id() );
|
|
Rex Dieter |
adf30af |
}
|
|
Rex Dieter |
adf30af |
- CollectionStatistics::instance()->invalidateCollection(collection);
|
|
Rex Dieter |
adf30af |
+ CollectionStatistics::self()->invalidateCollection(collection);
|
|
Rex Dieter |
adf30af |
|
|
Rex Dieter |
adf30af |
collectionNotification( NotificationMessageV2::Remove, collection, collection.parentId(), -1, resource );
|
|
Rex Dieter |
adf30af |
}
|
|
Rex Dieter |
adf30af |
@@ -187,7 +187,7 @@ void NotificationCollector::collectionUnsubscribed( const Collection &collection
|
|
Rex Dieter |
adf30af |
if ( AkonadiServer::instance()->intervalChecker() ) {
|
|
Rex Dieter |
adf30af |
AkonadiServer::instance()->intervalChecker()->collectionRemoved( collection.id() );
|
|
Rex Dieter |
adf30af |
}
|
|
Rex Dieter |
adf30af |
- CollectionStatistics::instance()->invalidateCollection(collection);
|
|
Rex Dieter |
adf30af |
+ CollectionStatistics::self()->invalidateCollection(collection);
|
|
Rex Dieter |
adf30af |
|
|
Rex Dieter |
adf30af |
collectionNotification( NotificationMessageV2::Unsubscribe, collection, collection.parentId(), -1, resource, QSet<QByteArray>() );
|
|
Rex Dieter |
adf30af |
}
|
|
Rex Dieter |
adf30af |
@@ -288,7 +288,7 @@ void NotificationCollector::itemNotification( NotificationMessageV2::Operation o
|
|
Rex Dieter |
adf30af |
copy.setParentCollection( iter.key() );
|
|
Rex Dieter |
adf30af |
copy.setResource( resource );
|
|
Rex Dieter |
adf30af |
|
|
Rex Dieter |
adf30af |
- CollectionStatistics::instance()->invalidateCollection(Collection::retrieveById(iter.key()));
|
|
Rex Dieter |
adf30af |
+ CollectionStatistics::self()->invalidateCollection(Collection::retrieveById(iter.key()));
|
|
Rex Dieter |
adf30af |
dispatchNotification( copy );
|
|
Rex Dieter |
adf30af |
}
|
|
Rex Dieter |
adf30af |
|
|
Rex Dieter |
adf30af |
@@ -311,7 +311,7 @@ void NotificationCollector::itemNotification( NotificationMessageV2::Operation o
|
|
Rex Dieter |
adf30af |
}
|
|
Rex Dieter |
adf30af |
msg.setResource( res );
|
|
Rex Dieter |
adf30af |
|
|
Rex Dieter |
adf30af |
- CollectionStatistics::instance()->invalidateCollection(col);
|
|
Rex Dieter |
adf30af |
+ CollectionStatistics::self()->invalidateCollection(col);
|
|
Rex Dieter |
adf30af |
dispatchNotification( msg );
|
|
Rex Dieter |
adf30af |
}
|
|
Rex Dieter |
adf30af |
|
|
Rex Dieter |
adf30af |
--
|
|
Rex Dieter |
adf30af |
2.1.0
|
|
Rex Dieter |
adf30af |
|