From a4d32efefb3b2b3dcedbd1099d47be4b77278585 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 3 Oct 2016 21:31:46 +0200 Subject: [PATCH 1/5] Added fixed reconnection timeout. --- src/qamqpclient.cpp | 27 +++++++++++++++++----- src/qamqpclient.h | 2 +- src/qamqpclient_p.h | 1 + tests/auto/qamqpclient/tst_qamqpclient.cpp | 20 ++++++++++++++++ 4 files changed, 43 insertions(+), 7 deletions(-) diff --git a/src/qamqpclient.cpp b/src/qamqpclient.cpp index da97f43..f98a111 100644 --- a/src/qamqpclient.cpp +++ b/src/qamqpclient.cpp @@ -19,6 +19,7 @@ QAmqpClientPrivate::QAmqpClientPrivate(QAmqpClient *q) host(AMQP_HOST), virtualHost(AMQP_VHOST), autoReconnect(false), + reconnectFixedTimeout(false), timeout(0), connecting(false), useSsl(false), @@ -186,11 +187,14 @@ void QAmqpClientPrivate::_q_heartbeat() void QAmqpClientPrivate::_q_socketError(QAbstractSocket::SocketError error) { Q_Q(QAmqpClient); - if (timeout <= 0) { - timeout = 1000; - } else { - if (timeout < 120000) - timeout *= 5; + if(reconnectFixedTimeout == false) + { + if (timeout <= 0) { + timeout = 1000; + } else { + if (timeout < 120000) + timeout *= 5; + } } switch (error) { @@ -753,10 +757,21 @@ bool QAmqpClient::autoReconnect() const return d->autoReconnect; } -void QAmqpClient::setAutoReconnect(bool value) +void QAmqpClient::setAutoReconnect(bool value, int timeout) { Q_D(QAmqpClient); d->autoReconnect = value; + + if((value == true) && (timeout > 0)) + { + d->timeout = timeout; + d->reconnectFixedTimeout = true; + } + else + { + d->timeout = 0; + d->reconnectFixedTimeout = false; + } } qint16 QAmqpClient::channelMax() const diff --git a/src/qamqpclient.h b/src/qamqpclient.h index c6e90e4..395c2a4 100644 --- a/src/qamqpclient.h +++ b/src/qamqpclient.h @@ -67,7 +67,7 @@ public: QAmqpAuthenticator *auth() const; bool autoReconnect() const; - void setAutoReconnect(bool value); + void setAutoReconnect(bool value, int timeout = 0); bool isConnected() const; diff --git a/src/qamqpclient_p.h b/src/qamqpclient_p.h index 37856d6..2de4a86 100644 --- a/src/qamqpclient_p.h +++ b/src/qamqpclient_p.h @@ -81,6 +81,7 @@ public: // Network QByteArray buffer; bool autoReconnect; + bool reconnectFixedTimeout; int timeout; bool connecting; bool useSsl; diff --git a/tests/auto/qamqpclient/tst_qamqpclient.cpp b/tests/auto/qamqpclient/tst_qamqpclient.cpp index ffcf8db..ebeca0f 100644 --- a/tests/auto/qamqpclient/tst_qamqpclient.cpp +++ b/tests/auto/qamqpclient/tst_qamqpclient.cpp @@ -23,6 +23,7 @@ private Q_SLOTS: public Q_SLOTS: // temporarily disabled void autoReconnect(); + void autoReconnectTimeout(); void sslConnect(); private: @@ -142,6 +143,25 @@ void tst_QAMQPClient::autoReconnect() QVERIFY(waitForSignal(&client, SIGNAL(connected()), 2)); } +void tst_QAMQPClient::autoReconnectTimeout() +{ + // TODO: this is a fairly crude way of testing this, research + // better alternatives + + QAmqpClient client; + client.setAutoReconnect(true, 3); + client.connectToHost(); + QVERIFY(waitForSignal(&client, SIGNAL(connected()), 60)); + qDebug() <<"connected" ; + QProcess::execute("rabbitmqctl", QStringList() << "stop_app"); + QVERIFY(waitForSignal(&client, SIGNAL(disconnected()), 60)); + qDebug() <<"disconnected" ; + QProcess::execute("rabbitmqctl", QStringList() << "start_app"); + QVERIFY(waitForSignal(&client, SIGNAL(connected()), 60)); + qDebug() <<"connected" ; + +} + void tst_QAMQPClient::tune() { QAmqpClient client; From 275c5dce335d2b6b5d37715301a16dfbbb8789f2 Mon Sep 17 00:00:00 2001 From: De Stefano Date: Mon, 3 Oct 2016 22:44:49 +0200 Subject: [PATCH 2/5] Added GIT_VERSION. --- src/qamqpclient.cpp | 10 +++++++++- src/qamqpclient.h | 2 ++ src/src.pro | 7 +++++++ tests/auto/qamqpclient/tst_qamqpclient.cpp | 3 +++ 4 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/qamqpclient.cpp b/src/qamqpclient.cpp index f98a111..c6ec276 100644 --- a/src/qamqpclient.cpp +++ b/src/qamqpclient.cpp @@ -162,7 +162,10 @@ void QAmqpClientPrivate::_q_disconnect() // private slots void QAmqpClientPrivate::_q_socketConnected() { - timeout = 0; + if(reconnectFixedTimeout == false) + { + timeout = 0; + } char header[8] = {'A', 'M', 'Q', 'P', 0, 0, 9, 1}; socket->write(header, 8); } @@ -887,6 +890,11 @@ void QAmqpClient::setSslConfiguration(const QSslConfiguration &config) } } +QString QAmqpClient::getGitVersion() +{ + return QString(GIT_VERSION); +} + void QAmqpClient::ignoreSslErrors(const QList &errors) { Q_D(QAmqpClient); diff --git a/src/qamqpclient.h b/src/qamqpclient.h index 395c2a4..1a887db 100644 --- a/src/qamqpclient.h +++ b/src/qamqpclient.h @@ -95,6 +95,8 @@ public: QSslConfiguration sslConfiguration() const; void setSslConfiguration(const QSslConfiguration &config); + static QString getGitVersion(); + // channels QAmqpExchange *createExchange(int channelNumber = -1); QAmqpExchange *createExchange(const QString &name, int channelNumber = -1); diff --git a/src/src.pro b/src/src.pro index 2a5cdd1..4d43ef5 100644 --- a/src/src.pro +++ b/src/src.pro @@ -31,6 +31,13 @@ greaterThan(NEED_GCOV_SUPPORT, 0) { } } +#Define GIT Macros +GIT_VERSION = $$system(git describe --long --dirty) +DEFINES += GIT_VERSION=\\\"$$GIT_VERSION\\\" + +GIT_TAG = $$system(git describe --abbrev=0) +VERSION = $$replace(GIT_TAG, v,) + PRIVATE_HEADERS += \ qamqpchannel_p.h \ qamqpchannelhash_p.h \ diff --git a/tests/auto/qamqpclient/tst_qamqpclient.cpp b/tests/auto/qamqpclient/tst_qamqpclient.cpp index ebeca0f..5efb2b4 100644 --- a/tests/auto/qamqpclient/tst_qamqpclient.cpp +++ b/tests/auto/qamqpclient/tst_qamqpclient.cpp @@ -160,6 +160,9 @@ void tst_QAMQPClient::autoReconnectTimeout() QVERIFY(waitForSignal(&client, SIGNAL(connected()), 60)); qDebug() <<"connected" ; + QVERIFY(waitForSignal(&client, SIGNAL(disconnected()), 60)); + QProcess::execute("rabbitmqctl", QStringList() << "start_app"); + QVERIFY(waitForSignal(&client, SIGNAL(connected()), 60)); } void tst_QAMQPClient::tune() From 96f2a88020962892fd846a76983b57811fe7b121 Mon Sep 17 00:00:00 2001 From: De Stefano Date: Mon, 3 Oct 2016 23:12:20 +0200 Subject: [PATCH 3/5] Fixed git_tag. --- src/src.pro | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/src.pro b/src/src.pro index 4d43ef5..029651c 100644 --- a/src/src.pro +++ b/src/src.pro @@ -32,10 +32,10 @@ greaterThan(NEED_GCOV_SUPPORT, 0) { } #Define GIT Macros -GIT_VERSION = $$system(git describe --long --dirty) +GIT_VERSION = $$system(git describe --long --dirty --tags) DEFINES += GIT_VERSION=\\\"$$GIT_VERSION\\\" -GIT_TAG = $$system(git describe --abbrev=0) +GIT_TAG = $$system(git describe --abbrev=0 --tags) VERSION = $$replace(GIT_TAG, v,) PRIVATE_HEADERS += \ From 1c205642d149d78f9ed4f4536621291843db459a Mon Sep 17 00:00:00 2001 From: De Stefano Date: Mon, 3 Oct 2016 23:15:50 +0200 Subject: [PATCH 4/5] Fix git tag. --- src/src.pro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/src.pro b/src/src.pro index 029651c..c0cb8fb 100644 --- a/src/src.pro +++ b/src/src.pro @@ -35,7 +35,7 @@ greaterThan(NEED_GCOV_SUPPORT, 0) { GIT_VERSION = $$system(git describe --long --dirty --tags) DEFINES += GIT_VERSION=\\\"$$GIT_VERSION\\\" -GIT_TAG = $$system(git describe --abbrev=0 --tags) +GIT_TAG = $$system(git describe --abbrev=0) VERSION = $$replace(GIT_TAG, v,) PRIVATE_HEADERS += \ From 8c3dc95dbde813068955cfcf0073ff7f28904b64 Mon Sep 17 00:00:00 2001 From: De Stefano Date: Tue, 4 Oct 2016 15:59:14 +0200 Subject: [PATCH 5/5] Rename getGitVersion() to gitVersion(). --- src/qamqpclient.cpp | 2 +- src/qamqpclient.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/qamqpclient.cpp b/src/qamqpclient.cpp index c6ec276..68badf1 100644 --- a/src/qamqpclient.cpp +++ b/src/qamqpclient.cpp @@ -890,7 +890,7 @@ void QAmqpClient::setSslConfiguration(const QSslConfiguration &config) } } -QString QAmqpClient::getGitVersion() +QString QAmqpClient::gitVersion() { return QString(GIT_VERSION); } diff --git a/src/qamqpclient.h b/src/qamqpclient.h index 1a887db..0bd8943 100644 --- a/src/qamqpclient.h +++ b/src/qamqpclient.h @@ -95,7 +95,7 @@ public: QSslConfiguration sslConfiguration() const; void setSslConfiguration(const QSslConfiguration &config); - static QString getGitVersion(); + static QString gitVersion(); // channels QAmqpExchange *createExchange(int channelNumber = -1);