• Jan Lindström's avatar
    MDEV-15740: InnoDB does not flush redo log when it shoul · 1d56d875
    Jan Lindström authored
    During database recovery, a transaction with wsrep XID is
    recovered from InnoDB in prepared state. However, when the
    transaction is looked up with trx_get_trx_by_xid() in
    innobase_commit_by_xid(), trx->xid gets cleared in
    trx_get_trx_by_xid_low() and commit time serialization history
    write does not update the wsrep XID in trx sys header for
    that recovered trx. As a result the transaction gets
    committed during recovery but the wsrep position does not
    get updated appropriately.
    
    As a fix, we preserve trx->xid for Galera over transaction
    commit in recovery phase.
    
    Fix authored by: Teemu Ollakka (GaleraCluster) and Marko Mäkelä.
    
    	modified:   mysql-test/suite/galera/disabled.def
    	modified:   mysql-test/suite/galera/r/galera_gcache_recover_full_gcache.result
    	modified:   mysql-test/suite/galera/r/galera_gcache_recover_manytrx.result
    	modified:   mysql-test/suite/galera/t/galera_gcache_recover_full_gcache.test
    	modified:   mysql-test/suite/galera/t/galera_gcache_recover_manytrx.test
    	modified:   storage/innobase/trx/trx0trx.cc
    	modified:   storage/xtradb/trx/trx0trx.cc
    1d56d875
trx0trx.cc 62.4 KB