[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    Re: [kde-runtime] nepomuk/services/storage/lib: Cache the dbus interface for org.kde.nepomuk.DataMan
From:       Sebastian_Trüg <sebastian () trueg ! de>
Date:       2012-02-06 19:17:07
Message-ID: 4F302733.2040200 () trueg ! de
[Download RAW message or body]

On 02/06/2012 07:18 PM, Vishesh Handa wrote:
> Oooo! Nice.
> 
> I think we should probably do the same for the dms port in kdelibs.
> 
> @Sebastian: Any rough timeline of when you plan to merge it?

It is already merged...

> On Mon, Feb 6, 2012 at 11:11 PM, David Faure <faure@kde.org
> <mailto:faure@kde.org>> wrote:
> 
>     Git commit 8f3b4c29f5605580f6d2955532f1440af54fecb8 by David Faure.
>     Committed on 06/02/2012 at 18:39.
>     Pushed by dfaure into branch 'master'.
> 
>     Cache the dbus interface for org.kde.nepomuk.DataManagement
> 
>     Regularly breaking into nepomukfeeder with gdb showed that it was always
>     always in the code that connects via DBus to that service, since each
>     and every job had to do that.
> 
>     I tested what happens when killing and restarting nepomukstorage,
>     and QtDBus manages to reconnect just fine, with the same interface
>     instance.
>     KMail locks up or crashes in Soprano::Client::SocketHandler, but that's
>     another story.
> 
>     CCMAIL: chrigi_1@fastmail.fm <mailto:chrigi_1@fastmail.fm>,
>     sebastian@trueg.de <mailto:sebastian@trueg.de>
> 
>     M  +2    -4    nepomuk/services/storage/lib/createresourcejob.cpp
>     M  +2    -6    nepomuk/services/storage/lib/describeresourcesjob.cpp
>     M  +18   -7    nepomuk/services/storage/lib/genericdatamanagementjob.cpp
>     M  +4    -0    nepomuk/services/storage/lib/genericdatamanagementjob_p.h
>     M  +4    -7    nepomuk/services/storage/lib/storeresourcesjob.cpp
> 
>     http://commits.kde.org/kde-runtime/8f3b4c29f5605580f6d2955532f1440af54fecb8
> 
>     diff --git a/nepomuk/services/storage/lib/createresourcejob.cpp
>     b/nepomuk/services/storage/lib/createresourcejob.cpp
>     index b0a1763..d2195fb 100644
>     --- a/nepomuk/services/storage/lib/createresourcejob.cpp
>     +++ b/nepomuk/services/storage/lib/createresourcejob.cpp
>     @@ -49,11 +49,9 @@
>     Nepomuk::CreateResourceJob::CreateResourceJob(const QList<QUrl>& types,
>         : KJob(0),
>           d(new Private)
>      {
>     -    org::kde::nepomuk::DataManagement
>     dms(QLatin1String(DMS_DBUS_SERVICE),
>     -                                        
>      QLatin1String("/datamanagement"),
>     -                                        
>      KDBusConnectionPool::threadConnection());
>     +    org::kde::nepomuk::DataManagement* dms =
>     Nepomuk::dataManagementDBusInterface();
>         QDBusPendingCallWatcher* dbusCallWatcher
>     -            = new
>     QDBusPendingCallWatcher(dms.createResource(Nepomuk::DBus::convertUriList(types),
>     +           = new
>     QDBusPendingCallWatcher(dms->createResource(Nepomuk::DBus::convertUriList(types),
>                                                                  label,
>                                                                
>      description,
>                                                                
>      component.componentName()));
>     diff --git a/nepomuk/services/storage/lib/describeresourcesjob.cpp
>     b/nepomuk/services/storage/lib/describeresourcesjob.cpp
>     index 60a4420..5fd4165 100644
>     --- a/nepomuk/services/storage/lib/describeresourcesjob.cpp
>     +++ b/nepomuk/services/storage/lib/describeresourcesjob.cpp
>     @@ -49,13 +49,9 @@
>     Nepomuk::DescribeResourcesJob::DescribeResourcesJob(const
>     QList<QUrl>& resources
>         : KJob(0),
>           d(new Private)
>      {
>     -    DBus::registerDBusTypes();
>     -
>     -    org::kde::nepomuk::DataManagement
>     dms(QLatin1String(DMS_DBUS_SERVICE),
>     -                                        
>      QLatin1String("/datamanagement"),
>     -                                        
>      KDBusConnectionPool::threadConnection());
>     +    org::kde::nepomuk::DataManagement* dms =
>     Nepomuk::dataManagementDBusInterface();
>         QDBusPendingCallWatcher* dbusCallWatcher
>     -            = new
>     QDBusPendingCallWatcher(dms.describeResources(Nepomuk::DBus::convertUriList(resources),
>     +           = new
>     QDBusPendingCallWatcher(dms->describeResources(Nepomuk::DBus::convertUriList(resources),
>                                                                    
>     int(flags),
>                                                                    
>     Nepomuk::DBus::convertUriList(targetGroups)));
>         connect(dbusCallWatcher, SIGNAL(finished(QDBusPendingCallWatcher*)),
>     diff --git
>     a/nepomuk/services/storage/lib/genericdatamanagementjob.cpp
>     b/nepomuk/services/storage/lib/genericdatamanagementjob.cpp
>     index 3d79b62..a5d38f4 100644
>     --- a/nepomuk/services/storage/lib/genericdatamanagementjob.cpp
>     +++ b/nepomuk/services/storage/lib/genericdatamanagementjob.cpp
>     @@ -30,6 +30,7 @@
> 
>      #include <QtCore/QVariant>
>      #include <QtCore/QHash>
>     +#include <QThreadStorage>
> 
>      #include <KDebug>
> 
>     @@ -42,14 +43,8 @@
>     Nepomuk::GenericDataManagementJob::GenericDataManagementJob(const
>     char *methodNa
>                                                                
>     QGenericArgument val5)
>         : KJob(0)
>      {
>     -    // DBus types necessary for storeResources
>     -    DBus::registerDBusTypes();
>     -
>     -    org::kde::nepomuk::DataManagement
>     dms(QLatin1String(DMS_DBUS_SERVICE),
>     -                                        
>      QLatin1String("/datamanagement"),
>     -                                        
>      KDBusConnectionPool::threadConnection());
>         QDBusPendingReply<> reply;
>     -    QMetaObject::invokeMethod(&dms,
>     +    QMetaObject::invokeMethod(Nepomuk::dataManagementDBusInterface(),
>                                   methodName,
>                                   Qt::DirectConnection,
>                                   Q_RETURN_ARG(QDBusPendingReply<> , reply),
>     @@ -86,4 +81,20 @@ void
>     Nepomuk::GenericDataManagementJob::slotDBusCallFinished(QDBusPendingCallWat
>         emitResult();
>      }
> 
>     +QThreadStorage<OrgKdeNepomukDataManagementInterface *> s_perThreadDms;
>     +
>     +OrgKdeNepomukDataManagementInterface*
>     Nepomuk::dataManagementDBusInterface()
>     +{
>     +  if (!s_perThreadDms.hasLocalData()) {
>     +    // DBus types necessary for storeResources
>     +    DBus::registerDBusTypes();
>     +
>     +    s_perThreadDms.setLocalData(
>     +      new
>     org::kde::nepomuk::DataManagement(QLatin1String(DMS_DBUS_SERVICE),
>     +                                          
>      QLatin1String("/datamanagement"),
>     +                                          
>      KDBusConnectionPool::threadConnection()));
>     +  }
>     +  return s_perThreadDms.localData();
>     +}
>     +
>      #include "genericdatamanagementjob_p.moc"
>     diff --git
>     a/nepomuk/services/storage/lib/genericdatamanagementjob_p.h
>     b/nepomuk/services/storage/lib/genericdatamanagementjob_p.h
>     index 4774ba0..a741ad6 100644
>     --- a/nepomuk/services/storage/lib/genericdatamanagementjob_p.h
>     +++ b/nepomuk/services/storage/lib/genericdatamanagementjob_p.h
>     @@ -33,6 +33,7 @@
>      #include <KJob>
> 
>      class QDBusPendingCallWatcher;
>     +class OrgKdeNepomukDataManagementInterface;
> 
>      namespace Nepomuk {
>      class GenericDataManagementJob : public KJob
>     @@ -59,6 +60,9 @@ public:
>      private Q_SLOTS:
>         void slotDBusCallFinished(QDBusPendingCallWatcher*);
>      };
>     +
>     +OrgKdeNepomukDataManagementInterface* dataManagementDBusInterface();
>     +
>      }
> 
>      #endif
>     diff --git a/nepomuk/services/storage/lib/storeresourcesjob.cpp
>     b/nepomuk/services/storage/lib/storeresourcesjob.cpp
>     index 55f3637..592f280 100644
>     --- a/nepomuk/services/storage/lib/storeresourcesjob.cpp
>     +++ b/nepomuk/services/storage/lib/storeresourcesjob.cpp
>     @@ -54,15 +54,12 @@
>     Nepomuk::StoreResourcesJob::StoreResourcesJob(const
>     Nepomuk::SimpleResourceGraph
>           d( new Nepomuk::StoreResourcesJob::Private )
>      {
>         d->q = this;
>     -    DBus::registerDBusTypes();
> 
>     -    org::kde::nepomuk::DataManagement
>     dms(QLatin1String(DMS_DBUS_SERVICE),
>     -                                        
>      QLatin1String("/datamanagement"),
>     -                                        
>      QDBusConnection::sessionBus());
>     +    org::kde::nepomuk::DataManagement* dms =
>     Nepomuk::dataManagementDBusInterface();
>         QDBusPendingCallWatcher* dbusCallWatcher
>     -    = new QDBusPendingCallWatcher(dms.storeResources(
>     resources.toList(), identificationMode,
>     -                                                      flags,
>     additionalMetadata,
>     -                                                    
>      component.componentName() ));
>     +    = new QDBusPendingCallWatcher(dms->storeResources(
>     resources.toList(), identificationMode,
>     +                                                       flags,
>     additionalMetadata,
>     +                                                      
>     component.componentName() ));
> 
>         connect(dbusCallWatcher, SIGNAL(finished(QDBusPendingCallWatcher*)),
>                 this,
>     SLOT(_k_slotDBusCallFinished(QDBusPendingCallWatcher*)));
> 
> 
> 
> 
> -- 
> Vishesh Handa
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic