/src/mysql-server/mysys/psi_noop.cc
Line | Count | Source |
1 | | /* Copyright (c) 2011, 2025, Oracle and/or its affiliates. |
2 | | |
3 | | This program is free software; you can redistribute it and/or modify |
4 | | it under the terms of the GNU General Public License, version 2.0, |
5 | | as published by the Free Software Foundation. |
6 | | |
7 | | This program is designed to work with certain software (including |
8 | | but not limited to OpenSSL) that is licensed under separate terms, |
9 | | as designated in a particular file or component or in included license |
10 | | documentation. The authors of MySQL hereby grant you an additional |
11 | | permission to link the program and your derivative works with the |
12 | | separately licensed software that they have either included with |
13 | | the program or referenced in the documentation. |
14 | | |
15 | | Without limiting anything contained in the foregoing, this file, |
16 | | which is part of C Driver for MySQL (Connector/C), is also subject to the |
17 | | Universal FOSS Exception, version 1.0, a copy of which can be found at |
18 | | http://oss.oracle.com/licenses/universal-foss-exception. |
19 | | |
20 | | This program is distributed in the hope that it will be useful, |
21 | | but WITHOUT ANY WARRANTY; without even the implied warranty of |
22 | | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
23 | | GNU General Public License, version 2.0, for more details. |
24 | | |
25 | | You should have received a copy of the GNU General Public License |
26 | | along with this program; if not, write to the Free Software |
27 | | Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ |
28 | | |
29 | | /** |
30 | | @file mysys/psi_noop.cc |
31 | | Always provide the noop performance interface, for plugins. |
32 | | */ |
33 | | |
34 | | #define HAVE_PSI_MUTEX_INTERFACE |
35 | | #define HAVE_PSI_RWLOCK_INTERFACE |
36 | | #define HAVE_PSI_COND_INTERFACE |
37 | | #define HAVE_PSI_FILE_INTERFACE |
38 | | #define HAVE_PSI_THREAD_INTERFACE |
39 | | #define HAVE_PSI_TABLE_INTERFACE |
40 | | #define HAVE_PSI_STAGE_INTERFACE |
41 | | #define HAVE_PSI_STATEMENT_INTERFACE |
42 | | #define HAVE_PSI_SP_INTERFACE |
43 | | #define HAVE_PSI_PS_INTERFACE |
44 | | #define HAVE_PSI_STATEMENT_DIGEST_INTERFACE |
45 | | #define HAVE_PSI_TRANSACTION_INTERFACE |
46 | | #define HAVE_PSI_SOCKET_INTERFACE |
47 | | #define HAVE_PSI_MEMORY_INTERFACE |
48 | | #define HAVE_PSI_METRICS_INTERFACE |
49 | | #define HAVE_PSI_ERROR_INTERFACE |
50 | | #define HAVE_PSI_IDLE_INTERFACE |
51 | | #define HAVE_PSI_METADATA_INTERFACE |
52 | | #define HAVE_PSI_DATA_LOCK_INTERFACE |
53 | | #define HAVE_PSI_SYSTEM_INTERFACE |
54 | | #define HAVE_PSI_TLS_CHANNEL_INTERFACE |
55 | | #define HAVE_PSI_SERVER_TELEMETRY_TRACES_INTERFACE |
56 | | #define HAVE_PSI_SERVER_TELEMETRY_LOGS_INTERFACE |
57 | | |
58 | | #include "my_config.h" |
59 | | |
60 | | #ifdef HAVE_SYS_SOCKET_H |
61 | | #include <sys/socket.h> |
62 | | #endif |
63 | | #include <sys/types.h> |
64 | | #include <ctime> |
65 | | |
66 | | #include "my_inttypes.h" |
67 | | #include "my_sys.h" // IWYU pragma: keep |
68 | | #include "my_thread.h" |
69 | | #include "mysql/components/services/bits/psi_error_bits.h" |
70 | | #include "mysql/components/services/bits/psi_idle_bits.h" |
71 | | #include "mysql/components/services/bits/psi_mdl_bits.h" |
72 | | #include "mysql/components/services/bits/psi_statement_bits.h" |
73 | | #include "mysql/components/services/bits/psi_tls_channel_bits.h" |
74 | | #include "mysql/components/services/bits/psi_transaction_bits.h" |
75 | | #include "mysql/psi/psi_cond.h" |
76 | | #include "mysql/psi/psi_data_lock.h" |
77 | | #include "mysql/psi/psi_error.h" |
78 | | #include "mysql/psi/psi_file.h" |
79 | | #include "mysql/psi/psi_idle.h" |
80 | | #include "mysql/psi/psi_logger_client.h" |
81 | | #include "mysql/psi/psi_mdl.h" |
82 | | #include "mysql/psi/psi_memory.h" |
83 | | #include "mysql/psi/psi_metric.h" |
84 | | #include "mysql/psi/psi_mutex.h" |
85 | | #include "mysql/psi/psi_rwlock.h" |
86 | | #include "mysql/psi/psi_socket.h" |
87 | | #include "mysql/psi/psi_stage.h" |
88 | | #include "mysql/psi/psi_statement.h" |
89 | | #include "mysql/psi/psi_system.h" |
90 | | #include "mysql/psi/psi_table.h" |
91 | | #include "mysql/psi/psi_thread.h" |
92 | | #include "mysql/psi/psi_tls_channel.h" |
93 | | #include "mysql/psi/psi_transaction.h" |
94 | | |
95 | | class THD; |
96 | | struct MDL_key; |
97 | | struct PSI_logger; |
98 | | struct log_attribute_t; |
99 | | |
100 | | // =========================================================================== |
101 | | |
102 | 0 | static void register_thread_noop(const char *, PSI_thread_info *, int) {} |
103 | | |
104 | | static int spawn_thread_noop(PSI_thread_key, unsigned int, |
105 | | my_thread_handle *thread, |
106 | | const my_thread_attr_t *attr, |
107 | 0 | my_start_routine start_routine, void *arg) { |
108 | 0 | return my_thread_create(thread, attr, start_routine, arg); |
109 | 0 | } |
110 | | |
111 | | static PSI_thread *new_thread_noop(PSI_thread_key, unsigned int, const void *, |
112 | 0 | ulonglong) { |
113 | 0 | return nullptr; |
114 | 0 | } |
115 | | |
116 | 0 | static void set_thread_id_noop(PSI_thread *, ulonglong) {} |
117 | | |
118 | 0 | static ulonglong get_current_thread_internal_id_noop() { return 0; } |
119 | | |
120 | 0 | static ulonglong get_thread_internal_id_noop(PSI_thread *) { return 0; } |
121 | | |
122 | 0 | static PSI_thread *get_thread_by_id_noop(ulonglong) { return nullptr; } |
123 | | |
124 | 0 | static void set_thread_THD_noop(PSI_thread *, THD *) {} |
125 | | |
126 | 0 | static void set_thread_os_id_noop(PSI_thread *) {} |
127 | | |
128 | 0 | static PSI_thread *get_thread_noop() { return nullptr; } |
129 | | |
130 | 0 | static void set_thread_user_noop(const char *, int) {} |
131 | | |
132 | 0 | static void set_thread_user_host_noop(const char *, int, const char *, int) {} |
133 | | |
134 | 0 | static void set_thread_db_noop(const char *, int) {} |
135 | | |
136 | 0 | static void set_thread_command_noop(int) {} |
137 | | |
138 | 0 | static void set_connection_type_noop(opaque_vio_type) {} |
139 | | |
140 | 0 | static void set_thread_start_time_noop(time_t) {} |
141 | | |
142 | 0 | static void set_thread_info_noop(const char *, uint) {} |
143 | | |
144 | 0 | static void set_thread_secondary_engine_noop(bool) {} |
145 | | |
146 | 0 | static void set_thread_noop(PSI_thread *) {} |
147 | | |
148 | 0 | static void set_thread_peer_port_noop(PSI_thread *, uint) {} |
149 | | |
150 | 0 | static int set_thread_resource_group_noop(const char *, int, void *) { |
151 | 0 | return 0; |
152 | 0 | } |
153 | | |
154 | | static int set_thread_resource_group_by_id_noop(PSI_thread *, ulonglong, |
155 | 0 | const char *, int, void *) { |
156 | 0 | return 0; |
157 | 0 | } |
158 | | |
159 | 0 | static void aggregate_thread_status_noop(PSI_thread *) {} |
160 | | |
161 | 0 | static void delete_current_thread_noop() {} |
162 | | |
163 | 0 | static void delete_thread_noop(PSI_thread *) {} |
164 | | |
165 | | static int set_thread_connect_attrs_noop(const char *buffer [[maybe_unused]], |
166 | | uint length [[maybe_unused]], |
167 | 0 | const void *from_cs [[maybe_unused]]) { |
168 | 0 | return 0; |
169 | 0 | } |
170 | | |
171 | | static void get_current_thread_event_id_noop(ulonglong *thread_internal_id, |
172 | 0 | ulonglong *event_id) { |
173 | 0 | *thread_internal_id = 0; |
174 | 0 | *event_id = 0; |
175 | 0 | } |
176 | | |
177 | | static void get_thread_event_id_noop(PSI_thread *, |
178 | | ulonglong *thread_internal_id, |
179 | 0 | ulonglong *event_id) { |
180 | 0 | *thread_internal_id = 0; |
181 | 0 | *event_id = 0; |
182 | 0 | } |
183 | | |
184 | 0 | static int get_thread_system_attrs_noop(PSI_thread_attrs *) { return 0; } |
185 | | |
186 | | static int get_thread_system_attrs_by_id_noop(PSI_thread *, ulonglong, |
187 | 0 | PSI_thread_attrs *) { |
188 | 0 | return 0; |
189 | 0 | } |
190 | | |
191 | 0 | static int register_notification_noop(const PSI_notification *, bool) { |
192 | 0 | return 0; |
193 | 0 | } |
194 | | |
195 | 0 | static int unregister_notification_noop(int) { return 0; } |
196 | | |
197 | 0 | static void notify_session_connect_noop(PSI_thread *) {} |
198 | | |
199 | 0 | static void notify_session_disconnect_noop(PSI_thread *) {} |
200 | | |
201 | 0 | static void notify_session_change_user_noop(PSI_thread *) {} |
202 | | |
203 | 0 | static void set_mem_cnt_THD_noop(THD *, THD **backup_thd) { |
204 | 0 | *backup_thd = nullptr; |
205 | 0 | } |
206 | | |
207 | 0 | static void detect_telemetry_noop(PSI_thread * /*unused*/) {} |
208 | 0 | static void abort_telemetry_noop(PSI_thread * /*unused*/) {} |
209 | | |
210 | | static PSI_thread_service_t psi_thread_noop = { |
211 | | register_thread_noop, |
212 | | spawn_thread_noop, |
213 | | new_thread_noop, |
214 | | set_thread_id_noop, |
215 | | get_current_thread_internal_id_noop, |
216 | | get_thread_internal_id_noop, |
217 | | get_thread_by_id_noop, |
218 | | set_thread_THD_noop, |
219 | | set_thread_os_id_noop, |
220 | | get_thread_noop, |
221 | | set_thread_user_noop, |
222 | | set_thread_user_host_noop, |
223 | | set_thread_db_noop, |
224 | | set_thread_command_noop, |
225 | | set_connection_type_noop, |
226 | | set_thread_start_time_noop, |
227 | | set_thread_info_noop, |
228 | | set_thread_secondary_engine_noop, |
229 | | set_thread_resource_group_noop, |
230 | | set_thread_resource_group_by_id_noop, |
231 | | set_thread_noop, |
232 | | set_thread_peer_port_noop, |
233 | | aggregate_thread_status_noop, |
234 | | delete_current_thread_noop, |
235 | | delete_thread_noop, |
236 | | set_thread_connect_attrs_noop, |
237 | | get_current_thread_event_id_noop, |
238 | | get_thread_event_id_noop, |
239 | | get_thread_system_attrs_noop, |
240 | | get_thread_system_attrs_by_id_noop, |
241 | | register_notification_noop, |
242 | | unregister_notification_noop, |
243 | | notify_session_connect_noop, |
244 | | notify_session_disconnect_noop, |
245 | | notify_session_change_user_noop, |
246 | | set_mem_cnt_THD_noop, |
247 | | detect_telemetry_noop, |
248 | | abort_telemetry_noop}; |
249 | | |
250 | | struct PSI_thread_bootstrap *psi_thread_hook = nullptr; |
251 | | PSI_thread_service_t *psi_thread_service = &psi_thread_noop; |
252 | | |
253 | 0 | void set_psi_thread_service(void *psi) { |
254 | 0 | psi_thread_service = (PSI_thread_service_t *)psi; |
255 | 0 | } |
256 | | |
257 | | // =========================================================================== |
258 | | |
259 | 0 | static void register_mutex_noop(const char *, PSI_mutex_info *, int) {} |
260 | | |
261 | 14 | static PSI_mutex *init_mutex_noop(PSI_mutex_key, const void *) { |
262 | 14 | return nullptr; |
263 | 14 | } |
264 | | |
265 | 0 | static void destroy_mutex_noop(PSI_mutex *) {} |
266 | | |
267 | | static PSI_mutex_locker *start_mutex_wait_noop(PSI_mutex_locker_state *, |
268 | | PSI_mutex *, PSI_mutex_operation, |
269 | 0 | const char *, uint) { |
270 | 0 | return nullptr; |
271 | 0 | } |
272 | | |
273 | 0 | static void end_mutex_wait_noop(PSI_mutex_locker *, int) {} |
274 | | |
275 | 0 | static void unlock_mutex_noop(PSI_mutex *) {} |
276 | | |
277 | | static PSI_mutex_service_t psi_mutex_noop = { |
278 | | register_mutex_noop, init_mutex_noop, destroy_mutex_noop, |
279 | | start_mutex_wait_noop, end_mutex_wait_noop, unlock_mutex_noop}; |
280 | | |
281 | | struct PSI_mutex_bootstrap *psi_mutex_hook = nullptr; |
282 | | PSI_mutex_service_t *psi_mutex_service = &psi_mutex_noop; |
283 | | |
284 | 0 | void set_psi_mutex_service(void *psi) { |
285 | 0 | psi_mutex_service = (PSI_mutex_service_t *)psi; |
286 | 0 | } |
287 | | |
288 | | // =========================================================================== |
289 | | |
290 | 0 | static void register_rwlock_noop(const char *, PSI_rwlock_info *, int) {} |
291 | | |
292 | 0 | static PSI_rwlock *init_rwlock_noop(PSI_rwlock_key, const void *) { |
293 | 0 | return nullptr; |
294 | 0 | } |
295 | | |
296 | 0 | static void destroy_rwlock_noop(PSI_rwlock *) {} |
297 | | |
298 | | static PSI_rwlock_locker *start_rwlock_rdwait_noop( |
299 | | struct PSI_rwlock_locker_state_v1 *, struct PSI_rwlock *, |
300 | 0 | enum PSI_rwlock_operation, const char *, uint) { |
301 | 0 | return nullptr; |
302 | 0 | } |
303 | | |
304 | 0 | static void end_rwlock_rdwait_noop(PSI_rwlock_locker *, int) {} |
305 | | |
306 | | static struct PSI_rwlock_locker *start_rwlock_wrwait_noop( |
307 | | struct PSI_rwlock_locker_state_v1 *, struct PSI_rwlock *, |
308 | 0 | enum PSI_rwlock_operation, const char *, uint) { |
309 | 0 | return nullptr; |
310 | 0 | } |
311 | | |
312 | 0 | static void end_rwlock_wrwait_noop(PSI_rwlock_locker *, int) {} |
313 | | |
314 | 0 | static void unlock_rwlock_noop(PSI_rwlock *, enum PSI_rwlock_operation) {} |
315 | | |
316 | | static PSI_rwlock_service_t psi_rwlock_noop = { |
317 | | register_rwlock_noop, init_rwlock_noop, destroy_rwlock_noop, |
318 | | start_rwlock_rdwait_noop, end_rwlock_rdwait_noop, start_rwlock_wrwait_noop, |
319 | | end_rwlock_wrwait_noop, unlock_rwlock_noop}; |
320 | | |
321 | | struct PSI_rwlock_bootstrap *psi_rwlock_hook = nullptr; |
322 | | PSI_rwlock_service_t *psi_rwlock_service = &psi_rwlock_noop; |
323 | | |
324 | 0 | void set_psi_rwlock_service(void *psi) { |
325 | 0 | psi_rwlock_service = (PSI_rwlock_service_t *)psi; |
326 | 0 | } |
327 | | |
328 | | // =========================================================================== |
329 | | |
330 | 0 | static void register_cond_noop(const char *, PSI_cond_info *, int) {} |
331 | | |
332 | 0 | static PSI_cond *init_cond_noop(PSI_cond_key, const void *) { return nullptr; } |
333 | | |
334 | 0 | static void destroy_cond_noop(PSI_cond *) {} |
335 | | |
336 | 0 | static void signal_cond_noop(PSI_cond *) {} |
337 | | |
338 | 0 | static void broadcast_cond_noop(PSI_cond *) {} |
339 | | |
340 | | static struct PSI_cond_locker *start_cond_wait_noop( |
341 | | struct PSI_cond_locker_state_v1 *, struct PSI_cond *, struct PSI_mutex *, |
342 | 0 | enum PSI_cond_operation, const char *, uint) { |
343 | 0 | return nullptr; |
344 | 0 | } |
345 | | |
346 | 0 | static void end_cond_wait_noop(PSI_cond_locker *, int) {} |
347 | | |
348 | | static PSI_cond_service_t psi_cond_noop = { |
349 | | register_cond_noop, init_cond_noop, destroy_cond_noop, |
350 | | signal_cond_noop, broadcast_cond_noop, start_cond_wait_noop, |
351 | | end_cond_wait_noop}; |
352 | | |
353 | | struct PSI_cond_bootstrap *psi_cond_hook = nullptr; |
354 | | PSI_cond_service_t *psi_cond_service = &psi_cond_noop; |
355 | | |
356 | 0 | void set_psi_cond_service(void *psi) { |
357 | 0 | psi_cond_service = (PSI_cond_service_t *)psi; |
358 | 0 | } |
359 | | |
360 | | // =========================================================================== |
361 | | |
362 | 0 | static void register_file_noop(const char *, PSI_file_info *, int) {} |
363 | | |
364 | | static PSI_file_locker *get_thread_file_name_locker_noop( |
365 | | PSI_file_locker_state *, PSI_file_key, enum PSI_file_operation, |
366 | 0 | const char *, const void *) { |
367 | 0 | return nullptr; |
368 | 0 | } |
369 | | |
370 | | static PSI_file_locker *get_thread_file_stream_locker_noop( |
371 | 0 | PSI_file_locker_state *, PSI_file *, enum PSI_file_operation) { |
372 | 0 | return nullptr; |
373 | 0 | } |
374 | | |
375 | | static PSI_file_locker *get_thread_file_descriptor_locker_noop( |
376 | 0 | PSI_file_locker_state *, File, enum PSI_file_operation) { |
377 | 0 | return nullptr; |
378 | 0 | } |
379 | | |
380 | 0 | static void create_file_noop(PSI_file_key, const char *, File) {} |
381 | | |
382 | 0 | static void start_file_open_wait_noop(PSI_file_locker *, const char *, uint) {} |
383 | | |
384 | 0 | static PSI_file *end_file_open_wait_noop(PSI_file_locker *, void *) { |
385 | 0 | return nullptr; |
386 | 0 | } |
387 | | |
388 | | static void end_file_open_wait_and_bind_to_descriptor_noop(PSI_file_locker *, |
389 | 0 | File) {} |
390 | | |
391 | | static void end_temp_file_open_wait_and_bind_to_descriptor_noop( |
392 | 0 | PSI_file_locker *, File, const char *) {} |
393 | | |
394 | | static void start_file_wait_noop(PSI_file_locker *, size_t, const char *, |
395 | 0 | uint) {} |
396 | | |
397 | 0 | static void end_file_wait_noop(PSI_file_locker *, size_t) {} |
398 | | |
399 | 0 | static void start_file_close_wait_noop(PSI_file_locker *, const char *, uint) {} |
400 | | |
401 | 0 | static void end_file_close_wait_noop(PSI_file_locker *, int) {} |
402 | | |
403 | | static void start_file_rename_wait_noop(PSI_file_locker *, size_t, const char *, |
404 | 0 | const char *, const char *, uint) {} |
405 | | |
406 | | static void end_file_rename_wait_noop(PSI_file_locker *, const char *, |
407 | 0 | const char *, int) {} |
408 | | |
409 | | static PSI_file_service_t psi_file_noop = { |
410 | | register_file_noop, |
411 | | create_file_noop, |
412 | | get_thread_file_name_locker_noop, |
413 | | get_thread_file_stream_locker_noop, |
414 | | get_thread_file_descriptor_locker_noop, |
415 | | start_file_open_wait_noop, |
416 | | end_file_open_wait_noop, |
417 | | end_file_open_wait_and_bind_to_descriptor_noop, |
418 | | end_temp_file_open_wait_and_bind_to_descriptor_noop, |
419 | | start_file_wait_noop, |
420 | | end_file_wait_noop, |
421 | | start_file_close_wait_noop, |
422 | | end_file_close_wait_noop, |
423 | | start_file_rename_wait_noop, |
424 | | end_file_rename_wait_noop}; |
425 | | |
426 | | struct PSI_file_bootstrap *psi_file_hook = nullptr; |
427 | | PSI_file_service_t *psi_file_service = &psi_file_noop; |
428 | | |
429 | 0 | void set_psi_file_service(void *psi) { |
430 | 0 | psi_file_service = (PSI_file_service_t *)psi; |
431 | 0 | } |
432 | | |
433 | | // =========================================================================== |
434 | | |
435 | 0 | static void register_socket_noop(const char *, PSI_socket_info *, int) {} |
436 | | |
437 | | static PSI_socket *init_socket_noop(PSI_socket_key, const my_socket *, |
438 | 0 | const struct sockaddr *, socklen_t) { |
439 | 0 | return nullptr; |
440 | 0 | } |
441 | | |
442 | 0 | static void destroy_socket_noop(PSI_socket *) {} |
443 | | |
444 | | static PSI_socket_locker *start_socket_wait_noop(PSI_socket_locker_state *, |
445 | | PSI_socket *, |
446 | | PSI_socket_operation, size_t, |
447 | 0 | const char *, uint) { |
448 | 0 | return nullptr; |
449 | 0 | } |
450 | | |
451 | 0 | static void end_socket_wait_noop(PSI_socket_locker *, size_t) {} |
452 | | |
453 | 0 | static void set_socket_state_noop(PSI_socket *, enum PSI_socket_state) {} |
454 | | |
455 | | static void set_socket_info_noop(PSI_socket *, const my_socket *, |
456 | 0 | const struct sockaddr *, socklen_t) {} |
457 | | |
458 | 0 | static void set_socket_thread_owner_noop(PSI_socket *) {} |
459 | | |
460 | | static PSI_socket_service_t psi_socket_noop = { |
461 | | register_socket_noop, init_socket_noop, |
462 | | destroy_socket_noop, start_socket_wait_noop, |
463 | | end_socket_wait_noop, set_socket_state_noop, |
464 | | set_socket_info_noop, set_socket_thread_owner_noop}; |
465 | | |
466 | | struct PSI_socket_bootstrap *psi_socket_hook = nullptr; |
467 | | PSI_socket_service_t *psi_socket_service = &psi_socket_noop; |
468 | | |
469 | 0 | void set_psi_socket_service(void *psi) { |
470 | 0 | psi_socket_service = (PSI_socket_service_t *)psi; |
471 | 0 | } |
472 | | |
473 | | // =========================================================================== |
474 | | |
475 | 0 | static PSI_table_share *get_table_share_noop(bool, struct TABLE_SHARE *) { |
476 | 0 | return nullptr; |
477 | 0 | } |
478 | | |
479 | 0 | static void release_table_share_noop(PSI_table_share *) {} |
480 | | |
481 | 0 | static void drop_table_share_noop(bool, const char *, int, const char *, int) {} |
482 | | |
483 | 0 | static PSI_table *open_table_noop(PSI_table_share *, const void *) { |
484 | 0 | return nullptr; |
485 | 0 | } |
486 | | |
487 | 0 | static void unbind_table_noop(PSI_table *) {} |
488 | | |
489 | | static PSI_table *rebind_table_noop(PSI_table_share *, const void *, |
490 | 0 | PSI_table *) { |
491 | 0 | return nullptr; |
492 | 0 | } |
493 | | |
494 | 0 | static void close_table_noop(struct TABLE_SHARE *, PSI_table *) {} |
495 | | |
496 | | static struct PSI_table_locker *start_table_io_wait_noop( |
497 | | struct PSI_table_locker_state *, struct PSI_table *, |
498 | 0 | enum PSI_table_io_operation, uint, const char *, uint) { |
499 | 0 | return nullptr; |
500 | 0 | } |
501 | | |
502 | 0 | static void end_table_io_wait_noop(PSI_table_locker *, ulonglong) {} |
503 | | |
504 | | static struct PSI_table_locker *start_table_lock_wait_noop( |
505 | | struct PSI_table_locker_state *, struct PSI_table *, |
506 | 0 | enum PSI_table_lock_operation, ulong, const char *, uint) { |
507 | 0 | return nullptr; |
508 | 0 | } |
509 | | |
510 | 0 | static void end_table_lock_wait_noop(PSI_table_locker *) {} |
511 | | |
512 | 0 | static void unlock_table_noop(PSI_table *) {} |
513 | | |
514 | | static PSI_table_service_t psi_table_noop = { |
515 | | get_table_share_noop, release_table_share_noop, |
516 | | drop_table_share_noop, open_table_noop, |
517 | | unbind_table_noop, rebind_table_noop, |
518 | | close_table_noop, start_table_io_wait_noop, |
519 | | end_table_io_wait_noop, start_table_lock_wait_noop, |
520 | | end_table_lock_wait_noop, unlock_table_noop}; |
521 | | |
522 | | struct PSI_table_bootstrap *psi_table_hook = nullptr; |
523 | | PSI_table_service_t *psi_table_service = &psi_table_noop; |
524 | | |
525 | 0 | void set_psi_table_service(void *psi) { |
526 | 0 | psi_table_service = (PSI_table_service_t *)psi; |
527 | 0 | } |
528 | | |
529 | | // =========================================================================== |
530 | | |
531 | | static PSI_metadata_lock *create_metadata_lock_noop(void *, const MDL_key *, |
532 | | opaque_mdl_type, |
533 | | opaque_mdl_duration, |
534 | | opaque_mdl_status, |
535 | 0 | const char *, uint) { |
536 | 0 | return nullptr; |
537 | 0 | } |
538 | | |
539 | | static void set_metadata_lock_status_noop(PSI_metadata_lock *, |
540 | 0 | opaque_mdl_status) {} |
541 | | |
542 | | static void set_metadata_lock_duration_noop(PSI_metadata_lock *, |
543 | 0 | opaque_mdl_duration) {} |
544 | | |
545 | 0 | static void set_metadata_lock_type_noop(PSI_metadata_lock *, opaque_mdl_type) {} |
546 | | |
547 | 0 | static void destroy_metadata_lock_noop(PSI_metadata_lock *) {} |
548 | | |
549 | | static PSI_metadata_locker *start_metadata_wait_noop( |
550 | 0 | PSI_metadata_locker_state *, PSI_metadata_lock *, const char *, uint) { |
551 | 0 | return nullptr; |
552 | 0 | } |
553 | | |
554 | 0 | static void end_metadata_wait_noop(PSI_metadata_locker *, int) {} |
555 | | |
556 | | static PSI_mdl_service_t psi_mdl_noop = { |
557 | | create_metadata_lock_noop, set_metadata_lock_status_noop, |
558 | | set_metadata_lock_duration_noop, set_metadata_lock_type_noop, |
559 | | destroy_metadata_lock_noop, start_metadata_wait_noop, |
560 | | end_metadata_wait_noop}; |
561 | | |
562 | | struct PSI_mdl_bootstrap *psi_mdl_hook = nullptr; |
563 | | PSI_mdl_service_t *psi_mdl_service = &psi_mdl_noop; |
564 | | |
565 | 0 | void set_psi_mdl_service(void *psi) { |
566 | 0 | psi_mdl_service = (PSI_mdl_service_t *)psi; |
567 | 0 | } |
568 | | |
569 | | // =========================================================================== |
570 | | |
571 | | static PSI_idle_locker *start_idle_wait_noop(PSI_idle_locker_state *, |
572 | 0 | const char *, uint) { |
573 | 0 | return nullptr; |
574 | 0 | } |
575 | | |
576 | 0 | static void end_idle_wait_noop(PSI_idle_locker *) {} |
577 | | |
578 | | static PSI_idle_service_t psi_idle_noop = {start_idle_wait_noop, |
579 | | end_idle_wait_noop}; |
580 | | |
581 | | struct PSI_idle_bootstrap *psi_idle_hook = nullptr; |
582 | | PSI_idle_service_t *psi_idle_service = &psi_idle_noop; |
583 | | |
584 | 0 | void set_psi_idle_service(void *psi) { |
585 | 0 | psi_idle_service = (PSI_idle_service_t *)psi; |
586 | 0 | } |
587 | | |
588 | | // =========================================================================== |
589 | | |
590 | 0 | static void register_stage_noop(const char *, PSI_stage_info **, int) {} |
591 | | |
592 | 0 | static PSI_stage_progress *start_stage_noop(PSI_stage_key, const char *, int) { |
593 | 0 | return nullptr; |
594 | 0 | } |
595 | | |
596 | 0 | static PSI_stage_progress *get_current_stage_progress_noop() { return nullptr; } |
597 | | |
598 | 0 | static void end_stage_noop() {} |
599 | | |
600 | | static PSI_stage_service_t psi_stage_noop = { |
601 | | register_stage_noop, start_stage_noop, get_current_stage_progress_noop, |
602 | | end_stage_noop}; |
603 | | |
604 | | struct PSI_stage_bootstrap *psi_stage_hook = nullptr; |
605 | | PSI_stage_service_t *psi_stage_service = &psi_stage_noop; |
606 | | |
607 | 0 | void set_psi_stage_service(void *psi) { |
608 | 0 | psi_stage_service = (PSI_stage_service_t *)psi; |
609 | 0 | } |
610 | | |
611 | | // =========================================================================== |
612 | | |
613 | 0 | static void register_statement_noop(const char *, PSI_statement_info *, int) {} |
614 | | |
615 | | static PSI_statement_locker *get_thread_statement_locker_noop( |
616 | | PSI_statement_locker_state *, PSI_statement_key, const void *, |
617 | 0 | PSI_sp_share *) { |
618 | 0 | return nullptr; |
619 | 0 | } |
620 | | |
621 | | static PSI_statement_locker *refine_statement_noop(PSI_statement_locker *, |
622 | 0 | PSI_statement_key) { |
623 | 0 | return nullptr; |
624 | 0 | } |
625 | | |
626 | | static void start_statement_noop(PSI_statement_locker *, const char *, uint, |
627 | 0 | const char *, uint) {} |
628 | | |
629 | | static void set_statement_text_noop(PSI_statement_locker *, const char *, |
630 | 0 | uint) {} |
631 | | |
632 | 0 | static void set_statement_query_id_noop(PSI_statement_locker *, ulonglong) {} |
633 | | |
634 | 0 | static void set_statement_lock_time_noop(PSI_statement_locker *, ulonglong) {} |
635 | | |
636 | 0 | static void set_statement_rows_sent_noop(PSI_statement_locker *, ulonglong) {} |
637 | | |
638 | | static void set_statement_rows_examined_noop(PSI_statement_locker *, |
639 | 0 | ulonglong) {} |
640 | | |
641 | | static void inc_statement_created_tmp_disk_tables_noop(PSI_statement_locker *, |
642 | 0 | ulong) {} |
643 | | |
644 | | static void inc_statement_created_tmp_tables_noop(PSI_statement_locker *, |
645 | 0 | ulong) {} |
646 | | |
647 | 0 | static void inc_statement_select_full_join_noop(PSI_statement_locker *, ulong) { |
648 | 0 | } |
649 | | |
650 | | static void inc_statement_select_full_range_join_noop(PSI_statement_locker *, |
651 | 0 | ulong) {} |
652 | | |
653 | 0 | static void inc_statement_select_range_noop(PSI_statement_locker *, ulong) {} |
654 | | |
655 | | static void inc_statement_select_range_check_noop(PSI_statement_locker *, |
656 | 0 | ulong) {} |
657 | | |
658 | 0 | static void inc_statement_select_scan_noop(PSI_statement_locker *, ulong) {} |
659 | | |
660 | | static void inc_statement_sort_merge_passes_noop(PSI_statement_locker *, |
661 | 0 | ulong) {} |
662 | | |
663 | 0 | static void inc_statement_sort_range_noop(PSI_statement_locker *, ulong) {} |
664 | | |
665 | 0 | static void inc_statement_sort_rows_noop(PSI_statement_locker *, ulong) {} |
666 | | |
667 | 0 | static void inc_statement_sort_scan_noop(PSI_statement_locker *, ulong) {} |
668 | | |
669 | 0 | static void set_statement_no_index_used_noop(PSI_statement_locker *) {} |
670 | | |
671 | 0 | static void set_statement_no_good_index_used_noop(PSI_statement_locker *) {} |
672 | | |
673 | 0 | static void set_statement_secondary_engine_noop(PSI_statement_locker *, bool) {} |
674 | | |
675 | 0 | static void end_statement_noop(PSI_statement_locker *, void *) {} |
676 | | |
677 | | static PSI_prepared_stmt *create_prepared_stmt_noop(void *, uint, |
678 | | PSI_statement_locker *, |
679 | | const char *, size_t, |
680 | 0 | const char *, size_t) { |
681 | 0 | return nullptr; |
682 | 0 | } |
683 | | |
684 | 0 | static void destroy_prepared_stmt_noop(PSI_prepared_stmt *) {} |
685 | | |
686 | 0 | static void reprepare_prepared_stmt_noop(PSI_prepared_stmt *) {} |
687 | | |
688 | | static void execute_prepared_stmt_noop(PSI_statement_locker *, |
689 | 0 | PSI_prepared_stmt *) {} |
690 | | |
691 | | static void set_prepared_stmt_text_noop(PSI_prepared_stmt *, const char *, |
692 | 0 | uint) {} |
693 | | |
694 | 0 | static void set_prepared_stmt_secondary_engine_noop(PSI_prepared_stmt *, bool) { |
695 | 0 | } |
696 | | |
697 | 0 | static struct PSI_digest_locker *digest_start_noop(PSI_statement_locker *) { |
698 | 0 | return nullptr; |
699 | 0 | } |
700 | | |
701 | | static void digest_end_noop(PSI_digest_locker *, |
702 | 0 | const struct sql_digest_storage *) {} |
703 | | |
704 | | static PSI_sp_share *get_sp_share_noop(uint, const char *, uint, const char *, |
705 | 0 | uint) { |
706 | 0 | return nullptr; |
707 | 0 | } |
708 | | |
709 | 0 | static void release_sp_share_noop(PSI_sp_share *) {} |
710 | | |
711 | 0 | static PSI_sp_locker *start_sp_noop(PSI_sp_locker_state *, PSI_sp_share *) { |
712 | 0 | return nullptr; |
713 | 0 | } |
714 | | |
715 | 0 | static void end_sp_noop(PSI_sp_locker *) {} |
716 | | |
717 | 0 | static void drop_sp_noop(uint, const char *, uint, const char *, uint) {} |
718 | | |
719 | | static void notify_statement_query_attributes_noop(PSI_statement_locker *, |
720 | 0 | bool) {} |
721 | | |
722 | 0 | static void abort_statement_telemetry_noop(PSI_statement_locker * /*unused*/) {} |
723 | | |
724 | | static PSI_statement_service_t psi_statement_noop = { |
725 | | register_statement_noop, |
726 | | get_thread_statement_locker_noop, |
727 | | refine_statement_noop, |
728 | | start_statement_noop, |
729 | | set_statement_text_noop, |
730 | | set_statement_query_id_noop, |
731 | | set_statement_lock_time_noop, |
732 | | set_statement_rows_sent_noop, |
733 | | set_statement_rows_examined_noop, |
734 | | inc_statement_created_tmp_disk_tables_noop, |
735 | | inc_statement_created_tmp_tables_noop, |
736 | | inc_statement_select_full_join_noop, |
737 | | inc_statement_select_full_range_join_noop, |
738 | | inc_statement_select_range_noop, |
739 | | inc_statement_select_range_check_noop, |
740 | | inc_statement_select_scan_noop, |
741 | | inc_statement_sort_merge_passes_noop, |
742 | | inc_statement_sort_range_noop, |
743 | | inc_statement_sort_rows_noop, |
744 | | inc_statement_sort_scan_noop, |
745 | | set_statement_no_index_used_noop, |
746 | | set_statement_no_good_index_used_noop, |
747 | | set_statement_secondary_engine_noop, |
748 | | end_statement_noop, |
749 | | create_prepared_stmt_noop, |
750 | | destroy_prepared_stmt_noop, |
751 | | reprepare_prepared_stmt_noop, |
752 | | execute_prepared_stmt_noop, |
753 | | set_prepared_stmt_text_noop, |
754 | | set_prepared_stmt_secondary_engine_noop, |
755 | | digest_start_noop, |
756 | | digest_end_noop, |
757 | | get_sp_share_noop, |
758 | | release_sp_share_noop, |
759 | | start_sp_noop, |
760 | | end_sp_noop, |
761 | | drop_sp_noop, |
762 | | notify_statement_query_attributes_noop, |
763 | | abort_statement_telemetry_noop}; |
764 | | |
765 | | struct PSI_statement_bootstrap *psi_statement_hook = nullptr; |
766 | | PSI_statement_service_t *psi_statement_service = &psi_statement_noop; |
767 | | |
768 | 0 | void set_psi_statement_service(void *psi) { |
769 | 0 | psi_statement_service = (PSI_statement_service_t *)psi; |
770 | 0 | } |
771 | | |
772 | | // =========================================================================== |
773 | | |
774 | | static PSI_transaction_locker *get_thread_transaction_locker_noop( |
775 | | PSI_transaction_locker_state *, const void *, const ulonglong *, int, bool, |
776 | 0 | bool) { |
777 | 0 | return nullptr; |
778 | 0 | } |
779 | | |
780 | | static void start_transaction_noop(PSI_transaction_locker *, const char *, |
781 | 0 | uint) {} |
782 | | |
783 | | static void set_transaction_xid_noop(PSI_transaction_locker *, const void *, |
784 | 0 | int) {} |
785 | | |
786 | 0 | static void set_transaction_xa_state_noop(PSI_transaction_locker *, int) {} |
787 | | |
788 | | static void set_transaction_gtid_noop(PSI_transaction_locker *, const void *, |
789 | 0 | const void *) {} |
790 | | |
791 | | static void set_transaction_trxid_noop(PSI_transaction_locker *, |
792 | 0 | const ulonglong *) {} |
793 | | |
794 | 0 | static void inc_transaction_savepoints_noop(PSI_transaction_locker *, ulong) {} |
795 | | |
796 | | static void inc_transaction_rollback_to_savepoint_noop(PSI_transaction_locker *, |
797 | 0 | ulong) {} |
798 | | |
799 | | static void inc_transaction_release_savepoint_noop(PSI_transaction_locker *, |
800 | 0 | ulong) {} |
801 | | |
802 | 0 | static void end_transaction_noop(PSI_transaction_locker *, bool) {} |
803 | | |
804 | | static PSI_transaction_service_t psi_transaction_noop = { |
805 | | get_thread_transaction_locker_noop, |
806 | | start_transaction_noop, |
807 | | set_transaction_xid_noop, |
808 | | set_transaction_xa_state_noop, |
809 | | set_transaction_gtid_noop, |
810 | | set_transaction_trxid_noop, |
811 | | inc_transaction_savepoints_noop, |
812 | | inc_transaction_rollback_to_savepoint_noop, |
813 | | inc_transaction_release_savepoint_noop, |
814 | | end_transaction_noop}; |
815 | | |
816 | | struct PSI_transaction_bootstrap *psi_transaction_hook = nullptr; |
817 | | PSI_transaction_service_t *psi_transaction_service = &psi_transaction_noop; |
818 | | |
819 | 0 | void set_psi_transaction_service(void *psi) { |
820 | 0 | psi_transaction_service = (PSI_transaction_service_t *)psi; |
821 | 0 | } |
822 | | |
823 | | // =========================================================================== |
824 | | |
825 | 0 | static void log_error_noop(unsigned int, PSI_error_operation) {} |
826 | | |
827 | | static PSI_error_service_t psi_error_noop = {log_error_noop}; |
828 | | |
829 | | struct PSI_error_bootstrap *psi_error_hook = nullptr; |
830 | | PSI_error_service_t *psi_error_service = &psi_error_noop; |
831 | | |
832 | 0 | void set_psi_error_service(void *psi) { |
833 | 0 | psi_error_service = (PSI_error_service_t *)psi; |
834 | 0 | } |
835 | | |
836 | | // =========================================================================== |
837 | | |
838 | 0 | static void register_memory_noop(const char *, PSI_memory_info *, int) {} |
839 | | |
840 | | static PSI_memory_key memory_alloc_noop(PSI_memory_key, size_t, |
841 | 75.6k | struct PSI_thread **owner) { |
842 | 75.6k | *owner = nullptr; |
843 | 75.6k | return PSI_NOT_INSTRUMENTED; |
844 | 75.6k | } |
845 | | |
846 | | static PSI_memory_key memory_realloc_noop(PSI_memory_key, size_t, size_t, |
847 | 0 | struct PSI_thread **owner) { |
848 | 0 | *owner = nullptr; |
849 | 0 | return PSI_NOT_INSTRUMENTED; |
850 | 0 | } |
851 | | |
852 | | static PSI_memory_key memory_claim_noop(PSI_memory_key, size_t, |
853 | 0 | struct PSI_thread **owner, bool) { |
854 | 0 | *owner = nullptr; |
855 | 0 | return PSI_NOT_INSTRUMENTED; |
856 | 0 | } |
857 | | |
858 | 75.6k | static void memory_free_noop(PSI_memory_key, size_t, struct PSI_thread *) {} |
859 | | |
860 | | static PSI_memory_service_t psi_memory_noop = { |
861 | | register_memory_noop, memory_alloc_noop, memory_realloc_noop, |
862 | | memory_claim_noop, memory_free_noop}; |
863 | | |
864 | | struct PSI_memory_bootstrap *psi_memory_hook = nullptr; |
865 | | PSI_memory_service_t *psi_memory_service = &psi_memory_noop; |
866 | | |
867 | 0 | void set_psi_memory_service(void *psi) { |
868 | 0 | psi_memory_service = (PSI_memory_service_t *)psi; |
869 | 0 | } |
870 | | |
871 | | // =========================================================================== |
872 | | |
873 | 0 | static void register_data_lock_noop(PSI_engine_data_lock_inspector *) {} |
874 | | |
875 | 0 | static void unregister_data_lock_noop(PSI_engine_data_lock_inspector *) {} |
876 | | |
877 | | static PSI_data_lock_service_t psi_data_lock_noop = {register_data_lock_noop, |
878 | | unregister_data_lock_noop}; |
879 | | |
880 | | struct PSI_data_lock_bootstrap *psi_data_lock_hook = nullptr; |
881 | | PSI_data_lock_service_t *psi_data_lock_service = &psi_data_lock_noop; |
882 | | |
883 | 0 | void set_psi_data_lock_service(void *psi) { |
884 | 0 | psi_data_lock_service = (PSI_data_lock_service_t *)psi; |
885 | 0 | } |
886 | | |
887 | | // =========================================================================== |
888 | | |
889 | 0 | static void unload_plugin_noop(const char *) {} |
890 | | |
891 | | static PSI_system_service_t psi_system_noop = {unload_plugin_noop}; |
892 | | |
893 | | struct PSI_system_bootstrap *psi_system_hook = nullptr; |
894 | | PSI_system_service_t *psi_system_service = &psi_system_noop; |
895 | | |
896 | 0 | void set_psi_system_service(void *psi) { |
897 | 0 | psi_system_service = (PSI_system_service_t *)psi; |
898 | 0 | } |
899 | | |
900 | | // =========================================================================== |
901 | | |
902 | 0 | static void register_tls_channel_noop(TLS_channel_property_iterator *) {} |
903 | | |
904 | 0 | static void unregister_tls_channel_noop(TLS_channel_property_iterator *) {} |
905 | | static PSI_tls_channel_service_t psi_tls_channel_noop = { |
906 | | register_tls_channel_noop, unregister_tls_channel_noop}; |
907 | | |
908 | | struct PSI_tls_channel_bootstrap *psi_tls_channel_hook = nullptr; |
909 | | PSI_tls_channel_service_t *psi_tls_channel_service = &psi_tls_channel_noop; |
910 | | |
911 | 0 | void set_psi_tls_channel_service(void *psi) { |
912 | 0 | psi_tls_channel_service = (PSI_tls_channel_service_t *)psi; |
913 | 0 | } |
914 | | |
915 | | // =========================================================================== |
916 | | |
917 | 0 | static void register_meters_noop(PSI_meter_info_v1 *, size_t) {} |
918 | | |
919 | 0 | static void unregister_meters_noop(PSI_meter_info_v1 *, size_t) {} |
920 | | |
921 | 0 | static void register_change_notification_noop(meter_registration_changes_v1_t) { |
922 | 0 | } |
923 | | |
924 | | static void unregister_change_notification_noop( |
925 | 0 | meter_registration_changes_v1_t) {} |
926 | | |
927 | 0 | static void send_change_notification_noop(const char *, MeterNotifyType) {} |
928 | | |
929 | | static PSI_metric_service_t psi_metric_noop = { |
930 | | register_meters_noop, unregister_meters_noop, |
931 | | register_change_notification_noop, unregister_change_notification_noop, |
932 | | send_change_notification_noop}; |
933 | | |
934 | | struct PSI_metric_bootstrap *psi_metric_hook = nullptr; |
935 | | PSI_metric_service_t *psi_metric_service = &psi_metric_noop; |
936 | | |
937 | 0 | void set_psi_metric_service(void *psi) { |
938 | 0 | psi_metric_service = (PSI_metric_service_t *)psi; |
939 | 0 | } |
940 | | |
941 | | // =========================================================================== |
942 | | |
943 | | static void register_logger_client_noop(PSI_logger_info_v1 *, size_t, |
944 | 0 | const char *) {} |
945 | | |
946 | 0 | static void unregister_logger_client_noop(PSI_logger_info_v1 *, size_t) {} |
947 | | |
948 | 0 | static PSI_logger *check_enabled_noop(PSI_logger_key, OTELLogLevel) { |
949 | 0 | return nullptr; |
950 | 0 | } |
951 | | |
952 | | static void log_emit_noop(PSI_logger *, OTELLogLevel, const char *, time_t, |
953 | 0 | const log_attribute_t *, size_t) {} |
954 | | |
955 | | static PSI_logs_client_service_t psi_logs_client_noop = { |
956 | | register_logger_client_noop, unregister_logger_client_noop, |
957 | | check_enabled_noop, log_emit_noop}; |
958 | | |
959 | | struct PSI_logs_client_bootstrap *psi_logs_client_hook = nullptr; |
960 | | PSI_logs_client_service_t *psi_logs_client_service = &psi_logs_client_noop; |
961 | | |
962 | 0 | void set_psi_logs_client_service(void *psi) { |
963 | 0 | psi_logs_client_service = (PSI_logs_client_service_t *)psi; |
964 | 0 | } |
965 | | |
966 | | // =========================================================================== |