Skip to content

Commit 244f043

Browse files
committed
Merge MDEV-8193 into 10.0
2 parents 0ce0b88 + 51eaa7f commit 244f043

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
@@ -95,7 +95,6 @@ handle_queued_pos_update(THD *thd, rpl_parallel_thread::queued_event *qev)
9595
if (cmp < 0)
9696
{
9797
strcpy(rli->group_master_log_name, qev->future_event_master_log_name);
98-
rli->notify_group_master_log_name_update();
9998
rli->group_master_log_pos= qev->future_event_master_log_pos;
10099
}
101100
else if (cmp == 0
@@ -2065,6 +2064,7 @@ rpl_parallel::do_event(rpl_group_info *serial_rgi, Log_event *ev,
20652064
{
20662065
memcpy(rli->future_event_master_log_name,
20672066
rev->new_log_ident, rev->ident_len+1);
2067+
rli->notify_group_master_log_name_update();
20682068
}
20692069
}
20702070

sql/rpl_rli.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -996,7 +996,6 @@ void Relay_log_info::inc_group_relay_log_pos(ulonglong log_pos,
996996
if (cmp < 0)
997997
{
998998
strcpy(group_master_log_name, rgi->future_event_master_log_name);
999-
notify_group_master_log_name_update();
1000999
group_master_log_pos= log_pos;
10011000
}
10021001
else if (group_master_log_pos < log_pos)
@@ -1218,7 +1217,8 @@ bool Relay_log_info::is_until_satisfied(THD *thd, Log_event *ev)
12181217
if (ev && ev->server_id == (uint32) global_system_variables.server_id &&
12191218
!replicate_same_server_id)
12201219
DBUG_RETURN(FALSE);
1221-
log_name= group_master_log_name;
1220+
log_name= (opt_slave_parallel_threads > 0 ?
1221+
future_event_master_log_name : group_master_log_name);
12221222
log_pos= ((!ev)? group_master_log_pos :
12231223
(get_flag(IN_TRANSACTION) || !ev->log_pos) ?
12241224
group_master_log_pos : ev->log_pos - ev->data_written);

0 commit comments

Comments
 (0)