MySQL 8.0.37
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/* Decrement connection counter */
80/*
81 thread_created is maintained by thread pool when activated since
82 user threads are created by the thread pool (and also special
83 threads to maintain the thread pool). This is done through
84 inc_thread_created.
85*/
87
90
91/*
92 Interface to global thread list iterator functions.
93 Executes a function with signature 'void f(THD*, uint64)' for all THDs.
94*/
95typedef void(do_thd_impl_uint64)(THD *, uint64);
97
98/* Needed to get access to scheduler variables */
99void *thd_get_scheduler_data(THD *thd);
100void thd_set_scheduler_data(THD *thd, void *data);
102void thd_set_psi(THD *thd, PSI_thread *psi);
103
104/* Interface to THD variables and functions */
105void thd_set_killed(THD *thd);
106void thd_clear_errors(THD *thd);
107void thd_close_connection(THD *thd);
109void thd_lock_data(THD *thd);
110void thd_unlock_data(THD *thd);
114void thd_set_net_read_write(THD *thd, uint val);
116void thd_set_not_killable(THD *thd);
117ulong thd_get_net_wait_timeout(THD *thd);
119void thd_store_globals(THD *thd);
121
122/*
123 The thread pool must be able to execute statements using the connection
124 state in THD object. This is the main objective of the thread pool to
125 schedule the start of these commands.
126*/
127bool do_command(THD *thd);
128
129/*
130 The thread pool requires an interface to the connection logic in the
131 MySQL Server since the thread pool will maintain the event logic on
132 the TCP connection of the MySQL Server. Thus new connections, dropped
133 connections will be discovered by the thread pool and it needs to
134 ensure that the proper MySQL Server logic attached to these events is
135 executed.
136*/
137/* Prepare connection as part of connection set-up */
138bool thd_prepare_connection(THD *thd);
139/* Release auditing before executing statement */
140void mysql_audit_release(THD *thd);
141/* Check if connection is still alive */
142bool thd_connection_alive(THD *thd);
143/* Close connection with possible error code */
144void close_connection(THD *thd, uint sql_errno, bool server_shutdown,
145 bool generate_event);
146/* End the connection before closing it */
147void end_connection(THD *thd);
148/* Reset thread globals */
149void reset_thread_globals(THD *thd);
150
151/*
152 max_connections is needed to calculate the maximum number of threads
153 that is allowed to be started by the thread pool. The method
154 get_max_connections() gets reference to this variable.
155*/
156ulong get_max_connections(void);
157/*
158 connection_attrib is the thread attributes for connection threads,
159 the method get_connection_attrib provides a reference to these
160 attributes.
161*/
163
164/* Increment the status variable 'Aborted_connects'. */
166
167#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:34
bool do_command(THD *thd)
Read one command from connection and execute it (query or simple command).
Definition: sql_parse.cc:1308
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:888
PSI_thread * thd_get_psi(THD *thd)
Get reference to Performance Schema object for THD object.
Definition: sql_thd_api.cc:109
void do_for_all_thd(do_thd_impl_uint64, uint64)
Definition: mysqld_thd_manager.cc:381
ulong get_max_connections(void)
Get max number of connections.
Definition: sql_thd_api.cc:301
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:222
void close_connection(THD *thd, uint sql_errno, bool server_shutdown, bool generate_event)
Close a connection.
Definition: sql_connect.cc:913
ulong thd_get_net_wait_timeout(THD *thd)
Get net_wait_timeout for THD object.
Definition: sql_thd_api.cc:119
THD * thd_get_current_thd()
Get current THD object from thread local data.
Definition: sql_thd_api.cc:177
void * thd_get_scheduler_data(THD *thd)
Get reference to scheduler data object.
Definition: sql_thd_api.cc:88
my_thread_attr_t * get_connection_attrib(void)
Get thread attributes for connection threads.
Definition: sql_thd_api.cc:293
void reset_thread_globals(THD *thd)
Reset thread globals associated.
Definition: sql_thd_api.cc:185
void thd_lock_thread_count()
Definition: mysqld_thd_manager.cc:354
uint thd_get_net_read_write(THD *thd)
Get reading/writing on socket from THD object.
Definition: sql_thd_api.cc:244
void thd_lock_data(THD *thd)
Lock data that needs protection in THD object.
Definition: sql_thd_api.cc:196
void thd_close_connection(THD *thd)
Close the socket used by this connection.
Definition: sql_thd_api.cc:166
void mysql_audit_release(THD *thd)
Release any resources associated with the current thd.
Definition: sql_audit.cc:1147
void thd_set_killed(THD *thd)
Set the state on connection to killed.
Definition: sql_thd_api.cc:138
void increment_aborted_connects()
Definition: connection_handler_manager.cc:281
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:265
void thd_unlock_data(THD *thd)
Unlock data that needs protection in THD object.
Definition: sql_thd_api.cc:204
THD * create_thd(Channel_info *channel_info)
Definition: connection_handler_manager.cc:267
bool thd_connection_alive(THD *thd)
Definition: sql_connect.cc:931
int thd_connection_has_data(THD *thd)
Check if there is buffered data on the socket representing the connection.
Definition: sql_thd_api.cc:232
void end_connection(THD *thd)
Definition: sql_connect.cc:731
void thd_set_net_read_write(THD *thd, uint val)
Set reading/writing on socket, used by SHOW PROCESSLIST.
Definition: sql_thd_api.cc:255
void() do_thd_impl_uint64(THD *, uint64)
Definition: thread_pool_priv.h:95
my_socket thd_get_fd(THD *thd)
Get socket file descriptor for this connection.
Definition: sql_thd_api.cc:275
void thd_unlock_thread_count()
Definition: mysqld_thd_manager.cc:359
void destroy_channel_info(Channel_info *channel_info)
Definition: connection_handler_manager.cc:275
void thd_set_psi(THD *thd, PSI_thread *psi)
Set reference to Performance Schema object for THD object.
Definition: sql_thd_api.cc:130
void thd_set_scheduler_data(THD *thd, void *data)
Set reference to Scheduler data object for THD object.
Definition: sql_thd_api.cc:97
bool thd_is_transaction_active(THD *thd)
Support method to check if connection has already started transaction.
Definition: sql_thd_api.cc:214
bool thd_check_connection_admin_privilege(THD *thd)
void dec_connection_count()
Definition: connection_handler_manager.cc:277
void thd_clear_errors(THD *thd)
Clear errors from the previous THD.
Definition: sql_thd_api.cc:157
void thd_store_globals(THD *thd)
Set thread specific environment required for thd cleanup in thread pool.
Definition: sql_thd_api.cc:285
void inc_thread_created()
Definition: mysqld_thd_manager.cc:350
unsigned int uint
Definition: uca9-dump.cc:75