Core/DBLayer: Fix MySQL timeout issue. World runnable will now call KeepAlive on each database after a specified number of seconds (MaxPingTime in worldserver.conf)

Based on patch by kingarus81
Fixes issue #4062

Also remove explicit numbering from WorldTimers enum

--HG--
branch : trunk
This commit is contained in:
Machiavelli
2010-10-02 14:26:58 +02:00
parent 0f09690c5c
commit c4710bde76
4 changed files with 33 additions and 39 deletions
+15
View File
@@ -1206,6 +1206,9 @@ void World::LoadConfigSettings(bool reload)
m_int_configs[CONFIG_AUTOBROADCAST_CENTER] = sConfig.GetIntDefault("AutoBroadcast.Center", 0);
m_int_configs[CONFIG_AUTOBROADCAST_INTERVAL] = sConfig.GetIntDefault("AutoBroadcast.Timer", 60000);
// MySQL ping time interval
m_int_configs[CONFIG_DB_PING_INTERVAL] = sConfig.GetIntDefault("MaxPingTime", 1800);
sScriptMgr.OnConfigLoad(reload);
}
@@ -1663,6 +1666,8 @@ void World::SetInitialWorldSettings()
m_timers[WUPDATE_AUTOBROADCAST].SetInterval(getIntConfig(CONFIG_AUTOBROADCAST_INTERVAL));
m_timers[WUPDATE_DELETECHARS].SetInterval(DAY*IN_MILLISECONDS); // check for chars to delete every day
m_timers[WUPDATE_PINGDB].SetInterval(getIntConfig(CONFIG_DB_PING_INTERVAL)*IN_MILLISECONDS); // Mysql ping time in seconds
//to set mailtimer to return mails every day between 4 and 5 am
//mailtimer is increased when updating auctions
//one second is 1000 -(tested on win system)
@@ -1986,6 +1991,16 @@ void World::Update(uint32 diff)
m_timers[WUPDATE_EVENTS].Reset();
}
///- Ping to keep MySQL connections alive
if (m_timers[WUPDATE_PINGDB].Passed())
{
m_timers[WUPDATE_PINGDB].Reset();
sLog.outDetail("Ping MySQL to keep connection alive");
CharacterDatabase.KeepAlive();
LoginDatabase.KeepAlive();
WorldDatabase.KeepAlive();
}
// update the instance reset times
sInstanceSaveMgr.Update();
+14 -12
View File
@@ -71,18 +71,19 @@ enum ShutdownExitCode
/// Timers for different object refresh rates
enum WorldTimers
{
WUPDATE_OBJECTS = 0,
WUPDATE_SESSIONS = 1,
WUPDATE_AUCTIONS = 2,
WUPDATE_WEATHERS = 3,
WUPDATE_UPTIME = 4,
WUPDATE_CORPSES = 5,
WUPDATE_EVENTS = 6,
WUPDATE_CLEANDB = 7,
WUPDATE_AUTOBROADCAST = 8,
WUPDATE_MAILBOXQUEUE = 9,
WUPDATE_DELETECHARS = 10,
WUPDATE_COUNT = 11
WUPDATE_OBJECTS,
WUPDATE_SESSIONS,
WUPDATE_AUCTIONS,
WUPDATE_WEATHERS,
WUPDATE_UPTIME,
WUPDATE_CORPSES,
WUPDATE_EVENTS,
WUPDATE_CLEANDB,
WUPDATE_AUTOBROADCAST,
WUPDATE_MAILBOXQUEUE,
WUPDATE_DELETECHARS,
WUPDATE_PINGDB,
WUPDATE_COUNT
};
/// Configuration elements
@@ -306,6 +307,7 @@ enum WorldIntConfigs
CONFIG_AUTOBROADCAST_CENTER,
CONFIG_AUTOBROADCAST_INTERVAL,
CONFIG_MAX_RESULTS_LOOKUP_COMMANDS,
CONFIG_DB_PING_INTERVAL,
INT_CONFIG_VALUE_COUNT
};