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:
@@ -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();
|
||||
|
||||
|
||||
@@ -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
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user