• Marko Mäkelä's avatar
    Backport MDEV-13430 recovery improvement to MariaDB 10.2 · 6f623907
    Marko Mäkelä authored
    If the latest InnoDB redo log checkpoint was stored in the
    first checkpoint slot and not the second one, InnoDB would
    incorrectly set log_sys->log.lsn to the previous checkpoint.
    
    It is possible that this logic error did not exist before
    commit 86927cc7, which
    removed traces of multiple InnoDB redo logs, to prepare for
    MDEV-12548 (Mariabackup for MariaDB 10.2). In the worst case,
    this error could mean that InnoDB unnecessarily fails to
    recover from redo log when the last-but-one checkpoint was
    overwritten, but the last checkpoint is intact.
    
    recv_find_max_checkpoint(), recv_find_max_checkpoint_0():
    Do not overwrite the fields of log_sys->log with the information
    of an older checkpoint.
    
    recv_find_max_checkpoint(): Do not return DB_SUCCESS on an error.
    
    recv_recovery_from_checkpoint_start(): Return early if the log is
    in a version-tagged format but not in the latest format. (In this case,
    the log must be logically empty, and there is nothing to apply.)
    6f623907
log0recv.cc 97.1 KB