mirror of
https://github.com/MariaDB/server.git
synced 2026-05-15 19:37:16 +02:00
There was memory leak when running some tests on PB2. The reason of the failure is an early return from change_master() that was supposed to deallocate a dyn-array. Fixed with relocating the dyn-array's destructor at ~LEX() that is the end of the session, per Gleb's patch idea. Two optimizations were done: the static buffer for the dyn-array to base on, and the array initialization is called precisely when it's necessary rather than per each CHANGE-MASTER as before. mysql-test/suite/rpl/t/rpl_empty_master_host.test: the test is binlog-format insensitive so it will be run with MIXED mode only. sql/sql_lex.cc: the new flag is initialized. sql/sql_lex.h: A new bool flag new member to LEX.mi is added to stay UP since after LEX.mi.repl_ignore_server_ids dynarray initialization was called for the first time on the session. So it is set once and its life time is session. The array is destroyed at the end of the session. sql/sql_repl.cc: dyn-array destruction is relocated to ~LEX. sql/sql_yacc.yy: Refining logics of Lex->mi.repl_ignore_server_ids initialization. The array is initialized once a corresponding option in CHANGE MASTER token sequence is found. The fact of initialization is memorized into the new flag.
53 lines
1.8 KiB
Text
53 lines
1.8 KiB
Text
#
|
|
# BUG
|
|
# ---
|
|
# BUG#28796: CHANGE MASTER TO MASTER_HOST="" leads to invalid master.info
|
|
#
|
|
# Description
|
|
# -----------
|
|
#
|
|
# This test aims at:
|
|
# i) verifying that an error is thrown when setting MASTER_HOST=''
|
|
# ii) no error is thrown when setting non empty MASTER_HOST
|
|
# iii) replication works after setting a correct host name/ip
|
|
#
|
|
# Implementation is performed by feeding different values (according
|
|
# to i), ii) and iii) ) to CHANGE MASTER TO MASTER_HOST= x and checking
|
|
# along the way if error/no error is thrown and/or if replication starts
|
|
# working when expected.
|
|
|
|
--source include/master-slave.inc
|
|
--source include/have_binlog_format_mixed.inc
|
|
|
|
connection slave;
|
|
STOP SLAVE;
|
|
--source include/wait_for_slave_to_stop.inc
|
|
|
|
let $master_host= query_get_value(SHOW SLAVE STATUS, Master_Host, 1);
|
|
--echo Master_Host = '$master_host' (expected '127.0.0.1')
|
|
|
|
# attempt to change to an empty master host should
|
|
# result in error ER_WRONG_ARGUMENTS: "Incorrect arguments to ..."
|
|
error ER_WRONG_ARGUMENTS;
|
|
CHANGE MASTER TO MASTER_HOST="";
|
|
|
|
# show slave status still holds previous information
|
|
let $master_host= query_get_value(SHOW SLAVE STATUS, Master_Host, 1);
|
|
--echo Master_Host = '$master_host' (expected '127.0.0.1')
|
|
|
|
# changing master to other than empty master host succeeds
|
|
CHANGE MASTER TO MASTER_HOST="foo";
|
|
|
|
# show slave status should hold "foo" as master host
|
|
let $master_host= query_get_value(SHOW SLAVE STATUS, Master_Host, 1);
|
|
--echo Master_Host = '$master_host' (expected 'foo')
|
|
|
|
# changing back to localhost
|
|
CHANGE MASTER TO MASTER_HOST="127.0.0.1";
|
|
let $master_host= query_get_value(SHOW SLAVE STATUS, Master_Host, 1);
|
|
--echo Master_Host = '$master_host' (expected '127.0.0.1')
|
|
|
|
# start slave must succeed.
|
|
START SLAVE;
|
|
--source include/wait_for_slave_to_start.inc
|
|
--source include/rpl_end.inc
|