-
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.
Thayumanavar authoredPROBLEM: 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