MCPcopy Create free account
hub / github.com/Tencent/phxsql / GetEndPoint

Method GetEndPoint

phxsqlclient/phxsqlclient_leakybucket.cpp:43–91  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

41}
42
43int PhxSQLClientDisasterStrategy_LeakyBucket::GetEndPoint(const vector<MySQLEndPoint_t> & vecEndPoints,
44 const MySQLEndPoint_t & tPreviousEndPoint,
45 MySQLEndPoint_t & tEndPoint) {
46 int iBegIdx = phxsql::RandomPicker(vecEndPoints.size());
47
48 int iCurrPos = (iBegIdx + 1) % vecEndPoints.size();
49
50 bool bFound = false;
51 while (iCurrPos != iBegIdx) {
52 if (vecEndPoints[iCurrPos].m_sMySQLIP == tPreviousEndPoint.m_sMySQLIP
53 && vecEndPoints[iCurrPos].m_iPort == tPreviousEndPoint.m_iPort) {
54 iCurrPos = (iCurrPos + 1) % vecEndPoints.size();
55 continue;
56 }
57
58 std::string sKey = vecEndPoints[iCurrPos].ToString();
59
60 auto find_itr = m_mapBucket.find(sKey);
61 if (find_itr == m_mapBucket.end()) {
62 MmapLeakyBucket * bucket = new MmapLeakyBucket();
63
64 MmapLeakyBucket::Config_t tConfig;
65 tConfig.iBucketSize = m_iBucketSize;
66 tConfig.tRefillPeriod = m_iFillPeriod;
67
68 bucket->Init(&tConfig, string(PHXSQL_LEAKEYBUCKET_DIR + "/" + sKey).c_str());
69
70 m_mapBucket[sKey] = bucket;
71
72 find_itr = m_mapBucket.find(sKey);
73 }
74
75 if (find_itr->second->HasToken()) {
76 tEndPoint.m_sMySQLIP = vecEndPoints[iCurrPos].m_sMySQLIP;
77 tEndPoint.m_iPort = vecEndPoints[iCurrPos].m_iPort;
78 bFound = true;
79 break;
80 } else {
81 iCurrPos = (iCurrPos + 1) % vecEndPoints.size();
82 }
83 }
84
85 if (!bFound) {
86 //no useful endpoint, just choose the random one;
87 tEndPoint.m_sMySQLIP = vecEndPoints[iCurrPos].m_sMySQLIP;
88 tEndPoint.m_iPort = vecEndPoints[iCurrPos].m_iPort;
89 }
90 return phxsql::OK;
91}
92
93int PhxSQLClientDisasterStrategy_LeakyBucket::ReportEndPoint(const MySQLEndPoint_t & tEndPoint, int iRet,
94 int iCostInMS) {

Callers

nothing calls this directly

Calls 4

RandomPickerFunction · 0.85
ToStringMethod · 0.80
InitMethod · 0.45
HasTokenMethod · 0.45

Tested by

no test coverage detected