diff options
author | f4rnham <f4rnham@PC.none> | 2015-04-24 12:38:59 +0200 |
---|---|---|
committer | Kristian Nielsen <knielsen@knielsen-hq.org> | 2015-04-24 13:08:27 +0200 |
commit | 060ec5b6b9384456695b6fc903ccfeb8c7ccd298 (patch) | |
tree | f27cb185b0499c266af19571377ba07c4fc20cf3 | |
parent | b616991a68c78733770fa4519d2f92b052932160 (diff) | |
download | mariadb-git-060ec5b6b9384456695b6fc903ccfeb8c7ccd298.tar.gz |
MDEV-7130: MASTER_POS_WAIT(log_name,log_pos,timeout,"connection_name") hangs, does not respect the timeout
Changed also arg_count check for connection_name to prevent same bug
if fifth argument is introduced in future
-rw-r--r-- | mysql-test/suite/rpl/r/rpl_master_pos_wait.result | 22 | ||||
-rw-r--r-- | mysql-test/suite/rpl/t/rpl_master_pos_wait.test | 31 | ||||
-rw-r--r-- | sql/item_func.cc | 4 |
3 files changed, 55 insertions, 2 deletions
diff --git a/mysql-test/suite/rpl/r/rpl_master_pos_wait.result b/mysql-test/suite/rpl/r/rpl_master_pos_wait.result index bf4347757f7..78bda5a1c6f 100644 --- a/mysql-test/suite/rpl/r/rpl_master_pos_wait.result +++ b/mysql-test/suite/rpl/r/rpl_master_pos_wait.result @@ -18,4 +18,26 @@ show slave status; select master_pos_wait('foo', 98); master_pos_wait('foo', 98) NULL +*** MDEV-7130: MASTER_POS_WAIT(log_name,log_pos,timeout,"connection_name") hangs, does not respect the timeout *** +include/stop_slave.inc +reset slave all; +change master 'my_slave' to master_port=MASTER_MYPORT, master_host='127.0.0.1', master_user='root'; +set default_master_connection = 'my_slave'; +include/start_slave.inc +# Call without connection name -- works (expected -1) +select master_pos_wait('master-bin.000001',1000000,1); +master_pos_wait('master-bin.000001',1000000,1) +-1 +set default_master_connection = ''; +# Call for non-existing anonymous connection -- works (expected NULL) +select master_pos_wait('master-bin.000001',1000000,1); +master_pos_wait('master-bin.000001',1000000,1) +NULL +# Call with a valid connection name -- hangs before MDEV-7130 fix (expected -1) +select master_pos_wait('master-bin.000001',1000000,1,"my_slave"); +master_pos_wait('master-bin.000001',1000000,1,"my_slave") +-1 +STOP SLAVE 'my_slave'; +RESET SLAVE 'my_slave' ALL; +change master to master_port=MASTER_MYPORT, master_host='127.0.0.1', master_user='root'; include/rpl_end.inc diff --git a/mysql-test/suite/rpl/t/rpl_master_pos_wait.test b/mysql-test/suite/rpl/t/rpl_master_pos_wait.test index 25e27f62d0a..a3f3ff56464 100644 --- a/mysql-test/suite/rpl/t/rpl_master_pos_wait.test +++ b/mysql-test/suite/rpl/t/rpl_master_pos_wait.test @@ -25,5 +25,36 @@ echo "*** must be NULL ***"; select master_pos_wait('foo', 98); # End of 4.1 tests + + +--echo *** MDEV-7130: MASTER_POS_WAIT(log_name,log_pos,timeout,"connection_name") hangs, does not respect the timeout *** + +--connection slave +--source include/stop_slave.inc +reset slave all; +--replace_result $MASTER_MYPORT MASTER_MYPORT +eval change master 'my_slave' to master_port=$MASTER_MYPORT, master_host='127.0.0.1', master_user='root'; +set default_master_connection = 'my_slave'; +--source include/start_slave.inc + +--echo # Call without connection name -- works (expected -1) +select master_pos_wait('master-bin.000001',1000000,1); + +set default_master_connection = ''; + +--echo # Call for non-existing anonymous connection -- works (expected NULL) +select master_pos_wait('master-bin.000001',1000000,1); + +--echo # Call with a valid connection name -- hangs before MDEV-7130 fix (expected -1) +select master_pos_wait('master-bin.000001',1000000,1,"my_slave"); + +STOP SLAVE 'my_slave'; +RESET SLAVE 'my_slave' ALL; + +--replace_result $MASTER_MYPORT MASTER_MYPORT +eval change master to master_port=$MASTER_MYPORT, master_host='127.0.0.1', master_user='root'; + +# End of 10.0 tests + --let $rpl_only_running_threads= 1 --source include/rpl_end.inc diff --git a/sql/item_func.cc b/sql/item_func.cc index 84559504bbb..0dabd06d423 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -3943,11 +3943,11 @@ longlong Item_master_pos_wait::val_int() } #ifdef HAVE_REPLICATION longlong pos = (ulong)args[1]->val_int(); - longlong timeout = (arg_count==3) ? args[2]->val_int() : 0 ; + longlong timeout = (arg_count>=3) ? args[2]->val_int() : 0 ; String connection_name_buff; LEX_STRING connection_name; Master_info *mi; - if (arg_count == 4) + if (arg_count >= 4) { String *con; if (!(con= args[3]->val_str(&connection_name_buff))) |