• Marko Mäkelä's avatar
    MDEV-25975 innodb_disallow_writes causes shutdown to hang · e9735a81
    Marko Mäkelä authored
    We will remove the parameter innodb_disallow_writes because it is badly
    designed and implemented. The parameter was never allowed at startup.
    It was only internally used by Galera snapshot transfer.
    If a user executed
    SET GLOBAL innodb_disallow_writes=ON;
    the server could hang even on subsequent read operations.
    
    During Galera snapshot transfer, we will block writes
    to implement an rsync friendly snapshot, as follows:
    
    sst_flush_tables() will acquire a global lock by executing
    FLUSH TABLES WITH READ LOCK, which will block any writes
    at the high level.
    
    sst_disable_innodb_writes(), invoked via ha_disable_internal_writes(true),
    will suspend or disable InnoDB background tasks or threads that could
    initiate writes. As part of this, log_make_checkpoint() will be invoked
    to ensure that anything in the InnoDB buf_pool.flush_list will be written
    to the data files. This has the nice side effect that the Galera joiner
    will avoid crash recovery.
    
    The changes to sql/wsrep.cc and to the tests are based on a prototype
    that was developed by Jan Lindström.
    
    Reviewed by: Jan Lindström
    e9735a81
srv0srv.cc 85.7 KB