Skip to content

Commit

Permalink
Support timeouts greater than 1 second
Browse files Browse the repository at this point in the history
  • Loading branch information
erer1243 committed Sep 23, 2024
1 parent 351f227 commit cf69f20
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 18 deletions.
33 changes: 20 additions & 13 deletions common/dbconnector.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -645,39 +645,46 @@ DBConnector::DBConnector(int dbId, const RedisContext& ctx)
select(this);
}

static struct timeval ms_to_timeval(unsigned int ms) {
return {
.tv_sec = (time_t)ms / 1000,
.tv_usec = ((suseconds_t)ms % 1000) * 1000
};
}

DBConnector::DBConnector(int dbId, const string& hostname, int port,
unsigned int timeout)
unsigned int timeout_ms)
: m_dbId(dbId)
{
struct timeval tv = {0, (suseconds_t)timeout * 1000};
struct timeval *ptv = timeout ? &tv : NULL;
struct timeval tv = ms_to_timeval(timeout_ms);
struct timeval *ptv = timeout_ms ? &tv : NULL;
initContext(hostname.c_str(), port, ptv);

select(this);
}

DBConnector::DBConnector(int dbId, const string& unixPath, unsigned int timeout)
DBConnector::DBConnector(int dbId, const string& unixPath, unsigned int timeout_ms)
: m_dbId(dbId)
{
struct timeval tv = {0, (suseconds_t)timeout * 1000};
struct timeval *ptv = timeout ? &tv : NULL;
struct timeval tv = ms_to_timeval(timeout_ms);
struct timeval *ptv = timeout_ms ? &tv : NULL;
initContext(unixPath.c_str(), ptv);

select(this);
}

DBConnector::DBConnector(const string& dbName, unsigned int timeout, bool isTcpConn, const string& netns)
: DBConnector(dbName, timeout, isTcpConn, SonicDBKey(netns))
DBConnector::DBConnector(const string& dbName, unsigned int timeout_ms, bool isTcpConn, const string& netns)
: DBConnector(dbName, timeout_ms, isTcpConn, SonicDBKey(netns))
{
}

DBConnector::DBConnector(const string& dbName, unsigned int timeout, bool isTcpConn, const SonicDBKey &key)
DBConnector::DBConnector(const string& dbName, unsigned int timeout_ms, bool isTcpConn, const SonicDBKey &key)
: m_dbId(SonicDBConfig::getDbId(dbName, key))
, m_dbName(dbName)
, m_key(key)
{
struct timeval tv = {0, (suseconds_t)timeout * 1000};
struct timeval *ptv = timeout ? &tv : NULL;
struct timeval tv = ms_to_timeval(timeout_ms);
struct timeval *ptv = timeout_ms ? &tv : NULL;
if (isTcpConn)
{
initContext(SonicDBConfig::getDbHostname(dbName, m_key).c_str(), SonicDBConfig::getDbPort(dbName, m_key), ptv);
Expand All @@ -690,8 +697,8 @@ DBConnector::DBConnector(const string& dbName, unsigned int timeout, bool isTcpC
select(this);
}

DBConnector::DBConnector(const string& dbName, unsigned int timeout, bool isTcpConn)
: DBConnector(dbName, timeout, isTcpConn, SonicDBKey())
DBConnector::DBConnector(const string& dbName, unsigned int timeout_ms, bool isTcpConn)
: DBConnector(dbName, timeout_ms, isTcpConn, SonicDBKey())
{
// Empty constructor
}
Expand Down
10 changes: 5 additions & 5 deletions common/dbconnector.h
Original file line number Diff line number Diff line change
Expand Up @@ -213,11 +213,11 @@ class DBConnector : public RedisContext
*/
explicit DBConnector(const DBConnector &other);
DBConnector(int dbId, const RedisContext &ctx);
DBConnector(int dbId, const std::string &hostname, int port, unsigned int timeout);
DBConnector(int dbId, const std::string &unixPath, unsigned int timeout);
DBConnector(const std::string &dbName, unsigned int timeout, bool isTcpConn = false);
DBConnector(const std::string &dbName, unsigned int timeout, bool isTcpConn, const std::string &netns);
DBConnector(const std::string &dbName, unsigned int timeout, bool isTcpConn, const SonicDBKey &key);
DBConnector(int dbId, const std::string &hostname, int port, unsigned int timeout_ms);
DBConnector(int dbId, const std::string &unixPath, unsigned int timeout_ms);
DBConnector(const std::string &dbName, unsigned int timeout_ms, bool isTcpConn = false);
DBConnector(const std::string &dbName, unsigned int timeout_ms, bool isTcpConn, const std::string &netns);
DBConnector(const std::string &dbName, unsigned int timeout_ms, bool isTcpConn, const SonicDBKey &key);
DBConnector& operator=(const DBConnector&) = delete;

int getDbId() const;
Expand Down

0 comments on commit cf69f20

Please sign in to comment.