mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 20:12:31 +01:00
5eccc400b1
Documentation of the feature can be found at: http://kb.askmonty.org/en/multi-source-replication/ This code is based on code from Taobao, developed by Plinux Other things: - Added new commands: START ALL SLAVES, STOP ALL SLAVES and SHOW FULL SLAVE STATUS - Almost all usage of 'active_mi' is deleted. - Added parameter to reset_logs() so that one can specify if new logs should be created. - Check wildcard match as early as possible for SHOW STATUS. This makes SHOW STATUS like 'xxx' a lot faster and use less mutex - Made max_relay_log_size depending on master connection. - Added sys_vars.default_master_connection_basic to fix a failure in sys_vars.all_vars, modified sql_slave_skip_counter_basic to allow session-level settings - Added commands to mysqladmin: start-all-slaves & stop-all-slaves - Removed logging of "next log '%s' is currently active | not active" - Fixed bug in my_vsnprintf() when using positional parameters with length - Added fn_ext2(), which returns pointer to last '.' in file name - max_relay_log_size now acts as a normal slave specific variable - Don't store replication position if innobase_overwrite_relay_log_info is not set - max_relay_log_size copies it's values from max_binlog_size at startup BUILD/SETUP.sh: Added -Wno-invalid-offsetof to get rid of warning of offsetof() on C++ class (safe in the contex we use it) client/mysqladmin.cc: Added commands start-all-slaves & stop-all-slaves client/mysqltest.cc: Added support for error names starting with 'W' Added connection_name support to --sync_with_master cmake/maintainer.cmake: Added -Wno-invalid-offsetof to get rid of warning of offsetof() on C++ class (safe in the contex we use it) include/my_sys.h: Added fn_ext2(), which returns pointer to last '.' in file name include/mysql/plugin.h: Added SHOW_SIMPLE_FUNC include/mysql/plugin_audit.h.pp: Updated signature file include/mysql/plugin_auth.h.pp: Updated signature file include/mysql/plugin_ftparser.h.pp: Updated signature file mysql-test/extra/rpl_tests/rpl_max_relay_size.test: Updated test mysql-test/include/setup_fake_relay_log.inc: There is no orphan relay log files anymore mysql-test/mysql-test-run.pl: Added multi_source to test suite mysql-test/r/flush.result: Added test for new syntax of flush relay logs (can't repeat relay logs or slave) mysql-test/r/mysqld--help.result: Updated result mysql-test/r/mysqltest.result: Updated result mysql-test/r/parser.result: Updated result mysql-test/r/signal_code.result: Updated result after introducing new commands mysql-test/r/sp-code.result: Updated result after introducing new commands mysql-test/suite/multi_source: Tests for multi-source mysql-test/suite/multi_source/info_logs-master.opt: Test with strange file names mysql-test/suite/multi_source/info_logs.result: Test of logs mysql-test/suite/multi_source/info_logs.test: Test of logs mysql-test/suite/multi_source/my.cnf: Setup of multi-master tests Added log-warnings to get more information to the log files mysql-test/suite/multi_source/relaylog_events.result: Test relay log handling mysql-test/suite/multi_source/relaylog_events.test: Test relay log handling mysql-test/suite/multi_source/reset_slave.result: Test RESET SLAVE mysql-test/suite/multi_source/reset_slave.test: Test RESET SLAVE mysql-test/suite/multi_source/simple.result: Simple basic test of multi-source functionality mysql-test/suite/multi_source/simple.test: Simple basic test of multi-source functionality mysql-test/suite/multi_source/skip_counter.result: Testing skip_counter and max_relay_log_size mysql-test/suite/multi_source/skip_counter.test: Testing skip_counter and max_relay_log_size mysql-test/suite/multi_source/syntax.result: Test of multi-source syntax mysql-test/suite/multi_source/syntax.test: Test of multi-source syntax mysql-test/suite/rpl/r/rpl_deadlock_innodb.result: New warnings mysql-test/suite/rpl/r/rpl_filter_dbs_dynamic.result: Improved error texts mysql-test/suite/rpl/r/rpl_filter_tables_dynamic.result: Improved error texts mysql-test/suite/rpl/r/rpl_filter_wild_tables_dynamic.result: Improved error texts mysql-test/suite/rpl/r/rpl_flush_logs.result: Update results mysql-test/suite/rpl/r/rpl_heartbeat.result: Warning was removed mysql-test/suite/rpl/r/rpl_heartbeat_basic.result: Warning was removed mysql-test/suite/rpl/r/rpl_rotate_logs.result: Updated results because of new error messages mysql-test/suite/rpl/r/rpl_row_max_relay_size.result: Updated results mysql-test/suite/rpl/r/rpl_row_show_relaylog_events.result: Updated results after improved RESET SLAVE (we now use less relay log files) mysql-test/suite/rpl/r/rpl_skip_replication.result: New error message mysql-test/suite/rpl/r/rpl_start_slave_deadlock_sys_vars.result: Test removed as the old DBUG_SYNC entries doesn't exist anymore mysql-test/suite/rpl/r/rpl_stm_max_relay_size.result: Updated results mysql-test/suite/rpl/r/rpl_stm_mix_show_relaylog_events.result: Updated results after improved RESET SLAVE (we now use less relay log files) mysql-test/suite/rpl/t/rpl_flush_logs.test: Updated tests as relay log files is created a bit differently than before mysql-test/suite/rpl/t/rpl_start_slave_deadlock_sys_vars.test: Test removed as the old DBUG_SYNC entries doesn't exist anymore mysql-test/suite/sys_vars/r/default_master_connection_basic.result: New test to test usage of default_master_connection mysql-test/suite/sys_vars/r/max_relay_log_size_basic.result: Updated results mysql-test/suite/sys_vars/r/sql_slave_skip_counter_basic.result: Updated usage of sql_slave_skip_counter mysql-test/suite/sys_vars/t/default_master_connection_basic.test: New test to test usage of default_master_connection mysql-test/suite/sys_vars/t/max_relay_log_size_basic.test: Updated results mysql-test/suite/sys_vars/t/sql_slave_skip_counter_basic.test: Updated test for multi-source mysql-test/t/flush.test: Added test for new syntax of flush relay logs (can't repeat relay logs or slave) mysql-test/t/parser.test: Updated test as master_pos_wait() now takes more arguments than before mysys/mf_fn_ext.c: Added fn_ext2(), which returns pointer to last '.' in file name plugin/semisync/semisync_master_plugin.cc: Use SHOW_SIMPLE_FUNC to optimize SHOW STATUS sql/event_scheduler.cc: No reason to initialize slave_thread (it's guaranteed to be zero here) sql/item_create.cc: Added connection_name argument to master_pos_wait() Simplified code sql/item_func.cc: Added connection_name argument to master_pos_wait() sql/item_func.h: Added connection_name argument to master_pos_wait() sql/lex.h: Added SLAVES keyword sql/log.cc: Added tag "Master 'connection_name'" to slave errors that has a connection name. Added parameter to reset_logs() so that one can specify if new logs should be created. Removed some wrong casts Changed some constants to defines sql/log.h: Added parameter to reset_logs() Updated comment to reflect new code sql/log_event.cc: Updated DBUG_PRINT sql/mysqld.cc: Added variable mysqld_server_initialized so that other functions can test if server is fully initialized. Free all slave data in one place (fewer ifdef's) Removed not needed call to close_active_mi() Initialize slaves() later in startup to ensure that everthing is really initialized when slaves start. Made status variable slave_running multi-source safe max_relay_log_size copies it's values from max_binlog_size at startup SHOW_FUNC -> SHOW_SIMPLE_FUNC sql/mysqld.h: Added mysqld_server_initialized Removed max_relay_log_size sql/rpl_mi.cc: Store connection name and cmp_connection_name (only used for show full slave status) in Master_info Added code for Master_info_index, which handles storage of multi-master information Don't write the empty "" connection_name to multi-master.info file. This is handled by the original code. Create Master_info_index::index_file_names once at init More DBUG_PRINT Give error if Master_info_index::check_duplicate_master_info fails Added start|stop all slaves sql/rpl_mi.h: Added connection_name and Master_info_index Updated prototypes sql/rpl_rli.cc: Added connection_name to relay log files. If we do a full reset, don't create any new relay log files. Updated comment to reflect new code Made max_relay_log_size depending on master connection. sql/rpl_rli.h: Fixed type of slave_skip_counter as we now access it directly in sys_vars.cc, so it must be ulong Made executed_entries and max_relay_log_size depending on master connection. sql/set_var.cc: Fixed that one can get variable name also when one uses DEFAULT sql/set_var.h: Made option global so that one can check and change min & max values (sorry Sergei) sql/share/errmsg-utf8.txt: Added new error messages needed for multi-source Added multi-source name to error ER_MASTER_INFO and WARN_NO_MASTER_INFO Improved error message if connection exists sql/slave.cc: Moved things a bit around to make it easier to handle error conditions. Create a global master_info_index and add the "" connection to it Ensure that new Master_info doesn't fail. Don't call terminate_slave_threads(active_mi..) on end_slave() as this is now done automaticly when deleting master_info_index. Delete not needed function close_active_mi(). One can achive same thing by calling end_slave(). Added support for SHOW FULL SLAVE STATUS (show status for all master connections with connection_name as first column) Removed logging of "next log '%s' is currently active | not active" Added Slave_received_heartbeats and Slave_heartbeat_period sql/slave.h: Added new defines and prototypes sql/sql_base.cc: More DBUG_PRINT sql/sql_class.cc: Reset thd->connection_name and thd-->default_master_connection sql/sql_class.h: Added thd->connection_name and thd-->default_master_connection Made slave_skip_count and max_relay_log_size depending on master connection. These variables are in THD to make changing them thread safe. sql/sql_const.h: Added MAX_CONNECTION_NAME sql/sql_insert.cc: thd->slave_thread -> thd->rli_slave Removed usage of active_mi sql/sql_lex.cc: Reset 'lex->verbose' (to simplify some sql_yacc.yy code) sql/sql_lex.h: Added connection_name, relay_log_connection_name, SQLCOM_SLAVE_ALL_START and SQLCOM_SLAVE_ALL_STOP sql/sql_load.cc: thd->slave_thread -> thd->rli_slave Removed usage of active_mi sql/sql_parse.cc: Added support for connection_name to all SLAVE commands. - Instead of using active_mi, we now get the current Master_info from master_info_index. - Create new replication threads with CHANGE MASTER - Added support for show_all_master_info()- sql/sql_prepare.cc: Added SQLCOM_SLAVE_ALL_START and SQLCOM_SLAVE_ALL_STOP sql/sql_reload.cc: Made reset/full slave use master_info_index->get_master_info() instead of active_mi. If one uses 'RESET SLAVE "connection_name" all' the connection is removed from master_info_index. Fixed issues with FLUSH RELAY LOGS sql/sql_repl.cc: sql_slave_skip_counter is moved to thd->variables to make it thread safe and fix some bugs with it Add connection name to relay log files. Added connection name to errors. Added some logging for multi-master if log_warnings > 1 stop_slave(): - Don't check if thd is set. It's guaranteed to always be set. change_master(): - Check for duplicate connection names in change_master() - Check for wrong arguments first in file (to simplify error handling) - Register new connections in master_info_index ****** Added multi-source support to show relaylog events ****** check_duplicate_master_info() now generates an error Added parameter to reset_logs() ****** Updated calls to create_signed_file_name() sql/sql_show.cc: Check wildcard match as early as possible for SHOW STATUS. This makes SHOW STATUS like 'xxx' a lot faster and use less mutex sql/sql_yacc.yy: Added optional connection_name to a all relevant master/slave commands Added multi-source support to show relaylog events Added new commands START ALL SLAVES, STOP ALL SLAVES and SHOW FULL SLAVE STATUS sql/strfunc.cc: my_global.h shoud always be included first. sql/sys_vars.cc: Added variable default_master_connection Made variable sql_slave_skip_counter multi-source safe Made max_relay_log_size depending on master connection. Made old code more reusable sql/sys_vars.h: Added Sys_var_session_lexstring (needed for default_master_connection) Added Sys_var_multi_source_uint (needed for sql_slave_skip_counter). Changed Sys_var_multi_source_uint to ulong to be able to handle max_relay_log_size Made old code more reusable storage/example/ha_example.cc: Use SHOW_SIMPLE_FUNC to optimize SHOW STATUS storage/sphinx/ha_sphinx.cc: Use SHOW_SIMPLE_FUNC to optimize SHOW STATUS storage/xtradb/handler/ha_innodb.cc: Don't store replication position if innobase_overwrite_relay_log_info is not set strings/my_vsnprintf.c: Fixed bug when using positional parameters with length |
||
---|---|---|
.. | ||
bchange.c | ||
bmove_upp.c | ||
CHARSET_INFO.txt | ||
CMakeLists.txt | ||
conf_to_src.c | ||
ctype-big5.c | ||
ctype-bin.c | ||
ctype-cp932.c | ||
ctype-czech.c | ||
ctype-euc_kr.c | ||
ctype-eucjpms.c | ||
ctype-extra.c | ||
ctype-gb2312.c | ||
ctype-gbk.c | ||
ctype-latin1.c | ||
ctype-mb.c | ||
ctype-simple.c | ||
ctype-sjis.c | ||
ctype-tis620.c | ||
ctype-uca.c | ||
ctype-ucs2.c | ||
ctype-ujis.c | ||
ctype-utf8.c | ||
ctype-win1250ch.c | ||
ctype.c | ||
decimal.c | ||
do_ctype.c | ||
dtoa.c | ||
dump_map.c | ||
int2str.c | ||
is_prefix.c | ||
latin2.def | ||
llstr.c | ||
longlong2str.c | ||
my_strchr.c | ||
my_strtoll10.c | ||
my_vsnprintf.c | ||
README | ||
str2int.c | ||
str_alloc.c | ||
strappend.c | ||
strcend.c | ||
strcont.c | ||
strend.c | ||
strfill.c | ||
string.doc | ||
strings_def.h | ||
strmake.c | ||
strmov.c | ||
strmov_overlapp.c | ||
strnlen.c | ||
strnmov.c | ||
strxmov.c | ||
strxnmov.c | ||
t_ctype.h | ||
uca-dump.c | ||
uctypedump.c | ||
utr11-dump.c | ||
xml.c |
File : README Author : Richard A. O'Keefe. Updated: 30 April 1984 Purpose: Explain the new strings package. The UNIX string libraries (described in the string(3) manual page) differ from UNIX to UNIX (e.g. strtok is not in V7 or 4.1bsd). Worse, the sources are not in the public domain, so that if there is a string routine which is nearly what you want but not quite you can't take a copy and modify it. And of course C programmers on non-UNIX systems are at the mercy of their supplier. This package was designed to let me do reasonable things with C's strings whatever UNIX (V7, PaNiX, UX63, 4.1bsd) I happen to be using. Everything in the System III manual is here and does just what the S3 manual says it does. There are also lots of new goodies. I'm sorry about the names, but the routines do have to work on asphyxiated-at- birth systems which truncate identifiers. The convention is that a routine is called str [n] [c] <operation> If there is an "n", it means that the function takes an (int) "length" argument, which bounds the number of characters to be moved or looked at. If the function has a "set" argument, a "c" in the name indicates that the complement of the set is used. Functions or variables whose names start with _ are support routines which aren't really meant for general use. I don't know what the "p" is doing in "strpbrk", but it is there in the S3 manual so it's here too. "istrtok" does not follow this rule, but with 7 letters what can you do? I have included new versions of atoi(3) and atol(3) as well. They use a new primitive str2int, which takes a pair of bounds and a radix, and does much more thorough checking than the normal atoi and atol do. The result returned by atoi & atol is valid if and only if errno == 0. There is also an output conversion routine int2str, with itoa and ltoa as interface macros. Only after writing int2str did I notice that the str2int routine has no provision for unsigned numbers. On reflection, I don't greatly care. I'm afraid that int2str may depend on your "C" compiler in unexpected ways. Do check the code with -S. Several of these routines have "asm" inclusions conditional on the VaxAsm option. These insertions can make the routines which have them quite a bit faster, but there is a snag. The VAX architects, for some reason best known to themselves and their therapists, decided that all "strings" were shorter than 2^16 bytes. Even when the length operands are in 32-bit registers, only 16 bits count. So the "asm" versions do not work for long strings. If you can guarantee that all your strings will be short, define VaxAsm in the makefile, but in general, and when using other machines, do not define it. To use this library, you need the "strings.a" library file and the "strings.h" and "ctypes.h" header files. The other header files are for compiling the library itself, though if you are hacking extensions you may find them useful. General users really shouldn't see them. I've defined a few macros I find useful in "strings.h"; if you have no need for "index", "rindex", "streql", and "beql", just edit them out. On the 4.1bsd system I am using declaring all these functions 'extern' does not mean that they will all be loaded; but only the ones you use. When using lesser systems you may find it necessary to break strings.h up, or you could get by with just adding "extern" declarations for the functions you want as you need them. Many of these functions have the same names as functions in the "standard C library", by design as this is a replacement/reimplementation of part of that library. So you may have to talk the loader into loading this library first. Again, I've found no problems on 4.1bsd. You may wonder at my failure to provide manual pages for this code. For the things in V7, 4.?, or SIII, you should be able to use whichever manual page came with that system, and anything I might write would be so like it as to raise suspicions of violating AT&T copyrights. In the sources you will find comments which provide far more documentation for these routines than AT&T ever provided for their strings stuff, I just don't happen to have put it in nroff -man form. Had I done so, the .3 files would have outbulked the .c files! These files are in the public domain. This includes getopt.c, which is the work of Henry Spencer, University of Toronto Zoology, who says of it "None of this software is derived from Bell software. I had no access to the source for Bell's versions at the time I wrote it. This software is hereby explicitly placed in the public domain. It may be used for any purpose on any machine by anyone." I would greatly prefer it if *my* material received no military use.