mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
WL#5363: Thread Pool Service Interface
In order to allow thread schedulers to be dynamically loaded, it is necessary to make the following changes to the server: - Two new service interfaces - Modifications to InnoDB to inform the thread scheduler of state changes. - Changes to the VIO subsystem for checking if data is available on a socket. - Elimination of remains of the old thread pool implementation. The two new service interfaces introduces are: my_thread_scheduler A service interface to register a thread scheduler. thd_wait A service interface to inform thread scheduler that the thread is about to start waiting. In addition, the patch adds code that: - Add a call to thd_wait for table locks in mysys thd_lock.c by introducing a set function that can be used to set a callback to be used when waiting on a lock and resuming from waiting. - Calling the mysys set function from the server to set the callbacks correctly.
This commit is contained in:
@ -35,6 +35,7 @@
|
||||
#include "hostname.h" // inc_host_errors, ip_to_hostname,
|
||||
// reset_host_errors
|
||||
#include "sql_acl.h" // acl_getroot, NO_ACCESS, SUPER_ACL
|
||||
#include "sql_callback.h"
|
||||
|
||||
#if defined(HAVE_OPENSSL) && !defined(EMBEDDED_LIBRARY)
|
||||
/*
|
||||
@ -958,7 +959,7 @@ bool setup_connection_thread_globals(THD *thd)
|
||||
{
|
||||
close_connection(thd, ER_OUT_OF_RESOURCES, 1);
|
||||
statistic_increment(aborted_connects,&LOCK_status);
|
||||
thread_scheduler.end_thread(thd, 0);
|
||||
MYSQL_CALLBACK(thread_scheduler, end_thread, (thd, 0));
|
||||
return 1; // Error
|
||||
}
|
||||
return 0;
|
||||
@ -981,7 +982,7 @@ bool setup_connection_thread_globals(THD *thd)
|
||||
*/
|
||||
|
||||
|
||||
static bool login_connection(THD *thd)
|
||||
bool login_connection(THD *thd)
|
||||
{
|
||||
NET *net= &thd->net;
|
||||
int error;
|
||||
@ -1019,7 +1020,7 @@ static bool login_connection(THD *thd)
|
||||
This mainly updates status variables
|
||||
*/
|
||||
|
||||
static void end_connection(THD *thd)
|
||||
void end_connection(THD *thd)
|
||||
{
|
||||
NET *net= &thd->net;
|
||||
plugin_thdvar_cleanup(thd);
|
||||
@ -1060,7 +1061,7 @@ static void end_connection(THD *thd)
|
||||
Initialize THD to handle queries
|
||||
*/
|
||||
|
||||
static void prepare_new_connection_state(THD* thd)
|
||||
void prepare_new_connection_state(THD* thd)
|
||||
{
|
||||
Security_context *sctx= thd->security_ctx;
|
||||
|
||||
@ -1134,11 +1135,11 @@ void do_handle_one_connection(THD *thd_arg)
|
||||
|
||||
thd->thr_create_utime= my_micro_time();
|
||||
|
||||
if (thread_scheduler.init_new_connection_thread())
|
||||
if (MYSQL_CALLBACK_ELSE(thread_scheduler, init_new_connection_thread, (), 0))
|
||||
{
|
||||
close_connection(thd, ER_OUT_OF_RESOURCES, 1);
|
||||
statistic_increment(aborted_connects,&LOCK_status);
|
||||
thread_scheduler.end_thread(thd,0);
|
||||
MYSQL_CALLBACK(thread_scheduler, end_thread, (thd, 0));
|
||||
return;
|
||||
}
|
||||
|
||||
@ -1192,7 +1193,7 @@ void do_handle_one_connection(THD *thd_arg)
|
||||
|
||||
end_thread:
|
||||
close_connection(thd, 0, 1);
|
||||
if (thread_scheduler.end_thread(thd,1))
|
||||
if (MYSQL_CALLBACK_ELSE(thread_scheduler, end_thread, (thd, 1), 0))
|
||||
return; // Probably no-threads
|
||||
|
||||
/*
|
||||
|
Reference in New Issue
Block a user