try next sqlmaster also if the current write fails

This commit is contained in:
H-M-H 2015-12-06 00:58:20 +01:00
parent 7199ae3f22
commit 2d41ce3527
2 changed files with 35 additions and 5 deletions

View file

@ -137,8 +137,17 @@ void CSqlScore::SaveTeamScoreThread(void *pUser)
{
CSqlTeamScoreData *pData = (CSqlTeamScoreData *)pUser;
for (int skipCount = 0; skipCount < MAX_SQLMASTERS; skipCount++)
{
// Connect to database
pData->ConnectSqlServer(g_Config.m_SvUseSQLMasters);
pData->ConnectSqlServer(g_Config.m_SvUseSQLMasters, skipCount);
if (pData->ActiveMasterID() == -1)
{
dbg_msg("SQL", "ERROR: Could not connect to ANY SQLMASTER-Server");
return;
}
if(pData->SqlServer())
{
@ -247,9 +256,13 @@ void CSqlScore::SaveTeamScoreThread(void *pUser)
// disconnect from database
pData->SqlServer()->Disconnect();
// no errors and everything updated --> break fallback loop
break;
}
else
dbg_msg("SQL", "ERROR: Could not connect to SQL-Server");
}
delete pData;
}
@ -446,8 +459,17 @@ void CSqlScore::SaveScoreThread(void *pUser)
{
CSqlScoreData *pData = (CSqlScoreData *)pUser;
for (int skipCount = 0; skipCount < MAX_SQLMASTERS; skipCount++)
{
// Connect to database
pData->ConnectSqlServer(g_Config.m_SvUseSQLMasters);
pData->ConnectSqlServer(g_Config.m_SvUseSQLMasters, skipCount);
if (pData->ActiveMasterID() == -1)
{
dbg_msg("SQL", "ERROR: Could not connect to ANY SQLMASTER-Server");
return;
}
if(pData->SqlServer())
{
@ -497,9 +519,13 @@ void CSqlScore::SaveScoreThread(void *pUser)
// disconnect from database
pData->SqlServer()->Disconnect();
// no errors and everything updated --> break fallback loop
break;
}
else
dbg_msg("SQL", "ERROR: Could not connect to SQL-Server");
}
delete pData;
}

View file

@ -71,7 +71,7 @@ public:
// generic implementation to provide sqlserver, gameserver and server
struct CSqlData
{
CSqlData() : m_pSqlServer(ms_pSqlServer) {}
CSqlData() : m_pSqlServer(ms_pSqlServer), m_ActiveMaster(-1) {}
CGameContext* GameServer() { return ms_pGameServer; }
IServer* Server() { return ms_pServer; }
@ -79,23 +79,26 @@ struct CSqlData
const char* MapName() { return ms_pMap; }
CSqlServer* SqlMasterServer(int i) { return ms_pMasterSqlServers[i]; }
CSqlServer* SqlServer() { return m_pSqlServer; }
int ActiveMasterID() { return m_ActiveMaster; }
void ConnectSqlServer(bool useMasters = false)
void ConnectSqlServer(bool useMasters = false, int skipCount = 0)
{
if (useMasters)
{
m_pSqlServer = 0;
for (int i = 0; i < MAX_SQLMASTERS; i++)
for (int i = skipCount; i < MAX_SQLMASTERS; i++)
{
if (SqlMasterServer(i) && SqlMasterServer(i)->Connect())
{
m_pSqlServer = SqlMasterServer(i);
m_ActiveMaster = 0;
return;
}
if (SqlMasterServer(i))
dbg_msg("SQL", "Warning: Unable to connect to sqlmaster %d ('%s'), trying next...", i, SqlMasterServer(i)->GetIP());
}
dbg_msg("SQL", "ERROR: No sqlmasterservers available");
m_ActiveMaster = -1;
}
else if (!SqlServer()->Connect())
m_pSqlServer = 0;
@ -109,6 +112,7 @@ struct CSqlData
static CSqlServer **ms_pMasterSqlServers;
CSqlServer *m_pSqlServer;
int m_ActiveMaster;
};
struct CSqlMapData : CSqlData