Skip to content
  • Thayumanavar's avatar
    49330f6b
    BUG#14765080 - DEBUG_SYNC CAN LOSE SIGNAL · 49330f6b
    Thayumanavar authored
    PROBLEM:
    i_innodb.innodb_bug14712710 fails sporadically on PB2 branches
    with warning debug sync point timed out and error code of
    ER_DEBUG_SYNC_TIMEOUT. The problem could be that the wait
    thread which is  waiting at a sync point for a signal from the
    signalling thread could not process the signal because another
    signalling could have overwritten the debug_sync_global.ds_signal.
    This causes the waiting thread to wait till timeout expires leading
    to ER_DEBUG_SYNC_TIMEOUT error. This happens because the wait thread
    when woken up from a signal could contend with another signal for
    grabbing the debug_sync_global.ds_mutex. If the signal thread succeeds
    in the mutex, then new signal will be overwritten in debug_sync_global.
    ds_signal before the wait thread could process it. Also there exists
    the possibly of wait thread arriving late at a wait point before some
    signal threads could have overwritten the signal that the wait thread
    possibly wants to wait for. NOTE: The mysql documentation also needs 
    to be modified.
    FIX:
    In debug_sync_global maintain list of signals that have been signalled
    in a std::set and remove the signal from the list when the corressponding
    wait thread has processed that signal. Introduce a wait_for attribute
    no_clear_event that allows signal not to be cleared from the global thus
    allowing a single signal event to wake up multiple threads that wait for
    this signal. This is useful for the test cases rpl.rpl_semisync_deadlock
    and i_rpl.rpl_lost_events_on_rotate.
    49330f6b
    BUG#14765080 - DEBUG_SYNC CAN LOSE SIGNAL
    Thayumanavar authored
    PROBLEM:
    i_innodb.innodb_bug14712710 fails sporadically on PB2 branches
    with warning debug sync point timed out and error code of
    ER_DEBUG_SYNC_TIMEOUT. The problem could be that the wait
    thread which is  waiting at a sync point for a signal from the
    signalling thread could not process the signal because another
    signalling could have overwritten the debug_sync_global.ds_signal.
    This causes the waiting thread to wait till timeout expires leading
    to ER_DEBUG_SYNC_TIMEOUT error. This happens because the wait thread
    when woken up from a signal could contend with another signal for
    grabbing the debug_sync_global.ds_mutex. If the signal thread succeeds
    in the mutex, then new signal will be overwritten in debug_sync_global.
    ds_signal before the wait thread could process it. Also there exists
    the possibly of wait thread arriving late at a wait point before some
    signal threads could have overwritten the signal that the wait thread
    possibly wants to wait for. NOTE: The mysql documentation also needs 
    to be modified.
    FIX:
    In debug_sync_global maintain list of signals that have been signalled
    in a std::set and remove the signal from the list when the corressponding
    wait thread has processed that signal. Introduce a wait_for attribute
    no_clear_event that allows signal not to be cleared from the global thus
    allowing a single signal event to wake up multiple threads that wait for
    this signal. This is useful for the test cases rpl.rpl_semisync_deadlock
    and i_rpl.rpl_lost_events_on_rotate.
Loading