• Monty's avatar
    MDEV-9573 'Stop slave' hangs on replication slave · e65f667b
    Monty authored
    The reason for this is that stop slave takes LOCK_active_mi over the
    whole operation while some slave operations will also need LOCK_active_mi
    which causes deadlocks.
    
    Fixed by introducing object counting for Master_info and not taking
    LOCK_active_mi over stop slave or even stop_all_slaves()
    
    Another benefit of this approach is that it allows:
    - Multiple threads can run SHOW SLAVE STATUS at the same time
    - START/STOP/RESET/SLAVE STATUS on a slave will not block other slaves
    - Simpler interface for handling get_master_info()
    - Added some missing unlock of 'log_lock' in error condtions
    - Moved rpl_parallel_inactivate_pool(&global_rpl_thread_pool) to end
      of stop_slave() to not have to use LOCK_active_mi inside
      terminate_slave_threads()
    - Changed argument for remove_master_info() to Master_info, as we always
      have this available
    - Fixed core dump when doing FLUSH TABLES WITH READ LOCK and parallel
      replication. Problem was that waiting for pause_for_ftwrl was not done
      when deleting rpt->current_owner after a force_abort.
    e65f667b
slave.cc 241 KB