fbdaemon/fbcoordinator.cpp fbdaemon/fbcoordinator.h jobs/sequentialcompositejob.cpp

Christian Mollekopf mollekopf at kolabsys.com
Wed Jul 25 10:11:01 CEST 2012


 fbdaemon/fbcoordinator.cpp      |   37 ++++++++++++++++++++++++++-----------
 fbdaemon/fbcoordinator.h        |    4 ++++
 jobs/sequentialcompositejob.cpp |    1 +
 3 files changed, 31 insertions(+), 11 deletions(-)

New commits:
commit a6a5afc54f2ca3fdf08e4e400f026199d1b03e2a
Author: Christian Mollekopf <mollekopf at kolabsys.com>
Date:   Wed Jul 25 10:10:11 2012 +0200

    use a queue containing the user identifiers instead of generating loads of jobs right away.

diff --git a/fbdaemon/fbcoordinator.cpp b/fbdaemon/fbcoordinator.cpp
index 9d72d10..4568bcb 100644
--- a/fbdaemon/fbcoordinator.cpp
+++ b/fbdaemon/fbcoordinator.cpp
@@ -32,28 +32,40 @@ FBCoordinator::FBCoordinator(QObject* parent)
 
 void FBCoordinator::generateForAllUsers()
 {
+    if (!mUserQueue.isEmpty()) {
+        kWarning() << "there is an existing processing queue, aborting";
+        return;
+    }
     GetUserListJob *getUsersJob = new GetUserListJob(Settings::instance().getServerUri(), Settings::instance().getServerPort(), this);
     connect(getUsersJob, SIGNAL(result(KJob*)), this, SLOT(onGotUserList(KJob*)));
     getUsersJob->start();
 }
 void FBCoordinator::onGotUserList(KJob *job)
 {
-    const QString server = Settings::instance().getServerUri();
-    const qint16 port =  Settings::instance().getServerPort();
     GetUserListJob *getUsersJob = static_cast<GetUserListJob*>(job);
-    SequentialCompositeJob *generateJobs = new SequentialCompositeJob(this);
-    SequentialCompositeJob *aggregateJobs = new SequentialCompositeJob(this);
     foreach(const QString &user, getUsersJob->getUserList()) {
-        generateJobs->addSubjob(new FBGeneratorJob(server, port, user, generateJobs));
-        aggregateJobs->addSubjob(new FBAggregatorJob(server, port, user, aggregateJobs));
+        mUserQueue.enqueue(user);
     }
-    SequentialCompositeJob *allJobs = new SequentialCompositeJob(this);
-    allJobs->addSubjob(generateJobs);
-    allJobs->addSubjob(aggregateJobs);
-    connect(allJobs, SIGNAL(result(KJob*)), this, SLOT(onGeneratorDone(KJob*)));
-    allJobs->start();
+    processQueue();
 }
 
+bool FBCoordinator::processQueue()
+{
+    if (mUserQueue.isEmpty()) {
+        return false;
+    }
+    
+    const QString server = Settings::instance().getServerUri();
+    const qint16 port =  Settings::instance().getServerPort();
+    const QString user = mUserQueue.dequeue();
+    kDebug() << user;
+    SequentialCompositeJob *userJob = new SequentialCompositeJob(this);
+//    userJob->addSubjob(new FBGeneratorJob(server, port, user, userJob));
+//    userJob->addSubjob(new FBAggregatorJob(server, port, user, userJob));
+    connect(userJob, SIGNAL(result(KJob*)), this, SLOT(onGeneratorDone(KJob*)));
+    userJob->start();
+    return true;
+}
 
 void FBCoordinator::generateForUser(const QString& user)
 {
@@ -72,6 +84,9 @@ void FBCoordinator::aggregateForUser(const QString& user)
 
 void FBCoordinator::onGeneratorDone(KJob *job)
 {
+    if (processQueue()) {
+        return;
+    }
     kDebug() << "done";
     emit quit();
 }
diff --git a/fbdaemon/fbcoordinator.h b/fbdaemon/fbcoordinator.h
index d1531ef..9d7afea 100644
--- a/fbdaemon/fbcoordinator.h
+++ b/fbdaemon/fbcoordinator.h
@@ -19,6 +19,7 @@
 #ifndef FBCOORDINATOR_H
 #define FBCOORDINATOR_H
 #include <QObject>
+#include <qqueue.h>
 #include <kjob.h>
 
 /**
@@ -51,6 +52,9 @@ private slots:
     void onGeneratorDone(KJob*);
 public slots:
     void onGotUserList(KJob*);
+private:
+    bool processQueue();
+    QQueue<QString> mUserQueue;
 };
 
 #endif // FBCOORDINATOR_H
diff --git a/jobs/sequentialcompositejob.cpp b/jobs/sequentialcompositejob.cpp
index 854829e..c4e613e 100644
--- a/jobs/sequentialcompositejob.cpp
+++ b/jobs/sequentialcompositejob.cpp
@@ -61,5 +61,6 @@ void SequentialCompositeJob::start()
         nextJob->start();
     } else {
         kWarning() << "no jobs";
+        emitResult();
     }
 }





More information about the commits mailing list