From: <tom...@us...> - 2010-11-02 20:33:39
|
Revision: 3797 http://tora.svn.sourceforge.net/tora/?rev=3797&view=rev Author: tomasstraupis Date: 2010-11-02 20:33:32 +0000 (Tue, 02 Nov 2010) Log Message: ----------- Add configuration option connectionTestTimeout to control when connection test is done. Modified Paths: -------------- trunk/tora/src/toconf.h trunk/tora/src/toconfiguration.cpp trunk/tora/src/toconfiguration.h trunk/tora/src/toconnection.cpp trunk/tora/src/toconnection.h trunk/tora/src/toconnectionpool.cpp Modified: trunk/tora/src/toconf.h =================================================================== --- trunk/tora/src/toconf.h 2010-10-31 11:43:15 UTC (rev 3796) +++ trunk/tora/src/toconf.h 2010-11-02 20:33:32 UTC (rev 3797) @@ -169,6 +169,9 @@ #define DEFAULT_STYLE "" //"Cleanlooks" // code editor #define CONF_STATIC_CHECKER "StaticChecker" +// connection (general) +#define CONF_CONNECTION_TEST_TIMEOUT "ConnectionTestTimeout" +#define DEFAULT_CONNECTION_TEST_TIMEOUT 0 // tooracleconnection.cpp #define CONF_OPEN_CURSORS "OpenCursors" #define DEFAULT_OPEN_CURSORS 40 // Defined to be able to update tuning view Modified: trunk/tora/src/toconfiguration.cpp =================================================================== --- trunk/tora/src/toconfiguration.cpp 2010-10-31 11:43:15 UTC (rev 3796) +++ trunk/tora/src/toconfiguration.cpp 2010-11-02 20:33:32 UTC (rev 3797) @@ -138,6 +138,7 @@ int m_smtpPort; QString m_style; QString m_staticChecker; // path+name to static check script (used in code editor) + int m_connectionTestTimeout; // after how many seconds connection should be tested // tooracleconnection int m_openCursors; @@ -500,6 +501,7 @@ m_syntaxStaticBg = s.value("SyntaxStaticBg", "darkblue").toString(); m_useMaxTextWidthMark = s.value("useMaxTextWidthMark", false).toBool(); m_maxTextWidthMark = s.value("maxTextWidthMark", 75).toInt(); + m_connectionTestTimeout = s.value(CONF_CONNECTION_TEST_TIMEOUT, DEFAULT_CONNECTION_TEST_TIMEOUT).toInt(); s.endGroup(); // main window @@ -739,6 +741,7 @@ s.setValue("SyntaxStaticBg", m_syntaxStaticBg); s.setValue("useMaxTextWidthMark", m_useMaxTextWidthMark); s.setValue("maxTextWidthMark", m_maxTextWidthMark); + s.setValue(CONF_CONNECTION_TEST_TIMEOUT, m_connectionTestTimeout); s.endGroup(); // main window @@ -2195,6 +2198,16 @@ p->m_maxTextWidthMark = v; } +int toConfiguration::connectionTestTimeout() +{ + return p->m_connectionTestTimeout; +} + +void toConfiguration::setConnectionTestTimeout(int v) +{ + p->m_connectionTestTimeout; +} + QByteArray toConfiguration::mainWindowGeometry() { return p->m_mainWindowGeometry; Modified: trunk/tora/src/toconfiguration.h =================================================================== --- trunk/tora/src/toconfiguration.h 2010-10-31 11:43:15 UTC (rev 3796) +++ trunk/tora/src/toconfiguration.h 2010-11-02 20:33:32 UTC (rev 3797) @@ -492,6 +492,9 @@ int maxTextWidthMark(); void setMaxTextWidthMark(int v); + int connectionTestTimeout(); + void setConnectionTestTimeout(int v); + // shortcut editor bool useEditorShortcuts(); void setUseEditorShortcuts(bool v); Modified: trunk/tora/src/toconnection.cpp =================================================================== --- trunk/tora/src/toconnection.cpp 2010-10-31 11:43:15 UTC (rev 3796) +++ trunk/tora/src/toconnection.cpp 2010-11-02 20:33:32 UTC (rev 3797) @@ -529,6 +529,7 @@ SQL = sql(*Connection); Params = params; Query->execute(); + this->connectionSub()->setLastUsed(); } void toQuery::execute(const QString &sql, const toQList ¶ms) @@ -537,6 +538,7 @@ SQL = sql; Params = params; Query->execute(); + this->connectionSub()->setLastUsed(); } void toQuery::execute(const toSQL &sql) @@ -544,6 +546,7 @@ std::list<toQValue> params; params.clear(); execute(sql, params); + this->connectionSub()->setLastUsed(); } void toQuery::execute(const toSQL &sql, const QString ¶m) @@ -552,6 +555,7 @@ params.clear(); params.insert(params.end(), param); execute(sql, params); + this->connectionSub()->setLastUsed(); } void toQuery::execute(const toSQL &sql, const QString ¶m1, const QString ¶m2, const QString ¶m3) @@ -562,6 +566,7 @@ params.insert(params.end(), param2); params.insert(params.end(), param3); execute(sql, params); + this->connectionSub()->setLastUsed(); } toQuery::~toQuery() Modified: trunk/tora/src/toconnection.h =================================================================== --- trunk/tora/src/toconnection.h 2010-10-31 11:43:15 UTC (rev 3796) +++ trunk/tora/src/toconnection.h 2010-11-02 20:33:32 UTC (rev 3797) @@ -54,6 +54,7 @@ #include <QString> #include <QPointer> #include <QMetaType> +#include <QDateTime> class QWidget; class toConnection; @@ -73,6 +74,7 @@ class toConnectionSub { toQuery *Query; + QDateTime LastUsed; // last time this db connection was actually used public: /** Create connection to database. */ @@ -100,6 +102,18 @@ */ virtual void cancel(void) { } + /** Get time when last query on this connection has finished + */ + QDateTime lastUsed(void) + { + return LastUsed; + } + /** Set time when last query on this connection has finished to "now" + */ + void setLastUsed(void) + { + LastUsed = QDateTime::currentDateTime(); + } } ; Modified: trunk/tora/src/toconnectionpool.cpp =================================================================== --- trunk/tora/src/toconnectionpool.cpp 2010-10-31 11:43:15 UTC (rev 3796) +++ trunk/tora/src/toconnectionpool.cpp 2010-11-02 20:33:32 UTC (rev 3797) @@ -46,6 +46,7 @@ #include "tosql.h" #include <QTimer> +#include <QDateTime> #include <QCoreApplication> #include <QApplication> @@ -240,7 +241,6 @@ return psub->State; } - toConnectionPool::PooledState toConnectionPool::test(PooledSub *sub) { PooledState state = Free; try { @@ -274,11 +274,14 @@ } +/* Checks which connection is available in a pool and then returns it. +*/ toConnectionSub* toConnectionPool::borrow() { { // keep lock here so adding connection below can be sure // there's no current lock in case of exception LockingPtr<SubList> ptr(Pool, PoolLock); + int connectionTestTimeout = toConfigurationSingle::Instance().connectionTestTimeout(); for(int mem = 0; mem < ptr->size(); mem++) { PooledSub *psub = (*ptr)[mem]; @@ -287,8 +290,17 @@ psub->State = Busy; ptr.unlock(); - PooledState state = test(psub); - if(state == Free) + // Check how many seconds have passed since something has been executed + // on this particular database connection. + int diff = psub->Sub->lastUsed().secsTo(QDateTime::currentDateTime()); + PooledState state; + // If more than configured amount has passed - perform a connection + // test - run some simple operation to check if connection is still alive. + if (diff > connectionTestTimeout) + state = test(psub); + else + state = Free; + if (state == Free) return psub->Sub; else { ptr.lock(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |