Skip to content

Commit df9b8ae

Browse files
committed
Merge MDEV-8193 into 10.1
Conflicts: sql/rpl_rli.cc
2 parents 6f302d9 + 51eaa7f commit df9b8ae

File tree

4 files changed

+83
-3
lines changed

4 files changed

+83
-3
lines changed
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
include/master-slave.inc
2+
[connection master]
3+
include/stop_slave_sql.inc
4+
CALL mtr.add_suppression("Statement is unsafe because it uses a system function that may return a different value on the slave");
5+
create table t1 (i int);
6+
insert into t1 values (1),(2);
7+
insert into t1 values (3),(4);
8+
insert into t1 select i+20+0*sleep(1) from t1 where i=1;
9+
Warnings:
10+
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it uses a system function that may return a different value on the slave.
11+
flush logs;
12+
insert into t1 values (5),(6);
13+
insert into t1 values (7),(8);
14+
insert into t1 values (9),(10);
15+
insert into t1 values (11),(12);
16+
insert into t1 values (13),(14);
17+
insert into t1 values (15),(16);
18+
set global slave_parallel_threads = 1;
19+
start slave until master_log_file='MASTER_FILE', master_log_pos=MASTER_POS;
20+
drop table t1;
21+
include/stop_slave_io.inc
22+
set global slave_parallel_threads = DEFAULT;
23+
drop table t1;
24+
include/rpl_end.inc
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
--source include/master-slave.inc
2+
--source include/have_binlog_format_statement.inc
3+
4+
--connection slave
5+
6+
--source include/stop_slave_sql.inc
7+
8+
--connection master
9+
10+
CALL mtr.add_suppression("Statement is unsafe because it uses a system function that may return a different value on the slave");
11+
create table t1 (i int);
12+
insert into t1 values (1),(2);
13+
insert into t1 values (3),(4);
14+
# This sleep() helps trigger the failure more reliably.
15+
insert into t1 select i+20+0*sleep(1) from t1 where i=1;
16+
flush logs;
17+
insert into t1 values (5),(6);
18+
insert into t1 values (7),(8);
19+
insert into t1 values (9),(10);
20+
21+
--let $master_file = query_get_value(show master status,File,1)
22+
--let $master_pos = query_get_value(show master status,Position,1)
23+
24+
insert into t1 values (11),(12);
25+
insert into t1 values (13),(14);
26+
insert into t1 values (15),(16);
27+
28+
--connection slave
29+
30+
set global slave_parallel_threads = 1;
31+
--replace_result $master_file MASTER_FILE $master_pos MASTER_POS
32+
eval start slave until master_log_file='$master_file', master_log_pos=$master_pos;
33+
34+
--let $show_statement = SHOW SLAVE STATUS
35+
--let $field = Slave_SQL_Running
36+
--let $condition = = 'No'
37+
--let $wait_timeout = 10
38+
39+
--source include/wait_show_condition.inc
40+
41+
if (`select COUNT(*) <> 11 from t1`)
42+
{
43+
SELECT * FROM t1;
44+
query_vertical show slave status;
45+
die "Wrong number of rows in the table";
46+
}
47+
48+
drop table t1;
49+
--source include/stop_slave_io.inc
50+
set global slave_parallel_threads = DEFAULT;
51+
52+
--connection master
53+
drop table t1;
54+
55+
--let $rpl_only_running_threads= 1
56+
--source include/rpl_end.inc

sql/rpl_parallel.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,6 @@ handle_queued_pos_update(THD *thd, rpl_parallel_thread::queued_event *qev)
9494
if (cmp < 0)
9595
{
9696
strcpy(rli->group_master_log_name, qev->future_event_master_log_name);
97-
rli->notify_group_master_log_name_update();
9897
rli->group_master_log_pos= qev->future_event_master_log_pos;
9998
}
10099
else if (cmp == 0
@@ -2110,6 +2109,7 @@ rpl_parallel::do_event(rpl_group_info *serial_rgi, Log_event *ev,
21102109
{
21112110
memcpy(rli->future_event_master_log_name,
21122111
rev->new_log_ident, rev->ident_len+1);
2112+
rli->notify_group_master_log_name_update();
21132113
}
21142114
}
21152115

sql/rpl_rli.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -993,7 +993,6 @@ void Relay_log_info::inc_group_relay_log_pos(ulonglong log_pos,
993993
if (cmp < 0)
994994
{
995995
strcpy(group_master_log_name, rgi->future_event_master_log_name);
996-
notify_group_master_log_name_update();
997996
group_master_log_pos= log_pos;
998997
}
999998
else if (group_master_log_pos < log_pos)
@@ -1209,7 +1208,8 @@ bool Relay_log_info::is_until_satisfied(my_off_t master_beg_pos)
12091208

12101209
if (until_condition == UNTIL_MASTER_POS)
12111210
{
1212-
log_name= group_master_log_name;
1211+
log_name= (mi->using_parallel() ?
1212+
future_event_master_log_name : group_master_log_name);
12131213
log_pos= master_beg_pos;
12141214
}
12151215
else

0 commit comments

Comments
 (0)