From eed92991cf064f7c89a911be734d51619150d6bf Mon Sep 17 00:00:00 2001 From: David Reiss Date: Tue, 9 Mar 2010 05:19:52 +0000 Subject: [PATCH] cpp: TSocketPool: Optimize the case of a single server in the pool. git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@920676 13f79535-47bb-0310-9956-ffa450edef68 --- lib/cpp/src/transport/TSocketPool.cpp | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/lib/cpp/src/transport/TSocketPool.cpp b/lib/cpp/src/transport/TSocketPool.cpp index c50877d5..76eba4ed 100644 --- a/lib/cpp/src/transport/TSocketPool.cpp +++ b/lib/cpp/src/transport/TSocketPool.cpp @@ -169,17 +169,20 @@ void TSocketPool::setCurrentServer(const shared_ptr &server) /* TODO: without apc we ignore a lot of functionality from the php version */ void TSocketPool::open() { - if (randomize_) { + + unsigned int numServers = servers_.size(); + if (numServers == 1 && isOpen()) { + // only one server that is already connected to + return; + } + + if (randomize_ && numServers > 1) { random_shuffle(servers_.begin(), servers_.end()); } - unsigned int numServers = servers_.size(); for (unsigned int i = 0; i < numServers; ++i) { shared_ptr &server = servers_[i]; - bool retryIntervalPassed = (server->lastFailTime_ == 0); - bool isLastServer = alwaysTryLast_ ? (i == (numServers - 1)) : false; - // Impersonate the server socket setCurrentServer(server); @@ -188,6 +191,9 @@ void TSocketPool::open() { return; } + bool retryIntervalPassed = (server->lastFailTime_ == 0); + bool isLastServer = alwaysTryLast_ ? (i == (numServers - 1)) : false; + if (server->lastFailTime_ > 0) { // The server was marked as down, so check if enough time has elapsed to retry int elapsedTime = time(NULL) - server->lastFailTime_; -- 2.17.1