summaryrefslogtreecommitdiff
path: root/src/mongo/client/connpool.cpp
diff options
context:
space:
mode:
authorWaley Chen <waleycz@gmail.com>2016-11-01 16:01:07 -0400
committerWaley Chen <waleycz@gmail.com>2016-11-01 16:01:07 -0400
commitb1764ce64215d5c9c0b3482aa251f8e900512b12 (patch)
treecb0dbaff4208d8b070cd99d36cf7b44321b76470 /src/mongo/client/connpool.cpp
parent93e2a1fa638fc6ee7ce40d825a776a1806a4a53c (diff)
downloadmongo-b1764ce64215d5c9c0b3482aa251f8e900512b12.tar.gz
SERVER-26846 scoped_db_conn_test.exe - DontReturnConnGoneBadToPool: expected notReusedConns == globalConnPool.getNumBadConns
Diffstat (limited to 'src/mongo/client/connpool.cpp')
-rw-r--r--src/mongo/client/connpool.cpp17
1 files changed, 13 insertions, 4 deletions
diff --git a/src/mongo/client/connpool.cpp b/src/mongo/client/connpool.cpp
index e7a5a884275..17d68626b9c 100644
--- a/src/mongo/client/connpool.cpp
+++ b/src/mongo/client/connpool.cpp
@@ -76,13 +76,16 @@ void PoolForHost::done(DBConnectionPool* pool, DBClientBase* c) {
// Remember that this host had a broken connection for later
if (isFailed) {
- _badConns++;
reportBadConnectionAt(c->getSockCreationMicroSec());
}
- if (isFailed ||
- // Another (later) connection was reported as broken to this host
- (c->getSockCreationMicroSec() < _minValidCreationTimeMicroSec) ||
+ // Another (later) connection was reported as broken to this host
+ bool isBroken = c->getSockCreationMicroSec() < _minValidCreationTimeMicroSec;
+ if (isFailed || isBroken) {
+ _badConns++;
+ }
+
+ if (isFailed || isBroken ||
// We have a pool size that we need to enforce
(_maxPoolSize >= 0 && static_cast<int>(_pool.size()) >= _maxPoolSize)) {
pool->onDestroy(c);
@@ -266,6 +269,12 @@ DBClientBase* DBConnectionPool::get(const string& host, double socketTimeout) {
return _finishCreate(host, socketTimeout, c);
}
+int DBConnectionPool::getNumAvailableConns(const string& host, double socketTimeout) const {
+ stdx::lock_guard<stdx::mutex> L(_mutex);
+ auto it = _pools.find(PoolKey(host, socketTimeout));
+ return (it == _pools.end()) ? 0 : it->second.numAvailable();
+}
+
int DBConnectionPool::getNumBadConns(const string& host, double socketTimeout) const {
stdx::lock_guard<stdx::mutex> L(_mutex);
auto it = _pools.find(PoolKey(host, socketTimeout));