• Thirunarayanan Balathandayuthapani's avatar
    MDEV-19229 Allow innodb_undo_tablespaces to be changed after database creation · baf276e6
    Thirunarayanan Balathandayuthapani authored
    trx_sys_t::undo_log_nonempty: Set to true if there are undo logs
    to rollback and purge.
    
    The algorithm for re-creating the undo tablespace when
    trx_sys_t::undo_log_nonempty is disabled:
    
    1) trx_sys_t::reset_page(): Reset the TRX_SYS page and assign all
    rollback segment slots from 1..127 to FIL_NULL
    
    2) Free the rollback segment header page of system tablespace
    for the slots 1..127
    
    3) Update the binlog and WSREP information in system tablespace
    rollback segment header
    Step (1), (2) and Step (3) should happen atomically within a
    single mini-transaction.
    
    4) srv_undo_delete_old_tablespaces(): Delete the old undo tablespaces
    present in the undo log directory
    
    5) Make checkpoint to get rid of old undo log tablespaces redo logs
    
    6) Assign new start space id for the undo log tablespaces
    
    7) Re-create the specified undo log tablespaces. InnoDB uses same
    mtr for this one and step (6)
    
    8) Make checkpoint again, so that server or mariabackup
    can read the undo log tablespace page0 before applying
    the redo logs
    
    srv_undo_tablespaces_reinit(): Recreate the undo log tablespaces.
    It does reset trx_sys page, delete the old undo tablespaces,
    update the binlog offset, write set replication checkpoint
    in system rollback segment page
    
    trx_rseg_update_binlog_offset(): Added 2 new parameters to pass
    binlog file name and binlog offset
    
    trx_rseg_array_init(): Return error if the rollback segment
    slot points to non-existent tablespace
    
    srv_undo_tablespaces_init(): Added new parameter mtr
    to initialize all undo tablespaces
    
    trx_assign_rseg_low(): Allow the transaction to use the rollback
    segment slots(1..127) even if InnoDB failed to change to the
    requested innodb_undo_tablespaces=0
    
    srv_start(): Override the user specified value of
    innodb_undo_tablespaces variable with already existing actual
    undo tablespaces
    
    wf_incremental_process(): Detects whether TRX_SYS page has been
    modified since last backup. If it is then incremental backup
    fails and throws the information about taking full backup again
    
    xb_assign_undo_space_start(): Removed the function. Because
    undo001 has first undo space id value in page0
    
    Added test case to test the scenario during startup and mariabackup
    incremental process too.
    
    Reviewed-by : Marko Mäkelä
    Tested-by : Matthias Leich
    baf276e6
undo_truncate.test 2.27 KB