MySQL 9.0.0
Source Code Documentation
thread_pool_priv.h
Go to the documentation of this file.
1/*
2 Copyright (c) 2010, 2024, Oracle and/or its affiliates.
3
4 This program is free software; you can redistribute it and/or modify
5 it under the terms of the GNU General Public License, version 2.0,
6 as published by the Free Software Foundation.
7
8 This program is designed to work with certain software (including
9 but not limited to OpenSSL) that is licensed under separate terms,
10 as designated in a particular file or component or in included license
11 documentation. The authors of MySQL hereby grant you an additional
12 permission to link the program and your derivative works with the
13 separately licensed software that they have either included with
14 the program or referenced in the documentation.
15
16 This program is distributed in the hope that it will be useful,
17 but WITHOUT ANY WARRANTY; without even the implied warranty of
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 GNU General Public License, version 2.0, for more details.
20
21 You should have received a copy of the GNU General Public License
22 along with this program; if not, write to the Free Software
23 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
24*/
25
26#ifndef THREAD_POOL_PRIV_INCLUDED
27#define THREAD_POOL_PRIV_INCLUDED
28
29/**
30 @file include/mysql/thread_pool_priv.h
31 All accesses to THD variables and functions are defined in this header file.
32*/
33#include <mysqld_error.h> /* To get ER_ERROR_ON_READ */
34
37
38/**
39 Called by the server when a new client connects.
40
41 @param channel_info Pointer to object containing information
42 about the new connection.
43
44 @retval true failure
45 @retval false success
46*/
47typedef bool (*add_connection_t)(Channel_info *channel_info);
48
49/**
50 Called by the server when the connection handler is destroyed.
51*/
52typedef void (*end_t)(void);
53
54/**
55 This structure must be populated by plugins which implement connection
56 handlers and passed as an argument to my_connection_handler_set() in
57 order to activate the connection handler.
58
59 The structure contains pointers to plugin functions which the server
60 will call when a new client connects or when the connection handler is
61 unloaded. It also contains the maximum number of threads the connection
62 handler will create.
63*/
65 /**
66 The maximum number of threads this connection handler will create.
67 */
69
72};
73
74/* create thd from channel_info object */
75THD *create_thd(Channel_info *channel_info);
76/* destroy channel_info object */
77void destroy_channel_info(Channel_info *channel_info);
78/* Is the connection events loop aborted during shutdown. */
80/* Decrement connection counter */
82/*
83 thread_created is maintained by thread pool when activated since
84 user threads are created by the thread pool (and also special
85 threads to maintain the thread pool). This is done through
86 inc_thread_created.
87*/
89
92
93/*
94 Interface to global thread list iterator functions.
95 Executes a function with signature 'void f(THD*, uint64)' for all THDs.
96*/
97typedef void(do_thd_impl_uint64)(THD *, uint64);
99
100/* Needed to get access to scheduler variables */
101void *thd_get_scheduler_data(THD *thd);
102void thd_set_scheduler_data(THD *thd, void *data);
104void thd_set_psi(THD *thd, PSI_thread *psi);
105
106/* Interface to THD variables and functions */
107void thd_set_killed(THD *thd);
108void thd_clear_errors(THD *thd);
109void thd_close_connection(THD *thd);
111void thd_lock_data(THD *thd);
112void thd_unlock_data(THD *thd);
116void thd_set_net_read_write(THD *thd, uint val);
117uint thd_get_net_read_write(THD *thd);
118void thd_set_not_killable(THD *thd);
119ulong thd_get_net_wait_timeout(THD *thd);
122void thd_store_globals(THD *thd);
124
125/*
126 The thread pool must be able to execute statements using the connection
127 state in THD object. This is the main objective of the thread pool to
128 schedule the start of these commands.
129*/
130bool do_command(THD *thd);
131
132/*
133 The thread pool requires an interface to the connection logic in the
134 MySQL Server since the thread pool will maintain the event logic on
135 the TCP connection of the MySQL Server. Thus new connections, dropped
136 connections will be discovered by the thread pool and it needs to
137 ensure that the proper MySQL Server logic attached to these events is
138 executed.
139*/
140/* Prepare connection as part of connection set-up */
141bool thd_prepare_connection(THD *thd);
142/* Release auditing before executing statement */
143void mysql_audit_release(THD *thd);
144/* Check if connection is still alive */
145bool thd_connection_alive(THD *thd);
146/* Close connection with possible error code */
147void close_connection(THD *thd, uint sql_errno, bool server_shutdown,
148 bool generate_event);
149/* End the connection before closing it */
150void end_connection(THD *thd);
151/* Reset thread globals */
152void reset_thread_globals(THD *thd);
153
154/*
155 max_connections is needed to calculate the maximum number of threads
156 that is allowed to be started by the thread pool. The method
157 get_max_connections() gets reference to this variable.
158*/
159ulong get_max_connections(void);
160/*
161 connection_attrib is the thread attributes for connection threads,
162 the method get_connection_attrib provides a reference to these
163 attributes.
164*/
166
167/* Increment the status variable 'Aborted_connects'. */
169
170#endif // THREAD_POOL_PRIV_INCLUDED
This abstract base class represents connection channel information about a new connection.
Definition: channel_info.h:47
For each client connection we create a separate thread with THD serving as a thread/connection descri...
Definition: sql_lexer_thd.h:36
bool do_command(THD *thd)
Read one command from connection and execute it (query or simple command).
Definition: sql_parse.cc:1322
struct PSI_thread PSI_thread
Definition: psi_thread_bits.h:82
uint64_t uint64
Definition: my_inttypes.h:69
pthread_attr_t my_thread_attr_t
Definition: my_thread_bits.h:49
int my_socket
Definition: mysql.h:65
This structure must be populated by plugins which implement connection handlers and passed as an argu...
Definition: thread_pool_priv.h:64
uint max_threads
The maximum number of threads this connection handler will create.
Definition: thread_pool_priv.h:68
add_connection_t add_connection
Definition: thread_pool_priv.h:70
end_t end
Definition: thread_pool_priv.h:71
An instrumented socket.
Definition: mysql_socket_bits.h:35
void(* end_t)(void)
Called by the server when the connection handler is destroyed.
Definition: thread_pool_priv.h:52
bool thd_prepare_connection(THD *thd)
Definition: sql_connect.cc:893
PSI_thread * thd_get_psi(THD *thd)
Get reference to Performance Schema object for THD object.
Definition: sql_thd_api.cc:110
void do_for_all_thd(do_thd_impl_uint64, uint64)
Definition: mysqld_thd_manager.cc:397
ulong get_max_connections(void)
Get max number of connections.
Definition: sql_thd_api.cc:313
bool thd_in_active_multi_stmt_transaction(const THD *)
Predicate for determining if connection is in active multi-statement transaction.
Definition: sql_thd_api.cc:223
void close_connection(THD *thd, uint sql_errno, bool server_shutdown, bool generate_event)
Close a connection.
Definition: sql_connect.cc:918
ulong thd_get_net_wait_timeout(THD *thd)
Get net_wait_timeout for THD object.
Definition: sql_thd_api.cc:120
THD * thd_get_current_thd()
Get current THD object from thread local data.
Definition: sql_thd_api.cc:178
void * thd_get_scheduler_data(THD *thd)
Get reference to scheduler data object.
Definition: sql_thd_api.cc:89
my_thread_attr_t * get_connection_attrib(void)
Get thread attributes for connection threads.
Definition: sql_thd_api.cc:305
void reset_thread_globals(THD *thd)
Reset thread globals associated.
Definition: sql_thd_api.cc:186
void thd_lock_thread_count()
Definition: mysqld_thd_manager.cc:370
uint thd_get_net_read_write(THD *thd)
Get reading/writing on socket from THD object.
Definition: sql_thd_api.cc:245
void thd_lock_data(THD *thd)
Lock data that needs protection in THD object.
Definition: sql_thd_api.cc:197
void thd_close_connection(THD *thd)
Close the socket used by this connection.
Definition: sql_thd_api.cc:167
void mysql_audit_release(THD *thd)
Release any resources associated with the current thd.
Definition: sql_audit.cc:609
void thd_set_killed(THD *thd)
Set the state on connection to killed.
Definition: sql_thd_api.cc:139
void increment_aborted_connects()
Definition: connection_handler_manager.cc:283
bool(* add_connection_t)(Channel_info *channel_info)
Called by the server when a new client connects.
Definition: thread_pool_priv.h:47
void thd_set_not_killable(THD *thd)
Mark the THD as not killable as it is not currently used by a thread.
Definition: sql_thd_api.cc:266
void thd_unlock_data(THD *thd)
Unlock data that needs protection in THD object.
Definition: sql_thd_api.cc:205
THD * create_thd(Channel_info *channel_info)
Definition: connection_handler_manager.cc:269
bool thd_connection_alive(THD *thd)
Definition: sql_connect.cc:936
int thd_connection_has_data(THD *thd)
Check if there is buffered data on the socket representing the connection.
Definition: sql_thd_api.cc:233
void end_connection(THD *thd)
Definition: sql_connect.cc:733
MYSQL_SOCKET thd_get_mysql_socket(THD *)
Get MYSQL_SOCKET struct for this connection.
Definition: sql_thd_api.cc:287
void thd_set_net_read_write(THD *thd, uint val)
Set reading/writing on socket, used by SHOW PROCESSLIST.
Definition: sql_thd_api.cc:256
void() do_thd_impl_uint64(THD *, uint64)
Definition: thread_pool_priv.h:97
my_socket thd_get_fd(THD *thd)
Get socket file descriptor for this connection.
Definition: sql_thd_api.cc:276
void thd_unlock_thread_count()
Definition: mysqld_thd_manager.cc:375
void destroy_channel_info(Channel_info *channel_info)
Definition: connection_handler_manager.cc:277
void thd_set_psi(THD *thd, PSI_thread *psi)
Set reference to Performance Schema object for THD object.
Definition: sql_thd_api.cc:131
void thd_set_scheduler_data(THD *thd, void *data)
Set reference to Scheduler data object for THD object.
Definition: sql_thd_api.cc:98
bool thd_is_transaction_active(THD *thd)
Support method to check if connection has already started transaction.
Definition: sql_thd_api.cc:215
bool thd_check_connection_admin_privilege(THD *thd)
void dec_connection_count()
Definition: connection_handler_manager.cc:279
void thd_clear_errors(THD *thd)
Clear errors from the previous THD.
Definition: sql_thd_api.cc:158
void thd_store_globals(THD *thd)
Set thread specific environment required for thd cleanup in thread pool.
Definition: sql_thd_api.cc:297
void inc_thread_created()
Definition: mysqld_thd_manager.cc:366
bool connection_events_loop_aborted()
Definition: mysqld.h:745