• Andrei Elkin's avatar
    MDEV-17437 Semisync master fires invalid fd value assert · 6db773a5
    Andrei Elkin authored
    The semisync ack collector hits fd's out-of-bound value assert through
    a stack of
    
    /usr/sbin/mysqld(_ZN12Ack_receiver17get_slave_socketsEP6fd_setPj+0x70)[0x7fa3bbe27400]
    
    /usr/sbin/mysqld(_ZN12Ack_receiver3runEv+0x540)[0x7fa3bbe27980]
    
    /usr/sbin/mysqld(ack_receive_handler+0x19)[0x7fa3bbe27a79]
    
    The reason of the failure must be the same as in https://bugs.mysql.com/bug.php?id=79865
    whose fixes are applied with minor changes.
    
    Specifically, the semisync ack thread is changed to use poll()
    instead of select() on platforms where the former is defined.
    On the systems that still use select(), Ack receive thread will generate
    an error and semi sync will be switched off. Windows systems is exception
    case because on windows this limitation does not exists.
    
    The sustain manual testing with `mysqlslap --concurrency > 1024' in "background" while the slave io thread is restarting multiple times.
    6db773a5
semisync_master_ack_receiver.cc 7.17 KB