Bug #28839 Errors in strict mode silently stop SQL thread if --slave-skip-errors exists
Submitted: 1 Jun 2007 14:50 Modified: 23 Jul 2007 19:44
Reporter: Domas Mituzas Email Updates:
Status: Closed Impact on me:
None 
Category:MySQL Server: Replication Severity:S1 (Critical)
Version:5.0-bk, 5.1-bk OS:Any
Assigned to: Alexey Botchkov CPU Architecture:Any

[1 Jun 2007 14:50] Domas Mituzas
Description:
If there is failing event, that has ignored error but is in STRICT_TRANS_TABLES mode, replication will stop without mentioning the problem in error log or 'SHOW SLAVE STATUS'

How to repeat:
slave running with --slave-skip-errors=1062,1582

mysql> insert into t1 select * from t2;
ERROR 1062 (23000): Duplicate entry '1' for key 1

mysql> delete from t1 where @@server_id=77;
Query OK, 2 rows affected (0.03 sec)

mysql> set sql_mode=strict_trans_tables;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into t1 select * from t2;
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

results in only this line in error log on slave:
070601 17:45:30 [Note] Slave SQL thread exiting, replication stopped in log 'flute-bin.000007' at position 94

and SHOW SLAVE STATUS shows:
             Slave_IO_Running: Yes
            Slave_SQL_Running: No
                   Last_Errno: 0
                   Last_Error: 

Suggested fix:
be verbose about failure and/or continue the work.
don't kill the slave thread.
[19 Jun 2007 7:35] Domas Mituzas
testcase

Attachment: rpl_bug28839.test (, text), 349 bytes.

[19 Jun 2007 7:36] Domas Mituzas
slave option file for testcase

Attachment: rpl_bug28839-slave.opt (, text), 29 bytes.

[19 Jun 2007 11:15] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/29096

ChangeSet@1.2493, 2007-06-19 15:15:40+05:00, holyfoot@mysql.com +2 -0
  Bug #28839 Errors in strict mode silently stop SQL thread if --slave-skip-errors exists.
  
  slave_sql thread calls thd->clear_error() to force error to be ignored,
  though this method didn't clear thd->killed state, what causes
  slave_sql thread to stop.
  thd->killed clearing added to THD::clear_error as a fix
[19 Jun 2007 20:00] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/29131

ChangeSet@1.2493, 2007-06-20 00:00:33+05:00, holyfoot@mysql.com +4 -0
  Bug #28839 Errors in strict mode silently stop SQL thread if --slave-skip-errors exists.
  
  slave_sql thread calls thd->clear_error() to force error to be ignored,
  though this method didn't clear thd->killed state, what causes
  slave_sql thread to stop.
  thd->killed clearing added to THD::clear_error as a fix
[20 Jun 2007 10:05] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/29174

ChangeSet@1.2493, 2007-06-20 14:05:49+05:00, holyfoot@mysql.com +3 -0
  Bug #28839 Errors in strict mode silently stop SQL thread if --slave-skip-errors exists.
  
  slave_sql thread calls thd->clear_error() to force error to be ignored,
  though this method didn't clear thd->killed state, what causes
  slave_sql thread to stop.
  
  clear thd->killed state if we ignore an error
[25 Jun 2007 21:49] Bugs System
Pushed into 5.1.21-beta
[25 Jun 2007 21:51] Bugs System
Pushed into 5.0.46
[23 Jul 2007 19:44] Paul DuBois
Noted in 5.0.46, 5.1.21 changelogs.

In strict SQL mode, errors silently stopped the SQL thread even for
errors named using the --slave-skip-errors option.