MySQL 8.4.0
Source Code Documentation
rpl_filter.h
Go to the documentation of this file.
1/* Copyright (c) 2000, 2024, 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 This program is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License, version 2.0, for more details.
19
20 You should have received a copy of the GNU General Public License
21 along with this program; if not, write to the Free Software
22 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
23
24#ifndef RPL_FILTER_H
25#define RPL_FILTER_H
26
27#include "my_config.h"
28
29#include <stddef.h>
30#include <sys/types.h>
31#include <atomic>
32#include <memory>
33#include <string>
34#include <vector>
35
36#include "map_helpers.h"
37#include "my_inttypes.h"
38#include "my_sqlcommand.h"
39#include "prealloced_array.h" // Prealloced_arrray
40#include "sql/options_mysqld.h" // options_mysqld
41#include "sql/rpl_gtid.h"
42#include "sql/sql_cmd.h" // Sql_cmd
43#include "sql/sql_list.h" // I_List
44#include "sql_string.h"
45
46class Item;
47class THD;
48class Table_ref;
49template <class T>
50class mem_root_deque;
51
52/*
53There are five classes related to replication filters:
54- Rpl_filter contains all the seven filters do-db, ignore-db, do-table,
55 ignore-table, wild-do-table, wild-ignore-table, rewrite-db. We
56 instantiate one Rpl_filter for each replication channel and one for
57 the binlog. This contains member functions to apply the filters.
58- Rpl_pfs_filter has one instance for each row in
59 P_S.replication_applier_filters and one instance for each row of
60 P_S.replication_applier_global_filters.
61- Rpl_filter_statistics contains the data other than the key for each
62 P_S row. Each Rpl_filter object owns seven instances of this class
63 (one for each filter type) and each Rpl_pfs_filter points to one of
64 those instances.
65- Rpl_channel_filters contains a map that maps channel names to
66 Rpl_filter objects, as well as a vector that references all
67 the Rpl_pfs_filter objects used to represent
68 P_S.replication_applier_filters.
69- Rpl_global_filter is a Rpl_filter representing global replication
70 filters, with a vector that references all Rpl_pfs_filter objects
71 used to represent P_S.replication_applier_global_filters table.
72
73The vectors of Rpl_pfs_filters objects are rebuilt whenever filters
74are modified (i.e., channels created/dropped or filters changed).
75*/
76
78 char *db;
79 char *tbl_name;
80 uint key_len;
81};
82
83/** Enum values for CONFIGURED_BY column. */
89};
90
91/**
92 The class Rpl_filter_statistics encapsulates the following three
93 statistics of replication filter:
94 The configured_by indicates that how the rpl filter is configured.
95 The active_since indicates when the configuration took place.
96 The counter indicates the hit amount of the filter since last
97 configuration.
98 Instances of this class are created in Rpl_filter for each filter
99 type for each channel and the global filter, and have the same
100 life cycle as the instance of Rpl_filter.
101 The reference of this class is used in Rpl_pfs_filter for
102 displaying the three statistics of replication filter in
103 performance_schema.replication_applier_filters table and
104 performance_schema.replication_applier_global_filters table.
105*/
107 public:
110 void reset();
111 /*
112 Set all member variables. The caller just needs to pass argument
113 for configured_by, since counter and active_since are set in the
114 function. We do that, since counter must be set to 0 and
115 active_since must be set to current time for any case.
116 */
117 void set_all(enum_configured_by configured_by);
118
123
124 private:
125 /*
126 The replication filters can be configured with the following four states:
127 STARTUP_OPTIONS, //STARTUP_OPTIONS: --REPLICATE-*
128 CHANGE_REPLICATION_FILTER, //CHANGE REPLICATION FILTER filter [, filter...]
129 STARTUP_OPTIONS_FOR_CHANNEL, //STARTUP_OPTIONS: --REPLICATE-* (FOR_CHANNEL)
130 CHANGE_REPLICATION_FILTER_FOR_CHANNEL //CHANGE REPLICATION FILTER filter [,
131 filter...] FOR CHANNEL <channel_name>
132 */
134
135 /* Timestamp of when the configuration took place */
137
138 /*
139 The hit amount of the filter since last configuration.
140 The m_atomic_counter may be increased by concurrent slave
141 workers, so we use the atomic<uint64>.
142 */
143 std::atomic<uint64> m_atomic_counter{0};
144
145 /* Prevent user from invoking default constructor function. */
147
148 /* Prevent user from invoking default assignment function. */
150};
151
152/**
153 The class Rpl_pfs_filter is introduced to serve the
154 performance_schema.replication_applier_filters table
155 and performance_schema.replication_applier_global_filters
156 table to collect data for a row. The class Rpl_filter
157 does not use it directly, since it contains channel_name,
158 which does not belong to Rpl_filter. To decouple code,
159 it depends on Rpl_filter_statistics, does not inherit
160 Rpl_filter_statistics.
161 Instances of this class are created in Rpl_filter for
162 each filter type for each channel and the global filter.
163 Each instance is created when creating, changing or
164 deleting the filter, destroyed when creating, changing
165 or deleting the filter next time.
166*/
168 public:
170 Rpl_pfs_filter(const char *channel_name, const char *filter_name,
171 const String &filter_rule,
172 Rpl_filter_statistics *rpl_filter_statistics);
173 Rpl_pfs_filter(const Rpl_pfs_filter &other);
175
176 const char *get_channel_name() { return m_channel_name; }
177 const char *get_filter_name() { return m_filter_name; }
181 }
182
183 private:
184 /* A pointer to the channel name. */
185 const char *m_channel_name;
186
187 /* A pointer to the filer name. */
188 const char *m_filter_name;
189
190 /* A pointer to replication filter statistics. */
192
193 /* A filter rule. */
195
196 /* Prevent user from invoking default assignment function. */
198};
199
200/**
201 Rpl_filter
202
203 Inclusion and exclusion rules of tables and databases.
204 Also handles rewrites of db.
205 Used for replication and binlogging.
206 - Instances of this class are created in Rpl_channel_filters
207 for replication filter for each channel. Each instance is
208 created when the channel is configured, destroyed when the
209 channel is removed.
210 - There is one instance, binlog_filter, created for binlog filter.
211 The instance is created when the server is started, destroyed
212 when the server is stopped.
213 */
215 public:
216 Rpl_filter();
217 virtual ~Rpl_filter();
220
221 /* Checks - returns true if ok to replicate/log */
222
223 bool tables_ok(const char *db, Table_ref *tables);
224 bool db_ok(const char *db, bool need_increase_counter = true);
225 bool db_ok_with_wild_table(const char *db);
226
227 bool is_on();
228 /**
229 Check if the replication filter is empty or not.
230
231 @retval true if the replication filter is empty.
232 @retval false if the replication filter is not empty.
233 */
234 bool is_empty();
235 /**
236 Copy global replication filters to its per-channel replication filters
237 if there are no per-channel replication filters and there are global
238 filters on the filter type on channel creation.
239
240 @retval 0 OK
241 @retval 1 Error
242 */
244
245 bool is_rewrite_empty();
246
247 /* Setters - add filtering rules */
250
251 int add_string_list(I_List<i_string> *list, const char *spec);
253 const char *val);
254 int add_do_table_array(const char *table_spec);
255 int add_ignore_table_array(const char *table_spec);
256
257 int add_wild_do_table(const char *table_spec);
258 int add_wild_ignore_table(const char *table_spec);
259
262 enum_configured_by configured_by);
264 enum_configured_by configured_by);
266 enum_configured_by configured_by);
268 enum_configured_by configured_by);
270 enum_configured_by configured_by);
272 enum_configured_by configured_by);
273 typedef int (Rpl_filter::*Add_filter)(char const *);
275 /**
276 Execute the specified func with elements of the list as input.
277
278 @param list A list with I_List<i_string> type
279 @param add A function with Add_filter type
280
281 @retval 0 OK
282 @retval 1 Error
283 */
285 int add_do_db(const char *db_spec);
286 int add_ignore_db(const char *db_spec);
287
288 int add_db_rewrite(const char *from_db, const char *to_db);
289
290 /* Getters - to get information about current rules */
291
292 void get_do_table(String *str);
294
297
298 const char *get_rewrite_db(const char *db, size_t *new_len);
300
302 /*
303 Get do_db rule.
304
305 @param[out] str the db_db rule.
306 */
307 void get_do_db(String *str);
308
310 /*
311 Get ignore_db rule.
312
313 @param[out] str the ignore_db rule.
314 */
315 void get_ignore_db(String *str);
316 /*
317 Get rewrite_db_statistics.
318
319 @retval A pointer to a rewrite_db_statistics object.
320 */
322 return &rewrite_db_statistics;
323 }
324
327
328#ifdef WITH_PERFSCHEMA_STORAGE_ENGINE
329 /**
330 Put replication filters with attached channel name into a vector.
331
332 @param rpl_pfs_filter_vec the vector.
333 @param channel_name the name of the channel attached or NULL if
334 there is no channel attached.
335 */
336 void put_filters_into_vector(std::vector<Rpl_pfs_filter> &rpl_pfs_filter_vec,
337 const char *channel_name);
338#endif /* WITH_PERFSCHEMA_STORAGE_ENGINE */
339
340 /**
341 Acquire the write lock.
342 */
344
345 /**
346 Acquire the read lock.
347 */
349
350 /**
351 Release the lock (whether it is a write or read lock).
352 */
354
355 /**
356 Assert that some thread holds the write lock.
357 */
359
360 /**
361 Assert that some thread holds the read lock.
362 */
364
365 /**
366 Check if the relation between the per-channel filter and
367 the channel's Relay_log_info is established.
368
369 @retval true if the relation is established
370 @retval false if the relation is not established
371 */
372 bool is_attached() { return attached; }
373
374 /**
375 Set attached to true when the relation between the per-channel filter
376 and the channel's Relay_log_info is established.
377 */
378 void set_attached() { attached = true; }
379
380 void reset();
381
389
390 private:
392 /*
393 State if the relation between the per-channel filter
394 and the channel's Relay_log_info is established.
395 */
397
398 /*
399 While slave is not running after server startup, the replication filter
400 can be modified by CHANGE REPLICATION FILTER filter [, filter...]
401 [FOR CHANNEL <channel_name>] and CHANGE REPLICATION SOURCE TO ... FOR
402 CHANNEL, and read by querying P_S.replication_applier_global_filters,
403 querying P_S.replication_applier_filters, and SHOW REPLICA STATUS
404 [FOR CHANNEL <channel_name>]. So the lock is introduced to protect
405 some member functions called by above commands. See below.
406
407 The read lock should be held when calling the following member functions:
408 get_do_table(String* str); // SHOW REPLICA STATUS
409 get_ignore_table(String* str); // SHOW REPLICA STATUS
410 get_wild_do_table(String* str); // SHOW REPLICA STATUS
411 get_wild_ignore_table(String* str); // SHOW REPLICA STATUS
412 get_rewrite_db(const char* db, size_t *new_len); // SHOW REPLICA STATUS
413 get_rewrite_db(String *str); // SHOW REPLICA STATUS
414 get_do_db(); // SHOW REPLICA STATUS
415 get_do_db(String *str); // SHOW REPLICA STATUS
416 get_ignore_db(); // SHOW REPLICA STATUS
417 get_ignore_db(String *str); // SHOW REPLICA STATUS
418 put_filters_into_vector(...); // query P_S tables
419 get_filter_count(); // query P_S tables
420
421 The write lock should be held when calling the following member functions:
422 set_do_db(mem_root_deque<Item *> *list); // CHANGE REPLICATION FILTER
423 set_ignore_db(mem_root_deque<Item *> *list); // CHANGE REPLICATION FILTER
424 set_do_table(mem_root_deque<Item *> *list); // CHANGE REPLICATION FILTER
425 set_ignore_table(mem_root_deque<Item *> *list); // CHANGE RPL. FILTER
426 set_wild_do_table(mem_root_deque<Item *> *list); // CHANGE RPL. FILTER
427 set_wild_ignore_table(mem_root_deque<Item *> *list); // CHANGE RPL. FILTER
428 set_db_rewrite(mem_root_deque<Item *> *list); // CHANGE RPL. FILTER
429 copy_global_replication_filters(); // CHANGE REPLICATION SOURCE TO ... FOR
430 CHANNEL
431
432 Please acquire a wrlock when modifying the replication filter (CHANGE
433 REPLICATION FILTER filter [, filter...] [FOR CHANNEL <channel_name>]
434 and CHANGE REPLICATION SOURCE TO ... FOR CHANNEL).
435 Please acqurie a rdlock when reading the replication filter (
436 SELECT * FROM performance_schema.replication_applier_global_filters,
437 SELECT * FROM performance_schema.replication_applier_filters and
438 SHOW REPLICA STATUS [FOR CHANNEL <channel_name>]).
439
440 Other member functions do not need the protection of the lock and we can
441 access thd->rli_slave->rpl_filter to filter log event without the
442 protection of the lock while slave is running, since the replication
443 filter is read/modified by a single thread during server startup and
444 there is no command can change it while slave is running.
445 */
447
449 typedef collation_unordered_map<std::string,
452
453 void init_table_rule_hash(Table_rule_hash **h, bool *h_inited);
454 void init_table_rule_array(Table_rule_array *, bool *a_inited);
455
456 int add_table_rule_to_array(Table_rule_array *a, const char *table_spec);
457 int add_table_rule_to_hash(Table_rule_hash *h, const char *table_spec,
458 uint len);
459
461
463 /**
464 Builds a Table_rule_array from a hash of TABLE_RULE_ENT. Cannot be used for
465 any other hash, as it assumes that the hash entries are TABLE_RULE_ENT.
466
467 @param table_array Pointer to the Table_rule_array to fill
468 @param h Pointer to the hash to read
469 @param inited True if the hash is initialized
470
471 @retval 0 OK
472 @retval 1 Error
473 */
475 Table_rule_hash *h, bool inited);
476 /**
477 Builds a destination Table_rule_array from a source Table_rule_array
478 of TABLE_RULE_ENT.
479
480 @param dest_array Pointer to the destination Table_rule_array to fill
481 @param source_array Pointer to the source Table_rule_array to read
482 @param inited True if the source Table_rule_array is initialized
483
484 @retval 0 OK
485 @retval 1 Error
486 */
488 Table_rule_array *source_array,
489 bool inited);
491 bool inited);
492 TABLE_RULE_ENT *find_wild(Table_rule_array *a, const char *key, size_t len);
493
495 Table_rule_hash **table_hash,
496 bool array_inited, bool *hash_inited);
497
498 /*
499 Those 6 structures below are uninitialized memory unless the
500 corresponding *_inited variables are "true".
501 */
502 /* For quick search */
505
508
511
518
521
523};
524
525/**
526 The class is a Rpl_filter representing global replication filters,
527 with a vector that references all Rpl_pfs_filter objects used to
528 represent P_S.replication_applier_global_filters table.
529 There is one instance, rpl_global_filter, created globally for
530 replication global filter. The rpl_global_filter is created when
531 the server is started, destroyed when the server is stopped.
532*/
534 public:
535 Rpl_global_filter() = default;
536 ~Rpl_global_filter() override = default;
537
538#ifdef WITH_PERFSCHEMA_STORAGE_ENGINE
539 /**
540 Used only by replication performance schema indices to get the count
541 of global replication filters.
542
543 @retval the count of global replication filters.
544 */
545 uint get_filter_count();
546 /**
547 Used only by replication performance schema indices to get the global
548 replication filter at the position 'pos' from the
549 rpl_pfs_filter_vec vector.
550
551 @param pos the index in the rpl_pfs_filter_vec vector.
552
553 @retval Rpl_pfs_filter A pointer to a Rpl_pfs_filter, or NULL if it
554 arrived the end of the rpl_pfs_filter_vec.
555 */
557 /**
558 This member function is called every time the rules of the global
559 replication filter are changed. Once that happens the PFS view of
560 global replication filter is recreated.
561 */
562 void reset_pfs_view();
563#endif /* WITH_PERFSCHEMA_STORAGE_ENGINE */
564
565 private:
566 /*
567 Store pointers of all Rpl_pfs_filter objects in
568 replication filter.
569 */
570 std::vector<Rpl_pfs_filter> rpl_pfs_filter_vec;
571 /* Prevent user from invoking default assignment function. */
573 /* Prevent user from invoking default copy constructor function. */
575};
576
577/** Sql_cmd_change_repl_filter represents the command CHANGE REPLICATION
578 * FILTER.
579 */
581 public:
582 /** Constructor. */
591
592 ~Sql_cmd_change_repl_filter() override = default;
593
596 }
597 bool execute(THD *thd) override;
598
600 options_mysqld filter_type);
601 bool change_rpl_filter(THD *thd);
602
603 private:
611};
612
613extern Rpl_filter *rpl_filter;
615
616#endif // RPL_FILTER_H
Kerberos Client Authentication nullptr
Definition: auth_kerberos_client_plugin.cc:251
This has the functionality of mysql_rwlock_t, with two differences:
Definition: rpl_gtid.h:324
void rdlock()
Acquire the read lock.
Definition: rpl_gtid.h:485
void wrlock()
Acquire the write lock.
Definition: rpl_gtid.h:494
void assert_some_rdlock() const
Assert that some thread holds the read lock.
Definition: rpl_gtid.h:573
void unlock()
Release the lock (whether it is a write or read lock).
Definition: rpl_gtid.h:505
void assert_some_wrlock() const
Assert that some thread holds the write lock.
Definition: rpl_gtid.h:575
Definition: sql_list.h:844
Base class that is used to represent any kind of expression in a relational query.
Definition: item.h:934
The class Rpl_filter_statistics encapsulates the following three statistics of replication filter: Th...
Definition: rpl_filter.h:106
Rpl_filter_statistics(Rpl_filter_statistics const &)
enum_configured_by get_configured_by()
Definition: rpl_filter.h:119
void increase_counter()
Definition: rpl_filter.h:122
enum_configured_by m_configured_by
Definition: rpl_filter.h:133
void reset()
Definition: rpl_filter.cc:97
void set_all(enum_configured_by configured_by)
Definition: rpl_filter.cc:103
ulonglong m_active_since
Definition: rpl_filter.h:136
ulonglong get_active_since()
Definition: rpl_filter.h:120
Rpl_filter_statistics & operator=(Rpl_filter_statistics const &)
ulonglong get_counter()
Definition: rpl_filter.h:121
Rpl_filter_statistics()
Definition: rpl_filter.cc:93
std::atomic< uint64 > m_atomic_counter
Definition: rpl_filter.h:143
Rpl_filter.
Definition: rpl_filter.h:214
int build_ignore_table_hash()
Definition: rpl_filter.cc:644
bool is_attached()
Check if the relation between the per-channel filter and the channel's Relay_log_info is established.
Definition: rpl_filter.h:372
int add_string_list(I_List< i_string > *list, const char *spec)
Definition: rpl_filter.cc:909
collation_unordered_map< std::string, unique_ptr_my_free< TABLE_RULE_ENT > > Table_rule_hash
Definition: rpl_filter.h:451
int add_string_pair_list(I_List< i_string_pair > *list, const char *key, const char *val)
Definition: rpl_filter.cc:928
void free_string_pair_list(I_List< i_string_pair > *l)
Definition: rpl_filter.cc:1015
void get_wild_do_table(String *str)
Definition: rpl_filter.cc:1148
bool is_empty()
Check if the replication filter is empty or not.
Definition: rpl_filter.cc:180
void unlock()
Release the lock (whether it is a write or read lock).
Definition: rpl_filter.h:353
int(Rpl_filter::* Add_filter)(char const *)
Definition: rpl_filter.h:273
Rpl_filter_statistics wild_ignore_table_statistics
Definition: rpl_filter.h:385
void set_attached()
Set attached to true when the relation between the per-channel filter and the channel's Relay_log_inf...
Definition: rpl_filter.h:378
void free_string_list(I_List< i_string > *l)
Definition: rpl_filter.cc:1002
Rpl_filter_statistics * get_rewrite_db_statistics()
Definition: rpl_filter.h:321
int build_table_hash_from_array(Table_rule_array *table_array, Table_rule_hash **table_hash, bool array_inited, bool *hash_inited)
Table rules are initially added to DYNAMIC_LIST, and then, when the charset to use for tables has bee...
Definition: rpl_filter.cc:675
int set_db_rewrite(mem_root_deque< Item * > *list, enum_configured_by configured_by)
Definition: rpl_filter.cc:886
I_List< i_string > * get_do_db()
Definition: rpl_filter.cc:1195
void init_table_rule_hash(Table_rule_hash **h, bool *h_inited)
Definition: rpl_filter.cc:967
virtual ~Rpl_filter()
Definition: rpl_filter.cc:146
Table_rule_hash * do_table_hash
Definition: rpl_filter.h:503
int set_ignore_table(mem_root_deque< Item * > *list, enum_configured_by configured_by)
Definition: rpl_filter.cc:820
Rpl_filter_statistics ignore_table_statistics
Definition: rpl_filter.h:383
bool wild_ignore_table_inited
Definition: rpl_filter.h:517
Table_rule_array wild_ignore_table
Definition: rpl_filter.h:510
int build_do_table_hash()
Definition: rpl_filter.cc:620
Rpl_filter()
Definition: rpl_filter.cc:122
Rpl_filter(Rpl_filter const &)
int set_do_table(mem_root_deque< Item * > *list, enum_configured_by configured_by)
Definition: rpl_filter.cc:794
bool ignore_table_hash_inited
Definition: rpl_filter.h:513
bool is_on()
Definition: rpl_filter.cc:569
Rpl_filter_statistics do_table_statistics
Definition: rpl_filter.h:382
const char * get_rewrite_db(const char *db, size_t *new_len)
Definition: rpl_filter.cc:1176
I_List< i_string > ignore_db
Definition: rpl_filter.h:520
void assert_some_wrlock()
Assert that some thread holds the write lock.
Definition: rpl_filter.h:358
I_List< i_string_pair > rewrite_db
Definition: rpl_filter.h:522
int add_do_db(const char *db_spec)
Definition: rpl_filter.cc:955
I_List< i_string > * get_ignore_db()
Definition: rpl_filter.cc:1211
bool db_ok(const char *db, bool need_increase_counter=true)
Definition: rpl_filter.cc:458
void get_do_table(String *str)
Definition: rpl_filter.cc:1140
Rpl_filter_statistics wild_do_table_statistics
Definition: rpl_filter.h:384
bool do_table_array_inited
Definition: rpl_filter.h:514
bool ignore_table_array_inited
Definition: rpl_filter.h:515
int set_do_db(mem_root_deque< Item * > *list, enum_configured_by configured_by)
Definition: rpl_filter.cc:772
int parse_filter_list(mem_root_deque< Item * > *item_list, Add_filter func)
Definition: rpl_filter.cc:745
bool do_table_hash_inited
Definition: rpl_filter.h:512
Rpl_filter & operator=(Rpl_filter const &)
int add_ignore_table_array(const char *table_spec)
Definition: rpl_filter.cc:581
int table_rule_ent_hash_to_array(Table_rule_array *table_array, Table_rule_hash *h, bool inited)
Builds a Table_rule_array from a hash of TABLE_RULE_ENT.
Definition: rpl_filter.cc:1064
int set_wild_ignore_table(mem_root_deque< Item * > *list, enum_configured_by configured_by)
Definition: rpl_filter.cc:866
I_List< i_string > do_db
Definition: rpl_filter.h:519
Table_rule_array do_table_array
Definition: rpl_filter.h:506
bool wild_do_table_inited
Definition: rpl_filter.h:516
int add_do_table_array(const char *table_spec)
Definition: rpl_filter.cc:573
void wrlock()
Acquire the write lock.
Definition: rpl_filter.h:343
bool is_rewrite_empty()
Definition: rpl_filter.cc:571
void reset()
Definition: rpl_filter.cc:151
Rpl_filter_statistics do_db_statistics
Definition: rpl_filter.h:386
void put_filters_into_vector(std::vector< Rpl_pfs_filter > &rpl_pfs_filter_vec, const char *channel_name)
Put replication filters with attached channel name into a vector.
Definition: rpl_filter.cc:1229
int add_db_rewrite(const char *from_db, const char *to_db)
Definition: rpl_filter.cc:606
bool db_ok_with_wild_table(const char *db)
Definition: rpl_filter.cc:540
bool tables_ok(const char *db, Table_ref *tables)
Definition: rpl_filter.cc:397
bool attached
Definition: rpl_filter.h:396
int table_rule_ent_array_to_array(Table_rule_array *dest_array, Table_rule_array *source_array, bool inited)
Builds a destination Table_rule_array from a source Table_rule_array of TABLE_RULE_ENT.
Definition: rpl_filter.cc:1096
Rpl_filter_statistics ignore_db_statistics
Definition: rpl_filter.h:387
int set_ignore_db(mem_root_deque< Item * > *list, enum_configured_by configured_by)
Definition: rpl_filter.cc:783
Prealloced_array< TABLE_RULE_ENT *, 16 > Table_rule_array
Definition: rpl_filter.h:448
void get_wild_ignore_table(String *str)
Definition: rpl_filter.cc:1153
Table_rule_array ignore_table_array
Definition: rpl_filter.h:507
int add_wild_do_table(const char *table_spec)
Definition: rpl_filter.cc:589
Rpl_filter_statistics rewrite_db_statistics
Definition: rpl_filter.h:388
void init_table_rule_array(Table_rule_array *, bool *a_inited)
Definition: rpl_filter.cc:972
void get_ignore_table(String *str)
Definition: rpl_filter.cc:1144
Checkable_rwlock * m_rpl_filter_lock
Definition: rpl_filter.h:446
int add_table_rule_to_array(Table_rule_array *a, const char *table_spec)
Definition: rpl_filter.cc:725
Table_rule_hash * ignore_table_hash
Definition: rpl_filter.h:504
void rdlock()
Acquire the read lock.
Definition: rpl_filter.h:348
void assert_some_rdlock()
Assert that some thread holds the read lock.
Definition: rpl_filter.h:363
TABLE_RULE_ENT * find_wild(Table_rule_array *a, const char *key, size_t len)
Definition: rpl_filter.cc:977
int copy_global_replication_filters()
Copy global replication filters to its per-channel replication filters if there are no per-channel re...
Definition: rpl_filter.cc:191
void table_rule_ent_dynamic_array_to_str(String *s, Table_rule_array *a, bool inited)
Definition: rpl_filter.cc:1127
bool table_rules_on
Definition: rpl_filter.h:391
int set_wild_do_table(mem_root_deque< Item * > *list, enum_configured_by configured_by)
Definition: rpl_filter.cc:847
int add_wild_ignore_table(const char *table_spec)
Definition: rpl_filter.cc:597
int add_table_rule_to_hash(Table_rule_hash *h, const char *table_spec, uint len)
Added one table rule to hash.
Definition: rpl_filter.cc:703
void table_rule_ent_hash_to_str(String *s, Table_rule_hash *h, bool inited)
Definition: rpl_filter.cc:1038
Table_rule_array wild_do_table
Definition: rpl_filter.h:509
int add_ignore_db(const char *db_spec)
Definition: rpl_filter.cc:961
void free_string_array(Table_rule_array *a)
Definition: rpl_filter.cc:997
The class is a Rpl_filter representing global replication filters, with a vector that references all ...
Definition: rpl_filter.h:533
Rpl_pfs_filter * get_filter_at_pos(uint pos)
Used only by replication performance schema indices to get the global replication filter at the posit...
Definition: rpl_filter.cc:1296
~Rpl_global_filter() override=default
std::vector< Rpl_pfs_filter > rpl_pfs_filter_vec
Definition: rpl_filter.h:570
uint get_filter_count()
Used only by replication performance schema indices to get the count of global replication filters.
Definition: rpl_filter.cc:1306
Rpl_global_filter(const Rpl_global_filter &info)
void reset_pfs_view()
This member function is called every time the rules of the global replication filter are changed.
Definition: rpl_filter.cc:1286
Rpl_global_filter & operator=(const Rpl_global_filter &info)
Rpl_global_filter()=default
The class Rpl_pfs_filter is introduced to serve the performance_schema.replication_applier_filters ta...
Definition: rpl_filter.h:167
const char * m_filter_name
Definition: rpl_filter.h:188
Rpl_pfs_filter & operator=(Rpl_pfs_filter const &)
const char * get_filter_name()
Definition: rpl_filter.h:177
Rpl_filter_statistics * m_rpl_filter_statistics
Definition: rpl_filter.h:191
Rpl_filter_statistics * get_rpl_filter_statistics()
Definition: rpl_filter.h:179
const char * m_channel_name
Definition: rpl_filter.h:185
const String & get_filter_rule()
Definition: rpl_filter.h:178
const char * get_channel_name()
Definition: rpl_filter.h:176
String m_filter_rule
Definition: rpl_filter.h:194
Rpl_pfs_filter()
Definition: rpl_filter.cc:68
Sql_cmd_change_repl_filter represents the command CHANGE REPLICATION FILTER.
Definition: rpl_filter.h:580
mem_root_deque< Item * > * wild_do_table_list
Definition: rpl_filter.h:608
~Sql_cmd_change_repl_filter() override=default
mem_root_deque< Item * > * ignore_table_list
Definition: rpl_filter.h:607
mem_root_deque< Item * > * ignore_db_list
Definition: rpl_filter.h:605
Sql_cmd_change_repl_filter()
Constructor.
Definition: rpl_filter.h:583
void set_filter_value(mem_root_deque< Item * > *item_list, options_mysqld filter_type)
Definition: rpl_filter.cc:1321
mem_root_deque< Item * > * do_db_list
Definition: rpl_filter.h:604
mem_root_deque< Item * > * rewrite_db_pair_list
Definition: rpl_filter.h:610
mem_root_deque< Item * > * do_table_list
Definition: rpl_filter.h:606
bool execute(THD *thd) override
Execute this SQL statement.
Definition: rpl_filter.cc:1315
bool change_rpl_filter(THD *thd)
Execute a CHANGE REPLICATION FILTER statement to set filter rules.
Definition: rpl_filter.cc:1362
enum_sql_command sql_command_code() const override
Return the command code for this statement.
Definition: rpl_filter.h:594
mem_root_deque< Item * > * wild_ignore_table_list
Definition: rpl_filter.h:609
Representation of an SQL command.
Definition: sql_cmd.h:83
Using this class is fraught with peril, and you need to be very careful when doing so.
Definition: sql_string.h:167
For each client connection we create a separate thread with THD serving as a thread/connection descri...
Definition: sql_lexer_thd.h:36
Definition: table.h:2863
std::unordered_map, but with my_malloc and collation-aware comparison.
Definition: map_helpers.h:219
A (partial) implementation of std::deque allocating its blocks on a MEM_ROOT.
Definition: mem_root_deque.h:111
static bool inited
Definition: log_filter_dragnet.cc:122
std::unique_ptr< T, My_free_deleter > unique_ptr_my_free
std::unique_ptr, but with my_free as deleter.
Definition: map_helpers.h:97
Some integer typedefs for easier portability.
unsigned long long int ulonglong
Definition: my_inttypes.h:56
enum_sql_command
Definition: my_sqlcommand.h:46
@ SQLCOM_CHANGE_REPLICATION_FILTER
Definition: my_sqlcommand.h:110
std::string str(const mysqlrouter::ConfigGenerator::Options::Endpoint &ep)
Definition: config_generator.cc:1073
static mysql_service_status_t add(reference_caching_channel channel, const char *implementation_name) noexcept
Definition: component.cc:127
std::list< T, ut::allocator< T > > list
Specialization of list which uses ut_allocator.
Definition: ut0new.h:2878
options_mysqld
only options that need special treatment in get_one_option() deserve to be listed below
Definition: options_mysqld.h:31
required string key
Definition: replication_asynchronous_connection_failover.proto:60
Rpl_filter * rpl_filter
Rpl_filter * binlog_filter
Definition: mysqld.cc:1530
enum_configured_by
Enum values for CONFIGURED_BY column.
Definition: rpl_filter.h:84
@ CONFIGURED_BY_CHANGE_REPLICATION_FILTER
Definition: rpl_filter.h:86
@ CONFIGURED_BY_STARTUP_OPTIONS
Definition: rpl_filter.h:85
@ CONFIGURED_BY_STARTUP_OPTIONS_FOR_CHANNEL
Definition: rpl_filter.h:87
@ CONFIGURED_BY_CHANGE_REPLICATION_FILTER_FOR_CHANNEL
Definition: rpl_filter.h:88
Representation of an SQL command.
Our own string classes, used pervasively throughout the executor.
Definition: rpl_filter.h:77
char * tbl_name
Definition: rpl_filter.h:79
uint key_len
Definition: rpl_filter.h:80
char * db
Definition: rpl_filter.h:78