Poco::Data::SessionPool change connection timeout #3241

This commit is contained in:
Alex Fabijanic 2022-06-17 23:21:56 +02:00
parent 24b99e7762
commit 34c4d7c4a2
4 changed files with 35 additions and 10 deletions

View File

@ -71,7 +71,8 @@ public:
const std::string& connectionString,
int minSessions = 1,
int maxSessions = 32,
int idleTime = 60);
int idleTime = 60,
int connTimeout = 60);
/// Creates the SessionPool for sessions with the given connector
/// and connectionString.
///
@ -123,6 +124,9 @@ public:
int idle() const;
/// Returns the number of idle sessions.
int connTimeout() const;
/// Returns the connection timeout.
int dead();
/// Returns the number of not connected active sessions.
@ -192,6 +196,7 @@ private:
int _minSessions;
int _maxSessions;
int _idleTime;
int _connTimeout;
int _nSessions;
SessionList _idleSessions;
SessionList _activeSessions;

View File

@ -22,12 +22,13 @@ namespace Poco {
namespace Data {
SessionPool::SessionPool(const std::string& connector, const std::string& connectionString, int minSessions, int maxSessions, int idleTime):
SessionPool::SessionPool(const std::string& connector, const std::string& connectionString, int minSessions, int maxSessions, int idleTime, int connTimeout):
_connector(connector),
_connectionString(connectionString),
_minSessions(minSessions),
_maxSessions(maxSessions),
_idleTime(idleTime),
_connTimeout(connTimeout),
_nSessions(0),
_janitorTimer(1000*idleTime, 1000*idleTime/4),
_shutdown(false)
@ -72,7 +73,7 @@ Session SessionPool::get()
{
if (_nSessions < _maxSessions)
{
Session newSession(SessionFactory::instance().create(_connector, _connectionString));
Session newSession(SessionFactory::instance().create(_connector, _connectionString, static_cast<std::size_t>(_connTimeout)));
applySettings(newSession.impl());
customizeSession(newSession);
@ -130,6 +131,12 @@ int SessionPool::idle() const
}
int SessionPool::connTimeout() const
{
return _connTimeout;
}
int SessionPool::dead()
{
Poco::Mutex::ScopedLock lock(_mutex);

View File

@ -522,7 +522,7 @@ void DataTest::testColumnVector()
try
{
int i; i = c[100]; // to silence gcc
POCO_UNUSED int i; i = c[100];
fail ("must fail");
}
catch (RangeException&) { }
@ -625,7 +625,7 @@ void DataTest::testColumnVectorBool()
try
{
bool b; b = c[100]; // to silence gcc
POCO_UNUSED bool b; b = c[100];
fail ("must fail");
}
catch (RangeException&) { }
@ -701,7 +701,7 @@ void DataTest::testColumnDeque()
try
{
int i; i = c[100]; // to silence gcc
POCO_UNUSED int i; i = c[100];
fail ("must fail");
}
catch (RangeException&) { }
@ -818,7 +818,7 @@ void DataTest::testColumnList()
try
{
int i; i = c[100]; // to silence gcc
POCO_UNUSED int i; i = c[100];
fail ("must fail");
}
catch (RangeException&) { }
@ -925,13 +925,13 @@ void DataTest::testRow()
try
{
int i; i = row[5].convert<int>(); // to silence gcc
POCO_UNUSED int i; i = row[5].convert<int>();
fail ("must fail");
}catch (RangeException&) {}
try
{
int i; i = row["a bad name"].convert<int>(); // to silence gcc
POCO_UNUSED int i; i = row["a bad name"].convert<int>();
fail ("must fail");
}catch (NotFoundException&) {}

View File

@ -46,7 +46,7 @@ SessionPoolTest::~SessionPoolTest()
void SessionPoolTest::testSessionPool()
{
SessionPool pool("test", "cs", 1, 4, 2);
SessionPool pool("test", "cs", 1, 4, 2, 10);
pool.setFeature("f1", true);
assertTrue (pool.getFeature("f1"));
@ -61,6 +61,7 @@ void SessionPoolTest::testSessionPool()
assertTrue (pool.capacity() == 4);
assertTrue (pool.allocated() == 0);
assertTrue (pool.idle() == 0);
assertTrue (pool.connTimeout() == 10);
assertTrue (pool.available() == 4);
assertTrue (pool.dead() == 0);
assertTrue (pool.allocated() == pool.used() + pool.idle());
@ -78,6 +79,7 @@ void SessionPoolTest::testSessionPool()
assertTrue (pool.capacity() == 4);
assertTrue (pool.allocated() == 1);
assertTrue (pool.idle() == 0);
assertTrue (pool.connTimeout() == 10);
assertTrue (pool.available() == 3);
assertTrue (pool.dead() == 0);
assertTrue (pool.allocated() == pool.used() + pool.idle());
@ -89,6 +91,7 @@ void SessionPoolTest::testSessionPool()
assertTrue (pool.capacity() == 4);
assertTrue (pool.allocated() == 2);
assertTrue (pool.idle() == 0);
assertTrue (pool.connTimeout() == 10);
assertTrue (pool.available() == 2);
assertTrue (pool.dead() == 0);
assertTrue (pool.allocated() == pool.used() + pool.idle());
@ -101,6 +104,7 @@ void SessionPoolTest::testSessionPool()
assertTrue (pool.capacity() == 4);
assertTrue (pool.allocated() == 3);
assertTrue (pool.idle() == 0);
assertTrue (pool.connTimeout() == 10);
assertTrue (pool.available() == 1);
assertTrue (pool.dead() == 0);
assertTrue (pool.allocated() == pool.used() + pool.idle());
@ -109,6 +113,7 @@ void SessionPoolTest::testSessionPool()
assertTrue (pool.capacity() == 4);
assertTrue (pool.allocated() == 3);
assertTrue (pool.idle() == 1);
assertTrue (pool.connTimeout() == 10);
assertTrue (pool.available() == 2);
assertTrue (pool.dead() == 0);
assertTrue (pool.allocated() == pool.used() + pool.idle());
@ -120,6 +125,7 @@ void SessionPoolTest::testSessionPool()
assertTrue (pool.capacity() == 4);
assertTrue (pool.allocated() == 3);
assertTrue (pool.idle() == 0);
assertTrue (pool.connTimeout() == 10);
assertTrue (pool.available() == 1);
assertTrue (pool.dead() == 0);
assertTrue (pool.allocated() == pool.used() + pool.idle());
@ -129,6 +135,7 @@ void SessionPoolTest::testSessionPool()
assertTrue (pool.capacity() == 4);
assertTrue (pool.allocated() == 4);
assertTrue (pool.idle() == 0);
assertTrue (pool.connTimeout() == 10);
assertTrue (pool.available() == 0);
assertTrue (pool.dead() == 0);
assertTrue (pool.allocated() == pool.used() + pool.idle());
@ -144,6 +151,7 @@ void SessionPoolTest::testSessionPool()
assertTrue (pool.capacity() == 4);
assertTrue (pool.allocated() == 4);
assertTrue (pool.idle() == 1);
assertTrue (pool.connTimeout() == 10);
assertTrue (pool.available() == 1);
assertTrue (pool.dead() == 0);
assertTrue (pool.allocated() == pool.used() + pool.idle());
@ -159,6 +167,7 @@ void SessionPoolTest::testSessionPool()
assertTrue (pool.capacity() == 4);
assertTrue (pool.allocated() == 4);
assertTrue (pool.idle() == 2);
assertTrue (pool.connTimeout() == 10);
assertTrue (pool.available() == 2);
assertTrue (pool.dead() == 0);
assertTrue (pool.allocated() == pool.used() + pool.idle());
@ -168,6 +177,7 @@ void SessionPoolTest::testSessionPool()
assertTrue (pool.capacity() == 4);
assertTrue (pool.allocated() == 2);
assertTrue (pool.idle() == 0);
assertTrue (pool.connTimeout() == 10);
assertTrue (pool.available() == 2);
assertTrue (pool.dead() == 0);
assertTrue (pool.allocated() == pool.used() + pool.idle());
@ -177,6 +187,7 @@ void SessionPoolTest::testSessionPool()
assertTrue (pool.capacity() == 4);
assertTrue (pool.allocated() == 3);
assertTrue (pool.idle() == 0);
assertTrue (pool.connTimeout() == 10);
assertTrue (pool.available() == 1);
assertTrue (pool.dead() == 0);
assertTrue (pool.allocated() == pool.used() + pool.idle());
@ -188,6 +199,7 @@ void SessionPoolTest::testSessionPool()
assertTrue (pool.capacity() == 4);
assertTrue (pool.allocated() == 2);
assertTrue (pool.idle() == 0);
assertTrue (pool.connTimeout() == 10);
assertTrue (pool.available() == 2);
assertTrue (pool.dead() == 0);
assertTrue (pool.allocated() == pool.used() + pool.idle());
@ -205,6 +217,7 @@ void SessionPoolTest::testSessionPool()
assertTrue (pool.capacity() == 4);
assertTrue (pool.allocated() == 0);
assertTrue (pool.idle() == 0);
assertTrue (pool.connTimeout() == 10);
assertTrue (pool.available() == 0);
assertTrue (pool.dead() == 0);
assertTrue (pool.allocated() == pool.used() + pool.idle());