• unknown's avatar
    BUG#20697 slave fails to rollback replicated transaction hang over innodb_lock_wait_timeou · d6bc2d60
    unknown authored
    Transaction on the slave sql thread got blocked against a slave's mysqld local ta's
    lock. Since the default, slave-transaction-retries=10, there was replaying of the 
    replicated ta. That failed because of a new started from 5.0.13 policy not to rollback
    a timed-out transaction. Effectively the first round of a timed-out ta becomes committed
    by the replaying's first "BEGIN".
    
    It was decided to backport already existed method working in 5.1 implemented in
    bug #16228 for handling symmetrical deadlock problem. That patch introduced end_trans
    execution whenever a replicated ta deadlocks or timed-out.
    
    Note, that this solution can be practically suboptimal - in the light of the changed behavior
    due to timeout we still could replay only the last statement -  only with a high rate of timeouting
    replicated transactions.
    
    
    mysql-test/r/rpl_deadlock.result:
      results changed
    mysql-test/t/rpl_deadlock.test:
      Refining the timeout part of the test to display that the timed-out transaction
      is rolled back prior its replaying by slave sql.
      Non-zero select's count would mean the first round work became persistent - wrong.
    sql/slave.cc:
      applying bug#16228 fix, approbated for deadlock use case in 5.1, almost verbatim. 
      Another alternative to replay only the offending statement requires significant
      efforts, incl design work.
    d6bc2d60
slave.cc 167 KB