in src/transport/TcpRemotingClient.cpp [363:399]
std::shared_ptr<TcpTransport> TcpRemotingClient::CreateNameServerTransport(bool needResponse) {
// m_namesrvLock was added to avoid operation of nameServer was blocked by
// m_tcpLock, it was used by single Thread mostly, so no performance impact
// try get m_tcpLock until m_tcpTransportTryLockTimeout to avoid blocking long
// time, if could not get m_namesrvlock, return NULL
LOG_DEBUG("--CreateNameserverTransport--");
std::unique_lock<std::timed_mutex> lock(m_namesrvLock, std::try_to_lock);
if (!lock.owns_lock()) {
if (!lock.try_lock_for(std::chrono::seconds(m_tcpTransportTryLockTimeout))) {
LOG_ERROR("CreateNameserverTransport get timed_mutex timeout");
std::shared_ptr<TcpTransport> pTcp;
return pTcp;
}
}
if (!m_namesrvAddrChoosed.empty()) {
std::shared_ptr<TcpTransport> pTcp = CreateTransport(m_namesrvAddrChoosed, true);
if (pTcp)
return pTcp;
else
m_namesrvAddrChoosed.clear();
}
for (unsigned i = 0; i < m_namesrvAddrList.size(); i++) {
unsigned int index = m_namesrvIndex++ % m_namesrvAddrList.size();
LOG_INFO("namesrvIndex is:%d, index:%d, namesrvaddrlist size:" SIZET_FMT "", m_namesrvIndex, index,
m_namesrvAddrList.size());
std::shared_ptr<TcpTransport> pTcp = CreateTransport(m_namesrvAddrList[index], true);
if (pTcp) {
m_namesrvAddrChoosed = m_namesrvAddrList[index];
return pTcp;
}
}
std::shared_ptr<TcpTransport> pTcp;
return pTcp;
}