BUG#13861 - START SLAVE UNTIL may stop 1 evnt too late if
log-slave-updates and circul repl After merge fixes. mysql-test/suite/rpl/t/rpl_dual_pos_advance-slave.opt: Rename: mysql-test/t/rpl_dual_pos_advance-slave.opt -> mysql-test/suite/rpl/t/rpl_dual_pos_advance-slave.opt mysql-test/include/wait_for_slave_sql_to_stop.inc: Do not change connection if it was requested by caller (needed for circular replication tests). mysql-test/suite/rpl/t/rpl_dual_pos_advance.test: Let include/wait_for_slave_sql_to_stop.inc know that we do not want to change connection to slave. sql/rpl_rli.cc: After merge fix. sql/rpl_rli.h: After merge fix. sql/slave.cc: After merge fix.
This commit is contained in:
parent
eec647badb
commit
83bcd5dfab
@ -9,7 +9,10 @@
|
|||||||
# sql threads to stop
|
# sql threads to stop
|
||||||
# 3) If loops too long die.
|
# 3) If loops too long die.
|
||||||
####################################################
|
####################################################
|
||||||
connection slave;
|
if (!$keep_connection)
|
||||||
|
{
|
||||||
|
connection slave;
|
||||||
|
}
|
||||||
let $row_number= 1;
|
let $row_number= 1;
|
||||||
let $run= 1;
|
let $run= 1;
|
||||||
let $counter= 300;
|
let $counter= 300;
|
||||||
|
@ -12,6 +12,7 @@ source include/have_innodb.inc;
|
|||||||
|
|
||||||
# set up "dual head"
|
# set up "dual head"
|
||||||
|
|
||||||
|
let $keep_connection= 1;
|
||||||
connection slave;
|
connection slave;
|
||||||
reset master;
|
reset master;
|
||||||
|
|
||||||
@ -67,11 +68,11 @@ connection master;
|
|||||||
start slave until master_log_file="slave-bin.000001",master_log_pos=195;
|
start slave until master_log_file="slave-bin.000001",master_log_pos=195;
|
||||||
|
|
||||||
# wait until it's started (the position below is the start of "CREATE
|
# wait until it's started (the position below is the start of "CREATE
|
||||||
# TABLE t2") (otherwise wait_for_slave_to_stop may return at once)
|
# TABLE t2") (otherwise wait_for_slave_sql_to_stop may return at once)
|
||||||
|
|
||||||
select master_pos_wait("slave-bin.000001",137);
|
select master_pos_wait("slave-bin.000001",137);
|
||||||
|
|
||||||
--source include/wait_for_slave_to_stop.inc
|
--source include/wait_for_slave_sql_to_stop.inc
|
||||||
|
|
||||||
# then BUG#13861 causes t3 to show up below (because stopped too
|
# then BUG#13861 causes t3 to show up below (because stopped too
|
||||||
# late).
|
# late).
|
||||||
@ -80,12 +81,12 @@ show tables;
|
|||||||
|
|
||||||
# ensure that we do not break set @a=1; insert into t3 values(@a);
|
# ensure that we do not break set @a=1; insert into t3 values(@a);
|
||||||
start slave until master_log_file="slave-bin.000001",master_log_pos=438;
|
start slave until master_log_file="slave-bin.000001",master_log_pos=438;
|
||||||
--source include/wait_for_slave_to_stop.inc
|
--source include/wait_for_slave_sql_to_stop.inc
|
||||||
select * from t3;
|
select * from t3;
|
||||||
|
|
||||||
# ensure that we do not break transaction
|
# ensure that we do not break transaction
|
||||||
start slave until master_log_file="slave-bin.000001",master_log_pos=663;
|
start slave until master_log_file="slave-bin.000001",master_log_pos=663;
|
||||||
--source include/wait_for_slave_to_stop.inc
|
--source include/wait_for_slave_sql_to_stop.inc
|
||||||
select * from t3;
|
select * from t3;
|
||||||
|
|
||||||
start slave;
|
start slave;
|
||||||
|
@ -955,6 +955,11 @@ err:
|
|||||||
Check if condition stated in UNTIL clause of START SLAVE is reached.
|
Check if condition stated in UNTIL clause of START SLAVE is reached.
|
||||||
SYNOPSYS
|
SYNOPSYS
|
||||||
Relay_log_info::is_until_satisfied()
|
Relay_log_info::is_until_satisfied()
|
||||||
|
master_beg_pos position of the beginning of to be executed event
|
||||||
|
(not log_pos member of the event that points to the
|
||||||
|
beginning of the following event)
|
||||||
|
|
||||||
|
|
||||||
DESCRIPTION
|
DESCRIPTION
|
||||||
Checks if UNTIL condition is reached. Uses caching result of last
|
Checks if UNTIL condition is reached. Uses caching result of last
|
||||||
comparison of current log file name and target log file name. So cached
|
comparison of current log file name and target log file name. So cached
|
||||||
@ -979,7 +984,7 @@ err:
|
|||||||
false - condition not met
|
false - condition not met
|
||||||
*/
|
*/
|
||||||
|
|
||||||
bool Relay_log_info::is_until_satisfied()
|
bool Relay_log_info::is_until_satisfied(my_off_t master_beg_pos)
|
||||||
{
|
{
|
||||||
const char *log_name;
|
const char *log_name;
|
||||||
ulonglong log_pos;
|
ulonglong log_pos;
|
||||||
@ -990,7 +995,7 @@ bool Relay_log_info::is_until_satisfied()
|
|||||||
if (until_condition == UNTIL_MASTER_POS)
|
if (until_condition == UNTIL_MASTER_POS)
|
||||||
{
|
{
|
||||||
log_name= group_master_log_name;
|
log_name= group_master_log_name;
|
||||||
log_pos= group_master_log_pos;
|
log_pos= master_beg_pos;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{ /* until_condition == UNTIL_RELAY_POS */
|
{ /* until_condition == UNTIL_RELAY_POS */
|
||||||
|
@ -296,7 +296,7 @@ public:
|
|||||||
void close_temporary_tables();
|
void close_temporary_tables();
|
||||||
|
|
||||||
/* Check if UNTIL condition is satisfied. See slave.cc for more. */
|
/* Check if UNTIL condition is satisfied. See slave.cc for more. */
|
||||||
bool is_until_satisfied();
|
bool is_until_satisfied(my_off_t master_beg_pos);
|
||||||
inline ulonglong until_pos()
|
inline ulonglong until_pos()
|
||||||
{
|
{
|
||||||
return ((until_condition == UNTIL_MASTER_POS) ? group_master_log_pos :
|
return ((until_condition == UNTIL_MASTER_POS) ? group_master_log_pos :
|
||||||
|
@ -1990,7 +1990,7 @@ static int exec_relay_log_event(THD* thd, Relay_log_info* rli)
|
|||||||
This tests if the position of the beginning of the current event
|
This tests if the position of the beginning of the current event
|
||||||
hits the UNTIL barrier.
|
hits the UNTIL barrier.
|
||||||
*/
|
*/
|
||||||
if (rli->until_condition != RELAY_LOG_INFO::UNTIL_NONE &&
|
if (rli->until_condition != Relay_log_info::UNTIL_NONE &&
|
||||||
rli->is_until_satisfied((rli->is_in_group() || !ev->log_pos) ?
|
rli->is_until_satisfied((rli->is_in_group() || !ev->log_pos) ?
|
||||||
rli->group_master_log_pos :
|
rli->group_master_log_pos :
|
||||||
ev->log_pos - ev->data_written))
|
ev->log_pos - ev->data_written))
|
||||||
@ -2648,7 +2648,7 @@ Slave SQL thread aborted. Can't execute init_slave query");
|
|||||||
do not want to wait for next event in this case.
|
do not want to wait for next event in this case.
|
||||||
*/
|
*/
|
||||||
pthread_mutex_lock(&rli->data_lock);
|
pthread_mutex_lock(&rli->data_lock);
|
||||||
if (rli->until_condition != RELAY_LOG_INFO::UNTIL_NONE &&
|
if (rli->until_condition != Relay_log_info::UNTIL_NONE &&
|
||||||
rli->is_until_satisfied(rli->group_master_log_pos))
|
rli->is_until_satisfied(rli->group_master_log_pos))
|
||||||
{
|
{
|
||||||
char buf[22];
|
char buf[22];
|
||||||
|
Loading…
x
Reference in New Issue
Block a user