• sjaakola's avatar
    MDEV-24845 Oddities around innodb_fatal_semaphore_wait_threshold and global.innodb_disallow_writes · 9b2fa2ae
    sjaakola authored
    This commit adds a mtr test for reproducing a test scenario where despite of
    innodb_disallow_writes blocking, writes to file system can still happen.
    
    The test launches a garbd node, which triggers one of the cluster node to switch to
    SST donor state. In this state, all disk activity should be halted, and e.g.
    innodb_disallow_writes has been set. The test records md5sum aggregate over mariadb
    data directory when the node enters the donor state, and records another md5sum
    when the node leaves the donor state. If there is no IO activity in data directory, these
    hashes should be equal.
    
    For this test, the Donor state processing, has beeen instrumented so that, SST donor thread can be
    stopped when entering the donor state. The test uses this new dbug sync point,
    to control when to record the md5sums.
    
    New SST script was added: wsrep_sst_backup, and garbd uses backup method to lauch the donor
    node to call this script, and to enter in donor state.
    
    The backup script could be later extended as general purpose backup method for the cluster.
    
    This commit fixes also one race condition happening in wsrep_sst_rsync, like this:
    * wsrep_rsync_sst script requests for flush tables,
      and then waits in a loop until mariadbd has created file tables_flushed,
      as confirmation that FLUSH TABLES has completed
    * mariadbd's SST donor thread, wakes for the flush table request and then performs FTWRL,
      and after this it creates the tables_flushed file
    * note that SST script will now continue to startup rsync sending
    * mariadbd's SST donor thread now calls for sst_disallow_writes(),
      so that innodb would setup disk IO blockage, however rsyncing may already be ongoing at this point
    
    This race condition is fixed in this commit, by performing all disk IO blocking before
    creating the tables_flushed file.
    Reviewed-by: default avatarJan Lindström <jan.lindstrom@mariadb.com>
    9b2fa2ae
galera_garbd_backup.test 4.66 KB