Bug #73289 slave_relay_log_info not updated when executing flush logs on master
Submitted: 14 Jul 2014 7:40 Modified: 14 Jul 2014 8:27
Reporter: zhai weixiang (OCA) Email Updates:
Status: Verified Impact on me:
None 
Category:MySQL Server: Replication Severity:S3 (Non-critical)
Version:5.6, 5.6.20, 5.7.4 OS:Any
Assigned to: CPU Architecture:Any

[14 Jul 2014 7:40] zhai weixiang
Description:
With the setting bellow, the slave_relay_log_info was not updated  while executing "FLUSH LOGS" on master

1.set relay_log_purge = 0;
2.set relay_log_info_repository = table
3.set slave_parallel_workers to non-zero value.

How to repeat:
source include/master-slave.inc;
source include/have_binlog_format_row.inc;

connection slave;
stop slave;
set @old_relay_log_info_repository = @@global.relay_log_info_repository;
set global relay_log_info_repository = 'TABLE';
set @old_slave_parallel_workers = @@global.slave_parallel_workers;
set global slave_parallel_workers = 8;
set @old_relay_log_purge = @@global.relay_log_purge;
set global relay_log_purge = 0;
start slave;

connection master;
create table t1 (a int);
insert into t1 values (1);
--sync_slave_with_master

connection slave;
select * from mysql.slave_relay_log_info;

connection master;
flush logs;
--sync_slave_with_master

connection slave;
select * from mysql.slave_relay_log_info;

connection master;
flush logs;
--sync_slave_with_master

connection slave;
select * from mysql.slave_relay_log_info;

connection master;
flush logs;
--sync_slave_with_master

connection slave;
select * from mysql.slave_relay_log_info;

stop slave;
set global relay_log_info_repository = @old_relay_log_info_repository;
set global relay_log_purge = @old_relay_log_purge;
set global slave_parallel_workers = @old_slave_parallel_workers;

start slave;

connection master;
drop table t1;
--sync_slave_with_master

--source include/rpl_end.inc

Suggested fix:
Still debug it.
[14 Jul 2014 8:25] MySQL Verification Team
Hello Zhai,

Thank you for the report and test case.
Verified as described.

Thanks,
Umesh
[14 Jul 2014 8:27] MySQL Verification Team
// 5.6.20

./mtr --mysqld=--binlog_format=row  <test_Case_from_73289>

create table t1 (a int);
insert into t1 values (1);
select * from mysql.slave_relay_log_info;
Number_of_lines Relay_log_name  Relay_log_pos   Master_log_name Master_log_pos  Sql_delay       Number_of_workers       Id
7       ./slave-relay-bin.000003        611     master-bin.000001       447     0       8       1
flush logs;
select * from mysql.slave_relay_log_info;
Number_of_lines Relay_log_name  Relay_log_pos   Master_log_name Master_log_pos  Sql_delay       Number_of_workers       Id
7       ./slave-relay-bin.000003        611     master-bin.000001       447     0       8       1
flush logs;
select * from mysql.slave_relay_log_info;
Number_of_lines Relay_log_name  Relay_log_pos   Master_log_name Master_log_pos  Sql_delay       Number_of_workers       Id
7       ./slave-relay-bin.000003        611     master-bin.000001       447     0       8       1
flush logs;
select * from mysql.slave_relay_log_info;
Number_of_lines Relay_log_name  Relay_log_pos   Master_log_name Master_log_pos  Sql_delay       Number_of_workers       Id
7       ./slave-relay-bin.000003        611     master-bin.000001       447     0       8       1
[14 Jul 2014 8:27] zhai weixiang
If relay_log_info_repository is setting to FILE, then the relay log info will be logged in time
[14 Jul 2014 8:31] MySQL Verification Team
// 5.7.4

create table t1 (a int);
insert into t1 values (1);
select * from mysql.slave_relay_log_info;
Number_of_lines Relay_log_name  Relay_log_pos   Master_log_name Master_log_pos  Sql_delay       Number_of_workers       Id
7       ./slave-relay-bin.000003        587     master-bin.000001       423     0       8       1
flush logs;
select * from mysql.slave_relay_log_info;
Number_of_lines Relay_log_name  Relay_log_pos   Master_log_name Master_log_pos  Sql_delay       Number_of_workers       Id
7       ./slave-relay-bin.000003        587     master-bin.000001       423     0       8       1
flush logs;
select * from mysql.slave_relay_log_info;
Number_of_lines Relay_log_name  Relay_log_pos   Master_log_name Master_log_pos  Sql_delay       Number_of_workers       Id
7       ./slave-relay-bin.000003        587     master-bin.000001       423     0       8       1
flush logs;
select * from mysql.slave_relay_log_info;
Number_of_lines Relay_log_name  Relay_log_pos   Master_log_name Master_log_pos  Sql_delay       Number_of_workers       Id
7       ./slave-relay-bin.000003        587     master-bin.000001       423     0       8       1
stop slave;