add database-aware MySQL pooling
This commit is contained in:
+7
-5
@@ -968,14 +968,14 @@ public:
|
||||
delete db;
|
||||
}
|
||||
|
||||
MySQL* mysql_checkout(const String& host, const String& username, const String& password, bool& reused, bool& persistent)
|
||||
MySQL* mysql_checkout(const String& host, const String& username, const String& password, const String& database, bool& reused, bool& persistent)
|
||||
{
|
||||
reused = false;
|
||||
persistent = false;
|
||||
for(size_t i = 0; i < mysql_persistent_pool.size(); i++)
|
||||
{
|
||||
MySQL* db = mysql_persistent_pool[i];
|
||||
if(!db || !db->connection || db->request_host != host || db->request_username != username || db->request_password != password)
|
||||
if(!db || !db->connection || db->request_host != host || db->request_username != username || db->request_password != password || db->request_database != database)
|
||||
continue;
|
||||
if(db->reset_connection())
|
||||
{
|
||||
@@ -1000,7 +1000,8 @@ public:
|
||||
db->request_host = host;
|
||||
db->request_username = username;
|
||||
db->request_password = password;
|
||||
if(!db->connect(host, username, password) || !db->connection)
|
||||
db->request_database = database;
|
||||
if(!db->connect(host, username, password, database) || !db->connection)
|
||||
return(db);
|
||||
if(persistent)
|
||||
{
|
||||
@@ -3705,9 +3706,10 @@ private:
|
||||
String host = request["host"].to_string();
|
||||
String username = request["username"].to_string();
|
||||
String password = request["password"].to_string();
|
||||
String database = request["database"].to_string();
|
||||
MySQL* db = 0;
|
||||
for(auto* pooled : self->mysql_request_pool)
|
||||
if(pooled && pooled->connection && pooled->request_host == host && pooled->request_username == username && pooled->request_password == password)
|
||||
if(pooled && pooled->connection && pooled->request_host == host && pooled->request_username == username && pooled->request_password == password && pooled->request_database == database)
|
||||
{
|
||||
db = pooled;
|
||||
connection_source = "request";
|
||||
@@ -3718,7 +3720,7 @@ private:
|
||||
{
|
||||
bool reused = false;
|
||||
bool persistent = false;
|
||||
db = self->worker.mysql_checkout(host, username, password, reused, persistent);
|
||||
db = self->worker.mysql_checkout(host, username, password, database, reused, persistent);
|
||||
connection_source = reused ? "worker" : "new";
|
||||
ok = db && db->connection;
|
||||
if(ok && db->connection)
|
||||
|
||||
Reference in New Issue
Block a user