MySQL 8.3.0
Source Code Documentation
rpl_info.h
Go to the documentation of this file.
1/* Copyright (c) 2010, 2023, 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 also distributed 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 included with MySQL.
13
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License, version 2.0, for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with this program; if not, write to the Free Software
21 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
22
23#ifndef RPL_INFO_H
24#define RPL_INFO_H
25
26#include <sys/types.h>
27#include <atomic>
28
29#include "my_inttypes.h"
30#include "my_psi_config.h"
34#include "mysql_com.h" // NAME_LEN
35#include "sql/rpl_info_handler.h" // Rpl_info_handler
36#include "sql/rpl_reporting.h" // Slave_reporting_capability
37
38class THD;
39
40#define CHANNEL_NAME_LENGTH NAME_LEN
41
43 public:
44 ~Rpl_info() override;
45
46 /*
47 standard lock acquisition order to avoid deadlocks:
48 run_lock, data_lock, relay_log.LOCK_log, relay_log.LOCK_index
49 run_lock, sleep_lock
50 run_lock, info_thd_lock
51
52 info_thd_lock is to protect operations on info_thd:
53 - before *reading* info_thd we must hold *either* info_thd_lock or
54 run_lock;
55 - before *writing* we must hold *both* run_lock and info_thd_lock.
56 */
58 /*
59 start_cond is broadcast when SQL thread is started
60 stop_cond - when stopped
61 data_cond - when data protected by data_lock changes
62 sleep_cond - when killed
63
64 'data_cond' is only being used in class Relay_log_info and not in the
65 class Master_info. So 'data_cond' could be moved to Relay_log_info.
66 */
68
69#ifdef HAVE_PSI_INTERFACE
72
75#endif
76
78
79 bool inited;
80 std::atomic<bool> abort_slave;
81 std::atomic<uint> slave_running;
82 std::atomic<ulong> slave_run_id;
83
84 /**
85 Sets the persistency component/handler.
86
87 @param[in] param_handler Pointer to the handler.
88 */
90 handler = param_handler;
91 }
92
93 /**
94 Gets the persistency component/handler.
95
96 @return the handler if there is one.
97 */
99
100 enum_return_check check_info() const { return (handler->check_info()); }
101
102 int remove_info() { return (handler->remove_info()); }
103
104 int clean_info() { return (handler->clean_info()); }
105
106 bool is_transactional() const { return (handler->is_transactional()); }
107
109 return (handler->update_is_transactional());
110 }
111
112 char *get_description_info() const {
113 return (handler->get_description_info());
114 }
115
117 if (read_info(from) || write_info(to)) return (true);
118
119 return (false);
120 }
121
122 uint get_internal_id() const { return internal_id; }
123
124 char *get_channel() const { return const_cast<char *>(channel); }
125
126 /**
127 To search in the slave repositories, each slave info object
128 (mi, rli or worker) should use a primary key. This function
129 sets the field values of the slave info objects with
130 the search information, which is nothing but PK in mysql slave
131 info tables.
132 Ex: field_value[23]="channel_name" in the master info
133 object.
134
135 Currently, used only for TABLE repository.
136 */
137
139
140 protected:
141 /**
142 Pointer to the repository's handler.
143 */
145
146 /**
147 Uniquely and internally identifies an info entry (.e.g. a row or
148 file). This information is completely transparent to users and
149 is used only during startup to retrieve information from the
150 repositories.
151
152 @todo, This is not required any longer for Master_info and
153 Relay_log_info, since Channel can be used to uniquely
154 identify this. To preserve backward compatibility,
155 we keep this for Master_info and Relay_log_info.
156 However, {id, channel} is still required for a worker info.
157 */
159
160 /**
161 Every slave info object acts on a particular channel in Multisource
162 Replication.
163 */
165
166 Rpl_info(const char *type,
168 PSI_mutex_key *param_key_info_run_lock,
169 PSI_mutex_key *param_key_info_data_lock,
170 PSI_mutex_key *param_key_info_sleep_lock,
171 PSI_mutex_key *param_key_info_thd_lock,
172 PSI_mutex_key *param_key_info_data_cond,
173 PSI_mutex_key *param_key_info_start_cond,
174 PSI_mutex_key *param_key_info_stop_cond,
175 PSI_mutex_key *param_key_info_sleep_cond,
176#endif
177 uint param_id, const char *param_channel);
178
179 private:
180 virtual bool read_info(Rpl_info_handler *from) = 0;
181 virtual bool write_info(Rpl_info_handler *to) = 0;
182
185
186 public:
187 /* True when the thread is still running, but started the stop procedure */
188 std::atomic<bool> atomic_is_stopping{false};
189};
190#endif /* RPL_INFO_H */
Definition: rpl_info_handler.h:57
Definition: rpl_info.h:42
PSI_mutex_key * key_info_sleep_cond
Definition: rpl_info.h:74
virtual bool set_info_search_keys(Rpl_info_handler *to)=0
To search in the slave repositories, each slave info object (mi, rli or worker) should use a primary ...
char * get_description_info() const
Definition: rpl_info.h:112
Rpl_info_handler * handler
Pointer to the repository's handler.
Definition: rpl_info.h:144
Rpl_info(const char *type, PSI_mutex_key *param_key_info_run_lock, PSI_mutex_key *param_key_info_data_lock, PSI_mutex_key *param_key_info_sleep_lock, PSI_mutex_key *param_key_info_thd_lock, PSI_mutex_key *param_key_info_data_cond, PSI_mutex_key *param_key_info_start_cond, PSI_mutex_key *param_key_info_stop_cond, PSI_mutex_key *param_key_info_sleep_cond, uint param_id, const char *param_channel)
Definition: rpl_info.cc:30
~Rpl_info() override
Definition: rpl_info.cc:87
Rpl_info & operator=(const Rpl_info &info)
std::atomic< bool > abort_slave
Definition: rpl_info.h:80
void set_rpl_info_handler(Rpl_info_handler *param_handler)
Sets the persistency component/handler.
Definition: rpl_info.h:89
PSI_mutex_key * key_info_sleep_lock
Definition: rpl_info.h:70
uint internal_id
Uniquely and internally identifies an info entry (.e.g.
Definition: rpl_info.h:158
virtual bool read_info(Rpl_info_handler *from)=0
bool inited
Definition: rpl_info.h:79
mysql_cond_t sleep_cond
Definition: rpl_info.h:67
mysql_mutex_t info_thd_lock
Definition: rpl_info.h:57
char * get_channel() const
Definition: rpl_info.h:124
bool copy_info(Rpl_info_handler *from, Rpl_info_handler *to)
Definition: rpl_info.h:116
mysql_cond_t start_cond
Definition: rpl_info.h:67
std::atomic< bool > atomic_is_stopping
Definition: rpl_info.h:188
int remove_info()
Definition: rpl_info.h:102
PSI_mutex_key * key_info_run_lock
Definition: rpl_info.h:70
std::atomic< ulong > slave_run_id
Definition: rpl_info.h:82
Rpl_info(const Rpl_info &info)
PSI_mutex_key * key_info_stop_cond
Definition: rpl_info.h:73
Rpl_info_handler * get_rpl_info_handler()
Gets the persistency component/handler.
Definition: rpl_info.h:98
mysql_mutex_t sleep_lock
Definition: rpl_info.h:57
bool update_is_transactional()
Definition: rpl_info.h:108
mysql_cond_t data_cond
Definition: rpl_info.h:67
PSI_mutex_key * key_info_start_cond
Definition: rpl_info.h:73
mysql_mutex_t run_lock
Definition: rpl_info.h:57
uint get_internal_id() const
Definition: rpl_info.h:122
mysql_mutex_t data_lock
Definition: rpl_info.h:57
bool is_transactional() const
Definition: rpl_info.h:106
mysql_cond_t stop_cond
Definition: rpl_info.h:67
PSI_mutex_key * key_info_data_lock
Definition: rpl_info.h:70
PSI_mutex_key * key_info_thd_lock
Definition: rpl_info.h:71
char channel[CHANNEL_NAME_LENGTH+1]
Every slave info object acts on a particular channel in Multisource Replication.
Definition: rpl_info.h:164
PSI_mutex_key * key_info_data_cond
Definition: rpl_info.h:73
std::atomic< uint > slave_running
Definition: rpl_info.h:81
THD * info_thd
Definition: rpl_info.h:77
int clean_info()
Definition: rpl_info.h:104
enum_return_check check_info() const
Definition: rpl_info.h:100
virtual bool write_info(Rpl_info_handler *to)=0
Mix-in to handle the message logging and reporting for relay log info and master log info structures.
Definition: rpl_reporting.h:53
For each client connection we create a separate thread with THD serving as a thread/connection descri...
Definition: sql_lexer_thd.h:35
The handler class is the interface for dynamically loadable storage engines.
Definition: handler.h:4548
unsigned int PSI_mutex_key
Instrumented mutex key.
Definition: psi_mutex_bits.h:51
Some integer typedefs for easier portability.
Defines various enable/disable and HAVE_ macros related to the performance schema instrumentation sys...
#define HAVE_PSI_INTERFACE
Definition: my_psi_config.h:38
Common definition between mysql server & client.
Instrumentation helpers for conditions.
ABI for instrumented mutexes.
Instrumentation helpers for mutexes.
required string type
Definition: replication_group_member_actions.proto:33
#define CHANNEL_NAME_LENGTH
Definition: rpl_info.h:40
enum_return_check
Definition: rpl_info_handler.h:50
Definition: task.h:426
An instrumented cond structure.
Definition: mysql_cond_bits.h:49
An instrumented mutex structure.
Definition: mysql_mutex_bits.h:49