[Pkg-owncloud-commits] [owncloud-client] 08/20: NetworkJobs: Propagator jobs keep others from expiring. #2155
Sandro Knauß
hefee-guest at moszumanska.debian.org
Fri Oct 24 20:08:12 UTC 2014
This is an automated email from the git hooks/post-receive script.
hefee-guest pushed a commit to branch sid
in repository owncloud-client.
commit b881b6db4e86bc71627986ee0b7cea79a6640ef1
Author: Christian Kamm <kamm at incasoftware.de>
Date: Thu Sep 18 14:00:51 2014 +0200
NetworkJobs: Propagator jobs keep others from expiring. #2155
In some owncloud server setups multiple concurrent connections for the
same session are not supported: owncloud/core#11153
This causes issues with multiple uploads and downloads. A usual symptom
is the quota job failing and the sync aborting.
This workaround lets activity on the propagator's GET and PUT jobs
reset the timeout of all network jobs. That way, queries like the quota
job would not time out while a large up/download is in progress.
(cherry picked from commit 2eec85a97cdf6e32be368de631fa7a3899740c06)
---
src/mirall/account.h | 2 ++
src/mirall/networkjobs.cpp | 23 ++++++++++++++++-------
src/mirall/networkjobs.h | 4 ++--
src/mirall/propagator_qnam.cpp | 4 ++--
4 files changed, 22 insertions(+), 11 deletions(-)
diff --git a/src/mirall/account.h b/src/mirall/account.h
index 85e91b6..383be5b 100644
--- a/src/mirall/account.h
+++ b/src/mirall/account.h
@@ -154,8 +154,10 @@ public:
QNetworkAccessManager* networkAccessManager();
QuotaInfo *quotaInfo();
+
signals:
void stateChanged(int state);
+ void propagatorNetworkActivity();
protected Q_SLOTS:
void slotHandleErrors(QNetworkReply*,QList<QSslError>);
diff --git a/src/mirall/networkjobs.cpp b/src/mirall/networkjobs.cpp
index 520b854..ee40fb1 100644
--- a/src/mirall/networkjobs.cpp
+++ b/src/mirall/networkjobs.cpp
@@ -50,6 +50,15 @@ AbstractNetworkJob::AbstractNetworkJob(Account *account, const QString &path, QO
_timer.setSingleShot(true);
_timer.setInterval(10*1000); // default to 10 seconds.
connect(&_timer, SIGNAL(timeout()), this, SLOT(slotTimeout()));
+
+ connect(this, SIGNAL(networkActivity()), SLOT(resetTimeout()));
+
+ // Network activity on the propagator jobs (GET/PUT) keeps all requests alive.
+ // This is a workaround for OC instances which only support one
+ // parallel up and download
+ if (_account) {
+ connect(_account, SIGNAL(propagatorNetworkActivity()), SLOT(resetTimeout()));
+ }
}
void AbstractNetworkJob::setReply(QNetworkReply *reply)
@@ -80,11 +89,6 @@ void AbstractNetworkJob::setIgnoreCredentialFailure(bool ignore)
_ignoreCredentialFailure = ignore;
}
-void AbstractNetworkJob::setAccount(Account *account)
-{
- _account = account;
-}
-
void AbstractNetworkJob::setPath(const QString &path)
{
_path = path;
@@ -93,6 +97,8 @@ void AbstractNetworkJob::setPath(const QString &path)
void AbstractNetworkJob::setupConnections(QNetworkReply *reply)
{
connect(reply, SIGNAL(finished()), SLOT(slotFinished()));
+ connect(reply, SIGNAL(downloadProgress(qint64,qint64)), SIGNAL(networkActivity()));
+ connect(reply, SIGNAL(uploadProgress(qint64,qint64)), SIGNAL(networkActivity()));
}
QNetworkReply* AbstractNetworkJob::addTimer(QNetworkReply *reply)
@@ -179,8 +185,11 @@ QString AbstractNetworkJob::responseTimestamp()
return _responseTimestamp;
}
-AbstractNetworkJob::~AbstractNetworkJob() {
- _reply->deleteLater();
+AbstractNetworkJob::~AbstractNetworkJob()
+{
+ if (_reply) {
+ _reply->deleteLater();
+ }
}
void AbstractNetworkJob::start()
diff --git a/src/mirall/networkjobs.h b/src/mirall/networkjobs.h
index 6f08343..42a9772 100644
--- a/src/mirall/networkjobs.h
+++ b/src/mirall/networkjobs.h
@@ -55,15 +55,14 @@ public:
virtual void start();
- void setAccount(Account *account);
Account* account() const { return _account; }
+
void setPath(const QString &path);
QString path() const { return _path; }
void setReply(QNetworkReply *reply);
QNetworkReply* reply() const { return _reply; }
-
void setIgnoreCredentialFailure(bool ignore);
bool ignoreCredentialFailure() const { return _ignoreCredentialFailure; }
@@ -75,6 +74,7 @@ public slots:
void resetTimeout();
signals:
void networkError(QNetworkReply *reply);
+ void networkActivity();
protected:
void setupConnections(QNetworkReply *reply);
QNetworkReply* davRequest(const QByteArray& verb, const QString &relPath,
diff --git a/src/mirall/propagator_qnam.cpp b/src/mirall/propagator_qnam.cpp
index 5cdda12..304ed7e 100644
--- a/src/mirall/propagator_qnam.cpp
+++ b/src/mirall/propagator_qnam.cpp
@@ -73,7 +73,7 @@ void PUTFileJob::start() {
}
connect(reply(), SIGNAL(uploadProgress(qint64,qint64)), this, SIGNAL(uploadProgress(qint64,qint64)));
- connect(reply(), SIGNAL(uploadProgress(qint64,qint64)), this, SLOT(resetTimeout()));
+ connect(this, SIGNAL(networkActivity()), account(), SIGNAL(propagatorNetworkActivity()));
AbstractNetworkJob::start();
}
@@ -419,6 +419,7 @@ void GETFileJob::start() {
connect(reply(), SIGNAL(metaDataChanged()), this, SLOT(slotMetaDataChanged()));
connect(reply(), SIGNAL(readyRead()), this, SLOT(slotReadyRead()));
connect(reply(), SIGNAL(downloadProgress(qint64,qint64)), this, SIGNAL(downloadProgress(qint64,qint64)));
+ connect(this, SIGNAL(networkActivity()), account(), SIGNAL(propagatorNetworkActivity()));
AbstractNetworkJob::start();
}
@@ -509,7 +510,6 @@ void GETFileJob::slotReadyRead()
}
}
}
- resetTimeout();
}
void PropagateDownloadFileQNAM::start()
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-owncloud/owncloud-client.git
More information about the Pkg-owncloud-commits
mailing list