• unknown's avatar
    Fix for BUG#2083 · e97722e4
    unknown authored
    "EE_ error codes (EE_DELETE, EE_WRITE) end up in the binlog, making slave stop".
    The problem was that during execution of the command on the master, an error
    can occur (for example, not space left on device, then mysqld waits and when
    there is space it completes successfully: so finally it worked but the error
    EE_WRITE remains in thd->net.last_errno and thd->net.last_error).
    To know if finally the command succeeded, we test the 'error' variable in
    every place, and if it shows no failure we reset thd->net.last_err* using
    the function THD::clear_error() which is backported from 4.1.
    A new test to see if now only real errors get to the binlog (note: the test
    uses "rm").
    
    Also a bit of memory free/alloc saving in log_event.cc (do not free the whole
    mem_root after every query in the slave SQL thread: we can keep the initial
    block of it; which will be freed when the thread terminates).
    
    
    sql/log_event.cc:
      In the slave SQL thread, it's a waste to free the initial block of the mem_root
      after every query. We can instead keep it. It will be freed when the thread
      terminates (in THD::~THD()).
    sql/sql_acl.cc:
      clear the error in thd->net.last_errno as there was no error
    sql/sql_base.cc:
      clear the error in thd->net.last_errno as there was no error
    sql/sql_class.h:
      Backport of THD::clear_error() from 4.1:
      clears the error in thd->net.last_errno
    sql/sql_db.cc:
      clear the error in thd->net.last_errno as there was no error
    sql/sql_delete.cc:
      clear the error in thd->net.last_errno as there was no error
    sql/sql_insert.cc:
      clear the error in thd->net.last_errno as there was no error
    sql/sql_parse.cc:
      clear the error in thd->net.last_errno as there was no error
    sql/sql_rename.cc:
      clear the error in thd->net.last_errno as there was no error
    sql/sql_table.cc:
      clear the error in thd->net.last_errno as there was no error
    sql/sql_update.cc:
      clear the error in thd->net.last_errno as there was no error
    e97722e4
rpl_EE_error.test 865 Bytes