• Daniele Sciascia's avatar
    MDEV-32549 Cluster inconsistent after SAVEPOINT is rolled back · 362c0950
    Daniele Sciascia authored
    Attempting to set a SAVEPOINT when one of the involved storage engines
    does not support savepoints, raises an error, and results in statement
    rollback. If Galera is enabled with binlog emulation, the above
    scenario was not handled correctly, and resulted in cluster wide
    inconsistency.
    
    The problem was in wsrep_register_binlog_handler(), which is called
    towards the beginning of SAVEPOINT execution. This function is
    supposed to mark the beginning of statement position in trx cache
    through `set_prev_position()`. However, it did so only on condition
    that `get_prev_position()` returns `MY_OFF_T_UNDEF`.
    This before statement position is typically reset to undefined at the
    end of statement in `binlog_commit()` / `binlog_rollback()`.
    However that's not the case with Galera and binlog emulation, for
    which binlog commit / rollback hooks are not called due to the
    optimization that avoids internal 2PC (MDEV-16509).
    Signed-off-by: default avatarJulius Goryavsky <julius.goryavsky@mariadb.com>
    362c0950
log.cc 337 KB