diff options
| author | Machiavelli <none@none> | 2010-09-03 10:52:32 +0200 |
|---|---|---|
| committer | Machiavelli <none@none> | 2010-09-03 10:52:32 +0200 |
| commit | 273679c5baba2c8f8978b1d5d0caadf1c933ebda (patch) | |
| tree | bff84137e930a2dec85216669505aa5370f669bd /src/server/worldserver | |
| parent | 277f2674ac278e981bb483c13b34b0a2d2f28a2b (diff) | |
Core/DBLayer
- Store threadbundlemask internally per database pool and prevent direct access to config file post startup
- Fix threadbundlemask flag checking for ReactorRunnable, WorldRunnable
- Remove CLI threadbundlemask flag, CLI doesn´t need a seperate mysql connection nor thread
- Remove unused Character Database connection from WorldSocketMgr / ReactorRunnable
- Add proper LoginDatabase connection to RA Runnable (soon to be overhauled)
Note: still experimental and not tested for live use
--HG--
branch : trunk
Diffstat (limited to 'src/server/worldserver')
| -rw-r--r-- | src/server/worldserver/CommandLine/CliRunnable.cpp | 34 | ||||
| -rw-r--r-- | src/server/worldserver/Master.cpp | 33 | ||||
| -rw-r--r-- | src/server/worldserver/WorldThread/WorldRunnable.cpp | 12 |
3 files changed, 33 insertions, 46 deletions
diff --git a/src/server/worldserver/CommandLine/CliRunnable.cpp b/src/server/worldserver/CommandLine/CliRunnable.cpp index cd93964b709..d5aa0364eaf 100644 --- a/src/server/worldserver/CommandLine/CliRunnable.cpp +++ b/src/server/worldserver/CommandLine/CliRunnable.cpp @@ -698,29 +698,6 @@ int kb_hit_return() /// %Thread start void CliRunnable::run() { - ///- Init MySQL threads or connections - bool needInit = true; - if (!(sWorld.getIntConfig(CONFIG_MYSQL_BUNDLE_WORLDDB) & MYSQL_BUNDLE_RA)) - { - WorldDatabase.Init_MySQL_Connection(); - needInit = false; - } - - if (!(sWorld.getIntConfig(CONFIG_MYSQL_BUNDLE_LOGINDB) & MYSQL_BUNDLE_RA)) - { - LoginDatabase.Init_MySQL_Connection(); - needInit = false; - } - - if (!(sWorld.getIntConfig(CONFIG_MYSQL_BUNDLE_CHARDB) & MYSQL_BUNDLE_RA)) - { - CharacterDatabase.Init_MySQL_Connection(); - needInit = false; - } - - if (needInit) - MySQL::Thread_Init(); - ///- Display the list of available CLI functions then beep //sLog.outString(""); #if PLATFORM != WINDOWS @@ -786,15 +763,4 @@ void CliRunnable::run() } } - - ///- Free MySQL thread resources and deallocate lingering connections - if (!(sWorld.getIntConfig(CONFIG_MYSQL_BUNDLE_WORLDDB) & MYSQL_BUNDLE_RA)) - WorldDatabase.End_MySQL_Connection(); - if (!(sWorld.getIntConfig(CONFIG_MYSQL_BUNDLE_LOGINDB) & MYSQL_BUNDLE_RA)) - LoginDatabase.End_MySQL_Connection(); - - if (!(sWorld.getIntConfig(CONFIG_MYSQL_BUNDLE_CHARDB) & MYSQL_BUNDLE_RA)) - CharacterDatabase.End_MySQL_Connection(); - if (needInit) - MySQL::Thread_End(); } diff --git a/src/server/worldserver/Master.cpp b/src/server/worldserver/Master.cpp index 6f964c144f2..28e0a93fd21 100644 --- a/src/server/worldserver/Master.cpp +++ b/src/server/worldserver/Master.cpp @@ -33,6 +33,7 @@ #include "WorldSocketMgr.h" #include "Configuration/Config.h" #include "Database/DatabaseEnv.h" +#include "Database/DatabaseWorkerPool.h" #include "CliRunnable.h" #include "Log.h" @@ -134,9 +135,7 @@ public: { loopCounter = 0; sLog.outDetail ("Ping MySQL to keep connection alive"); - WorldDatabase.Query ("SELECT 1 FROM command LIMIT 1"); LoginDatabase.Query ("SELECT 1 FROM realmlist LIMIT 1"); - CharacterDatabase.Query ("SELECT 1 FROM bugreport LIMIT 1"); } } @@ -163,6 +162,15 @@ public: sLog.outString ("Starting Remote access listner on port %d on %s", raport, stringip.c_str ()); } + + bool needInit = true; + if ((LoginDatabase.GetBundleMask() & MYSQL_BUNDLE_RA)) + { + LoginDatabase.Init_MySQL_Connection(); + needInit = false; + } + if (needInit) + MySQL::Thread_Init(); } // Socket Selet time is in microseconds , not miliseconds!! @@ -176,13 +184,18 @@ public: h.Select (0, socketSelecttime); checkping (); } + + if (!needInit) + LoginDatabase.End_MySQL_Connection(); + else + MySQL::Thread_End(); } else { while (!World::IsStopped()) { ACE_Based::Thread::Sleep(static_cast<unsigned long> (socketSelecttime / 1000)); - checkping (); + // checkping (); -- What? } } } @@ -440,6 +453,7 @@ bool Master::_StartDB() sLog.SetLogDB(false); std::string dbstring; uint8 num_threads; + int32 mask; dbstring = sConfig.GetStringDefault("WorldDatabaseInfo", ""); if (dbstring.empty()) @@ -456,8 +470,10 @@ bool Master::_StartDB() return false; } + mask = sConfig.GetIntDefault("WorldDatabase.ThreadBundleMask", MYSQL_BUNDLE_ALL); + ///- Initialise the world database - if (!WorldDatabase.Open(dbstring, num_threads)) + if (!WorldDatabase.Open(dbstring, num_threads, MySQLThreadBundle(mask))) { sLog.outError("Cannot connect to world database %s", dbstring.c_str()); return false; @@ -478,12 +494,15 @@ bool Master::_StartDB() return false; } + mask = sConfig.GetIntDefault("CharacterDatabase.ThreadBundleMask", MYSQL_BUNDLE_ALL); + ///- Initialise the Character database - if (!CharacterDatabase.Open(dbstring, num_threads)) + if (!CharacterDatabase.Open(dbstring, num_threads, MySQLThreadBundle(mask))) { sLog.outError("Cannot connect to Character database %s", dbstring.c_str()); return false; } + ///- Get login database info from configuration file dbstring = sConfig.GetStringDefault("LoginDatabaseInfo", ""); if (dbstring.empty()) @@ -500,8 +519,10 @@ bool Master::_StartDB() return false; } + mask = sConfig.GetIntDefault("LoginDatabase.ThreadBundleMask", MYSQL_BUNDLE_ALL); + ///- Initialise the login database - if (!LoginDatabase.Open(dbstring, num_threads)) + if (!LoginDatabase.Open(dbstring, num_threads, MySQLThreadBundle(mask))) { sLog.outError("Cannot connect to login database %s", dbstring.c_str()); return false; diff --git a/src/server/worldserver/WorldThread/WorldRunnable.cpp b/src/server/worldserver/WorldThread/WorldRunnable.cpp index 257c8e69e18..6dfe0d809a5 100644 --- a/src/server/worldserver/WorldThread/WorldRunnable.cpp +++ b/src/server/worldserver/WorldThread/WorldRunnable.cpp @@ -45,18 +45,18 @@ void WorldRunnable::run() { ///- Init MySQL threads or connections bool needInit = true; - if (!(sWorld.getIntConfig(CONFIG_MYSQL_BUNDLE_WORLDDB) & MYSQL_BUNDLE_RA)) + if (!(WorldDatabase.GetBundleMask() & MYSQL_BUNDLE_WORLD)) { WorldDatabase.Init_MySQL_Connection(); needInit = false; } - if (!(sWorld.getIntConfig(CONFIG_MYSQL_BUNDLE_LOGINDB) & MYSQL_BUNDLE_RA)) + if (!(LoginDatabase.GetBundleMask() & MYSQL_BUNDLE_WORLD)) { LoginDatabase.Init_MySQL_Connection(); needInit = false; } - if (!(sWorld.getIntConfig(CONFIG_MYSQL_BUNDLE_CHARDB) & MYSQL_BUNDLE_RA)) + if (!(CharacterDatabase.GetBundleMask() & MYSQL_BUNDLE_WORLD)) { CharacterDatabase.Init_MySQL_Connection(); needInit = false; @@ -117,13 +117,13 @@ void WorldRunnable::run() sMapMgr.UnloadAll(); // unload all grids (including locked in memory) ///- Free MySQL thread resources and deallocate lingering connections - if (!(sWorld.getIntConfig(CONFIG_MYSQL_BUNDLE_WORLDDB) & MYSQL_BUNDLE_RA)) + if (!(WorldDatabase.GetBundleMask() & MYSQL_BUNDLE_WORLD)) WorldDatabase.End_MySQL_Connection(); - if (!(sWorld.getIntConfig(CONFIG_MYSQL_BUNDLE_LOGINDB) & MYSQL_BUNDLE_RA)) + if (!(LoginDatabase.GetBundleMask() & MYSQL_BUNDLE_WORLD)) LoginDatabase.End_MySQL_Connection(); - if (!(sWorld.getIntConfig(CONFIG_MYSQL_BUNDLE_CHARDB) & MYSQL_BUNDLE_RA)) + if (!(CharacterDatabase.GetBundleMask() & MYSQL_BUNDLE_WORLD)) CharacterDatabase.End_MySQL_Connection(); if (needInit) |
