Commit Graph

64 Commits

Author SHA1 Message Date
kiper
8299627ed9 Update headers for 2012. HAPPY NEW YEAR!!! 2012-01-01 00:32:13 +01:00
leak
64a2a29506 Core/DBLayer: Convert Execute() queries to prepared statements 2011-12-25 02:22:10 +01:00
Machiavelli
392baafed4 Core/DBLayer: Documentation update 2011-12-19 11:11:25 +01:00
Shauren
8305b0240b Core/DB: Fixed a crash on shutdown under msvc compiler 2011-09-30 18:42:26 +02:00
Spp-
e9aa72cc7b Cosmetic: rename function escape_string to EscapeString 2011-06-30 14:52:44 +02:00
Machiavelli
0df059d5a2 Core/DBLayer: Don't lock a connection when doing mysql_real_escape_string as it doesn't need to interact with the server. 2011-06-22 15:04:13 +02:00
Machiavelli
402198c5ff Core/DBLayer: Proper core-side handling of MySQL errno 1213 to prevent a snowballeffect (until innodb_lock_wait_timeout) 2011-05-23 16:33:33 +02:00
leak
1003f30448 Add spaces after commas 2011-04-29 20:47:02 +02:00
Azazel
4db04b63dd Core/DBLayer: make use of return result of Connection::Open method and allow core to output all the errors in prepared statements instead of aborting on first error. 2011-04-07 15:30:38 +06:00
leak
57f85ab7da Core/DBLayer: Replace prepared statement arrays with a map to avoid asynchronous indexes at query logging or error output
- Add values to prepared statement query log messages
- Killed a bit Engrish and trailing white whitespaces
2011-01-26 00:41:55 +01:00
Machiavelli
7f3375b8f9 Core/DBLayer: Fix another possible crash on shutdown. This should be the last of them caused by this area of the core. 2011-01-16 13:33:47 +01:00
Machiavelli
bd85914d92 Core/DBLayer: Properly manage mysql library initialization and shutdown in authserver and worldserver. Prevent multiple calls and make it more elegant. 2011-01-13 21:30:37 +01:00
Machiavelli
4c15ebe09d Core/DBLayer: Properly deallocate SQLOperation objects from Databaseworkerpool queue. 2011-01-13 20:28:40 +01:00
Machiavelli
cf9250c29f Core/DBLayer:
- Implement DatabaseWorkerPool::DirectCommitTransaction for synchronous transaction execution (as opposed to asynchronous/enqueued).
- Add MySQL errno 1213 "Deadlock found when trying to get lock; try restarting transaction" handler. If 1213 is called the core will retry to directly execute the transaction a maximum of 5 times.
2011-01-13 20:07:09 +01:00
Machiavelli
957c69de83 Update copyright note for 2011.
Happy new year.
2011-01-01 15:01:13 +01:00
Shauren
928443d899 Core: Removed more operator workarounds for ACE_Singleton (missed previously because of inconsistent naming)
--HG--
branch : trunk
2010-12-23 23:25:44 +01:00
Machiavelli
76e111fa07 Core/DBLayer: Allow asynchronous queries with callbacks to be executed in prepared statement format as well.
+ Cleanup and documentation

--HG--
branch : trunk
2010-12-23 16:05:43 +01:00
Machiavelli
04e5be6276 Core/DBLayer: Add some garbage collection on DatabaseWorkerPool shutdown (deleting SQLOperation objects)
--HG--
branch : trunk
2010-12-17 16:02:09 +01:00
click
2642894342 Core: Add new system for parallelizing client packet processing. Handle WorldSession updates in Map::Update() where we are safe to proceed. Patch by Ambal.
(And clean up tabs and whitespace while rummaging around in there)
Closes issue 5084.

--HG--
branch : trunk
2010-12-13 22:37:56 +01:00
Machiavelli
d5f5fa59ab Add missing declarations as of recent merge
--HG--
branch : trunk
2010-12-13 17:34:27 +01:00
Machiavelli
451159cac4 Fix possible compile error under linux
--HG--
branch : trunk
2010-12-13 17:21:06 +01:00
Machiavelli
bd77fb6d47 Fix a typo, thanks to sss.nevan
--HG--
branch : trunk
2010-12-13 17:05:01 +01:00
Machiavelli
976225a9dd Core/DBLayer: Implement global ExecuteOrAppend methods to DatabaseWorkerPool for executing queries in a diverse context (transaction or non transaction) - instead of local to Guild.cpp
--HG--
branch : trunk
2010-12-13 16:27:14 +01:00
Machiavelli
426b28e344 Fix wrong vsprintf parameter added in merge.
--HG--
branch : trunk
2010-12-13 16:18:07 +01:00
Machiavelli
f1a73e89b8 Merge
--HG--
branch : trunk
2010-12-13 16:13:32 +01:00
Machiavelli
ea29d87dcc Backed out changeset: 8326a2411148
--HG--
branch : trunk
2010-12-13 09:18:49 +01:00
Machiavelli
f35c85acbe Core/DBLayer: Optimization in transaction code, and prevent a crash and memleak on shutdown.
--HG--
branch : trunk
2010-12-06 19:52:37 +01:00
Machiavelli
988a6f5c93 Core/DBLayer: Simplify template usage for DatabaseWorker
--HG--
branch : trunk
2010-12-06 19:28:05 +01:00
Machiavelli
b845b9d0fd Core/DBLayer:
- Make time format of MaxPingTime consistent between authserver and worldserver. Note that the value is in minutes, update your config files accordingly if needed.
- Remove obsolete atomic uint32 and prevent concurrent calls to vector::size() in DatabaseWorkerPool

--HG--
branch : trunk
2010-12-05 16:48:47 +01:00
Machiavelli
f5d6319d4d Core/DBLayer:
- Make the mysql connectionpool shared for async and syncrhonous connections.
- Allow configurable amount of connections for the pool
- Allow configurable amount of delaythreads
Note that delaythreads now only represent in-core threads. Whenever they execute a task they will pick a free connection from the pool instead of using their previously unique assigned connection.
The purpose of this design change is better distribution of SQL requests (no bottlenecks paired with idling) among available resources.
This also prevents a ¨memory waste¨ of preparing async prepared statements on synchronous connections (that were never called) - and vice versa. Now, connections aren´t explicitly async or synchronous, they serve both purposes.

Use at own risk, might cause instabilities.
Don´t forget to update your config files and clear your cmake cache.

--HG--
branch : trunk
2010-12-04 21:50:36 +01:00
Machiavelli
733b72d29c Core/DBLayer: Add method DirectExecute for synchronous execution of prepared statements (without resultset)
Author: [M]axx

--HG--
branch : trunk
2010-11-21 18:50:11 +01:00
click
67fade84d3 Core/Commands: Enable SQL query logging by config and command )patch by leak)
Closes issue 4853.

--HG--
branch : trunk
2010-11-19 13:13:07 +01:00
Machiavelli
05a292633c Core/DBLayer:
- Fix a race condition in KeepAlive() when connections are using mysql context when ping is called.
- Don´t wait for locks to be released on a connection when pinging, this means the connection is not idle and locking is redundant.

Patch by admin@****.net

Fixes issue #4599

--HG--
branch : trunk
2010-10-31 10:55:29 +01:00
click
613b81f36f REALLY fix the CRLF-crap...
--HG--
branch : trunk
2010-10-07 15:54:07 +02:00
click
df66aee929 Yet more copyright header updates
--HG--
branch : trunk
2010-10-07 13:38:35 +02:00
Machiavelli
fcec787e9c Core/DBLayer: Pass connection info down to lower level class MySQLConnection and use relevant data in logging messages in its methods
--HG--
branch : trunk
2010-09-29 15:29:57 +02:00
Machiavelli
bf72fa749f Core/DBLayer: Store MySQL connection details in a struct and print relevant data in sql driver messages
--HG--
branch : trunk
2010-09-29 08:48:06 +02:00
Machiavelli
a9e9a2c884 Core/DBLayer:
- DB Threading model update
* Get rid of ThreadBundleMask and bundled connection
* Implement configurable amount of Synch threads for databasepools
* Use modulus based algorithm to check for free synchronous connections instead of previous ¨get connection by thread key or bundlemask¨ feature
* Locks on mysql context objects are now managed outside the mysql query methods

Fixes issue #4058
Fixes issue #4059
Introduces a ton of more issues. Use at own risk. You were warned. Really.

Don´t forget to update your worldserver.conf

--HG--
branch : trunk
2010-09-27 00:20:56 +02:00
click
461590832a Core: Generic cleanup (tab2spaces/whitespace removal)
--HG--
branch : trunk
2010-09-25 22:03:57 +02:00
Machiavelli
62946f9ef6 Core/DBLayer:
- Rewrite KeepAlive method for DatabaseWorkerPool. Use mysql_ping instead of explicit select queries, and also schedule KeepAlives for asynchronous threads.
NOTE: While the function is implemented and previous keepalive calls were transformed, it´s possible the keepalive call will need to be placed in several other locations in the code. Please leave feedback on whether or not this fixes your timeout issues.

Update issue #4062

--HG--
branch : trunk
2010-09-25 01:05:24 +02:00
Machiavelli
09aeff1027 Core/DBLayer: Return proper connection handle from DatabaseWorkerPool<T>::GetConnection
Updates issue #4062
Updates issue #4058

--HG--
branch : trunk
2010-09-24 22:41:24 +02:00
Machiavelli
3c6dc32030 Core/DBLayer:
- Rewrite Field class to be able to store both binary prepared statement data and data from adhoc query resultsets
- Buffer the data of prepared statements using ResultSet and Field classes and let go of mysql c api structures after PreparedResultSet constructor. Fixes a race condition and thus a possible crash/data corruption (issue pointed out to Derex, basic suggestion by raczman)
- Conform PreparedResultSet and ResultSet to the same design standards, and using Field class as data buffer class for both
* NOTE: This means the fetching methods are uniform again, using ¨Field* fields = result->Fetch();¨ and access to elements trough fields[x].
* NOTE: for access to the correct row in prepared statements, ¨Field* fields = result->Fetch();¨ must ALWAYS be called inside the do { }while(result->NextRow()) loop.
* NOTE: This means that Field::GetString() returns std::string object and Field::GetCString() returns const char* pointer.

Still experimental and all that jazz, not recommended for production servers until feedback is given.

--HG--
branch : trunk
2010-09-24 22:16:21 +02:00
Machiavelli
b50c931d6e Core/DBLayer: Move QueryHolder and BasicStatement operations to their own file and remove SQLOperation.cpp from revision control
--HG--
branch : trunk
2010-09-19 12:36:48 +02:00
Machiavelli
0982719f5f Core/DBLayer:
- Declare the datatypes used to determine transaction element data (prepared statement/adhoc query string) on a generic level in SQLOperation.h
- Implement variable SQL element data for SQLQueryHolder class so it can execute both prepared statements and adhoc queries
- Make MySQLConnection::Query for adhoc queries return pointer to type instead of an autopointer, the autopointer is now applied on higher level code just like the function for querying prepared statements

--HG--
branch : trunk
2010-09-19 12:16:29 +02:00
click
726e5cf466 Buildsystem/Core: Add new build-flag WITH_SQLDEBUG - adds support for enabling/disabling SQL-query logging
--HG--
branch : trunk
2010-09-17 20:36:29 +02:00
click
bf664b7a44 Cleanup/Core: Remove whitespace and tabs
--HG--
branch : trunk
2010-09-12 01:40:27 +02:00
Machiavelli
1de7e5bed1 Core/DBLayer:
* Example implementation of prepared statements with resultset in RealmList and AuthSocket code (selectively)
* Also correct a few bobo´s from previous commit.

--HG--
branch : trunk
2010-09-11 21:22:15 +02:00
Machiavelli
a41e99223e Core/DBLayer:
* Rename QueryResult class to ResultSet
* Rename QueryResult_AutoPtr to QueryResult
* Declare ACE refcounted auto pointer for PreparedResultSet class

--HG--
branch : trunk
2010-09-11 21:10:54 +02:00
Machiavelli
1dce5b78d5 Core/DBLayer: Implement lower level classes for prepared statements with resultsets. (Implementation in upper level code not yet possible)
--HG--
branch : trunk
2010-09-11 09:17:14 +02:00
Machiavelli
273679c5ba 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
2010-09-03 10:52:32 +02:00