← Back to team overview

maria-developers team mailing list archive

Re: [Commits] Rev 4259: MDEV-6120: When slave stops with error, error message should indicate the failing GTID in http://bazaar.launchpad.net/~maria-captains/maria/10.0

 

Hi Kristian,

looks good. One minor question below.

On Thu, Jun 19, 2014 at 02:50:44PM +0200, knielsen@xxxxxxxxxxxxxxx wrote:
> At http://bazaar.launchpad.net/~maria-captains/maria/10.0
> 
> ------------------------------------------------------------
> revno: 4259
> revision-id: knielsen@xxxxxxxxxxxxxxx-20140619125043-acw2gx7rw90y3vqp
> parent: svoj@xxxxxxxxxxx-20140618141504-kqq6ws9gm93r2b2d
> committer: Kristian Nielsen <knielsen@xxxxxxxxxxxxxxx>
> branch nick: work-10.0
> timestamp: Thu 2014-06-19 14:50:43 +0200
> message:
>   MDEV-6120: When slave stops with error, error message should indicate the failing GTID
>   
>   If replication breaks in GTID mode, it is not trivial to determine the GTID of
>   the failing event group. This is a problem, as such GTID is needed eg. to
>   explicitly set @@gtid_slave_pos to skip to after that event group, or to
>   compare errors on different servers, etc.
>   
>   Fix by ensuring that relevant slave errors logged to the error log include the
>   GTID of the event group containing the problem event.
...skip...

> === added file 'mysql-test/suite/rpl/t/rpl_gtid_errorlog.test'
> --- a/mysql-test/suite/rpl/t/rpl_gtid_errorlog.test	1970-01-01 00:00:00 +0000
> +++ b/mysql-test/suite/rpl/t/rpl_gtid_errorlog.test	2014-06-19 12:50:43 +0000
> @@ -0,0 +1,94 @@
> +--source include/have_debug.inc
> +--source include/master-slave.inc
> +
> +--echo *** Test MDEV-6120, output of current GTID when a replication error is logged to the errorlog ***
> +--connection master
> +CREATE TABLE t1(a INT PRIMARY KEY);
> +--sync_slave_with_master
> +
> +--connection slave
> +--source include/stop_slave.inc
> +CHANGE MASTER TO master_use_gtid=slave_pos;
> +
> +--connection master
> +INSERT INTO t1 VALUES (1);
> +SET gtid_seq_no=100;
> +INSERT INTO t1 VALUES (2);
> +INSERT INTO t1 VALUES (3);
> +INSERT INTO t1 VALUES (4);
> +--save_master_pos
> +
> +--connection slave
> +SET sql_log_bin=0;
> +INSERT INTO t1 VALUES (2);
> +SET sql_log_bin=1;
> +
> +START SLAVE;
> +--let $slave_sql_errno=1062
> +--source include/wait_for_slave_sql_error.inc
> +
> +--source include/stop_slave.inc
> +# Skip the problem event from the master.
> +SET GLOBAL gtid_slave_pos= "0-1-100";
> +--source include/start_slave.inc
> +--sync_with_master
> +
> +SELECT * FROM t1 ORDER BY a;
> +
> +--connection master
> +
> +SET @dbug_save= @@debug_dbug;
> +SET debug_dbug= '+d,incident_database_resync_on_replace';
> +REPLACE INTO t1 VALUES (5);
> +SET debug_dbug= @dbug_save;
> +--save_master_pos
> +
> +--connection slave
> +--let $slave_sql_errno=1590
> +--source include/wait_for_slave_sql_error.inc
> +# ToDo no need to switch off GTID once MDEV-4937 is fixed
> +--source include/stop_slave.inc
> +CHANGE MASTER TO master_use_gtid=no;
> +SET sql_slave_skip_counter=1;
> +--source include/start_slave.inc
> +--sync_with_master
> +--source include/stop_slave.inc
> +CHANGE MASTER TO master_use_gtid=slave_pos;
> +--source include/start_slave.inc
> +
> +SELECT * FROM t1 ORDER BY a;
> +
> +
> +# Check error log for correct messages.
> +let $log_error_= `SELECT @@GLOBAL.log_error`;
> +if(!$log_error_)
> +{
> +    # MySQL Server on windows is started with --console and thus
> +    # does not know the location of its .err log, use default location
> +    let $log_error_ = $MYSQLTEST_VARDIR/log/mysqld.2.err;
> +}
> +let LOG_ERROR=$log_error_;
> +
> +perl;
> +  use strict;
> +  use warnings;
> +  my $log_error= $ENV{'LOG_ERROR'} or die "LOG_ERROR not set";
> +  open(FILE, "<", "$log_error") or die("Unable to open $log_error: $!\n");
> +  my $found_dup= 0;
> +  my $found_incident= 0;
> +  while (<FILE>) {
> +    $found_dup= 1
> +      if /Slave SQL: Error 'Duplicate entry .* on query\. .*Query: '.*', Gtid 0-1-100, Internal MariaDB error code:/
> +      or /Slave SQL: Could not execute Write_rows.*table test.t1; Duplicate entry.*, Gtid 0-1-100, Internal MariaDB error/
> +      ;
> +    $found_incident= 1
> +      if /Slave SQL: The incident LOST_EVENTS occured on the master\. Message: <none>, Internal MariaDB error code: 1590/;
> +  }
> +  print "Duplicate key found: $found_dup; incident found: $found_incident\n";
> +  close(FILE);
> +EOF
> +
> +--connection master
> +DROP TABLE t1;
> +
> +--source include/rpl_end.inc
Why didn't you like include/search_pattern_in_file.inc? It should perfectly able
to match your patterns.

...skip...

Regards,
Sergey


Follow ups