MySQL 8.4.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);
121void thd_store_globals(THD *thd);
123
124/*
125 The thread pool must be able to execute statements using the connection
126 state in THD object. This is the main objective of the thread pool to
127 schedule the start of these commands.
128*/
129bool do_command(THD *thd);
130
131/*
132 The thread pool requires an interface to the connection logic in the
133 MySQL Server since the thread pool will maintain the event logic on
134 the TCP connection of the MySQL Server. Thus new connections, dropped
135 connections will be discovered by the thread pool and it needs to
136 ensure that the proper MySQL Server logic attached to these events is
137 executed.
138*/
139/* Prepare connection as part of connection set-up */
140bool thd_prepare_connection(THD *thd);
141/* Release auditing before executing statement */
142void mysql_audit_release(THD *thd);
143/* Check if connection is still alive */
144bool thd_connection_alive(THD *thd);
145/* Close connection with possible error code */
146void close_connection(THD *thd, uint sql_errno, bool server_shutdown,
147 bool generate_event);
148/* End the connection before closing it */
149void end_connection(THD *thd);
150/* Reset thread globals */
151void reset_thread_globals(THD *thd);
152
153/*
154 max_connections is needed to calculate the maximum number of threads
155 that is allowed to be started by the thread pool. The method
156 get_max_connections() gets reference to this variable.
157*/
158ulong get_max_connections(void);
159/*
160 connection_attrib is the thread attributes for connection threads,
161 the method get_connection_attrib provides a reference to these
162 attributes.
163*/
165
166/* Increment the status variable 'Aborted_connects'. */
168
169#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:1321
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
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:302
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:294
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
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:286
void inc_thread_created()
Definition: mysqld_thd_manager.cc:366
bool connection_events_loop_aborted()
Definition: mysqld.h:746