mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
InnoDB: Increment the lock wait watchdog timeout during CHECK TABLE
(Bug #2694) innobase/include/srv0srv.h: Add srv_fatal_semaphore_wait_threshold innobase/include/sync0arr.h: Improve comment of sync_array_print_long_waits() innobase/row/row0mysql.c: Lengthen the srv_fatal_semaphore_wait_threshold by 2 hours during CHECK TABLE innobase/srv/srv0srv.c: Add srv_fatal_semaphore_wait_threshold innobase/sync/sync0arr.c: Improve comment of sync_array_print_long_waits(). Replace the fixed timeout of 600 seconds with srv_fatal_semaphore_wait_threshold.
This commit is contained in:
@ -149,6 +149,7 @@ extern ulint srv_test_n_mutexes;
|
|||||||
extern ulint srv_test_array_size;
|
extern ulint srv_test_array_size;
|
||||||
|
|
||||||
extern ulint srv_activity_count;
|
extern ulint srv_activity_count;
|
||||||
|
extern ulint srv_fatal_semaphore_wait_threshold;
|
||||||
|
|
||||||
extern mutex_t* kernel_mutex_temp;/* mutex protecting the server, trx structs,
|
extern mutex_t* kernel_mutex_temp;/* mutex protecting the server, trx structs,
|
||||||
query threads, and lock table: we allocate
|
query threads, and lock table: we allocate
|
||||||
|
@ -95,7 +95,7 @@ void
|
|||||||
sync_arr_wake_threads_if_sema_free(void);
|
sync_arr_wake_threads_if_sema_free(void);
|
||||||
/*====================================*/
|
/*====================================*/
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
Prints warnings of long semaphore waits to stderr. Currently > 120 sec. */
|
Prints warnings of long semaphore waits to stderr. */
|
||||||
|
|
||||||
void
|
void
|
||||||
sync_array_print_long_waits(void);
|
sync_array_print_long_waits(void);
|
||||||
|
@ -2805,7 +2805,12 @@ row_check_table_for_mysql(
|
|||||||
REPEATABLE READ here */
|
REPEATABLE READ here */
|
||||||
|
|
||||||
prebuilt->trx->isolation_level = TRX_ISO_REPEATABLE_READ;
|
prebuilt->trx->isolation_level = TRX_ISO_REPEATABLE_READ;
|
||||||
|
|
||||||
|
/* Enlarge the fatal lock wait timeout during CHECK TABLE. */
|
||||||
|
mutex_enter(&kernel_mutex);
|
||||||
|
srv_fatal_semaphore_wait_threshold += 7200; /* 2 hours */
|
||||||
|
mutex_exit(&kernel_mutex);
|
||||||
|
|
||||||
index = dict_table_get_first_index(table);
|
index = dict_table_get_first_index(table);
|
||||||
|
|
||||||
while (index != NULL) {
|
while (index != NULL) {
|
||||||
@ -2853,6 +2858,11 @@ row_check_table_for_mysql(
|
|||||||
ret = DB_ERROR;
|
ret = DB_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Restore the fatal lock wait timeout after CHECK TABLE. */
|
||||||
|
mutex_enter(&kernel_mutex);
|
||||||
|
srv_fatal_semaphore_wait_threshold -= 7200; /* 2 hours */
|
||||||
|
mutex_exit(&kernel_mutex);
|
||||||
|
|
||||||
prebuilt->trx->op_info = (char *) "";
|
prebuilt->trx->op_info = (char *) "";
|
||||||
|
|
||||||
return(ret);
|
return(ret);
|
||||||
|
@ -55,6 +55,9 @@ ibool srv_lower_case_table_names = FALSE;
|
|||||||
in the server */
|
in the server */
|
||||||
ulint srv_activity_count = 0;
|
ulint srv_activity_count = 0;
|
||||||
|
|
||||||
|
/* The following is the maximum allowed duration of a lock wait. */
|
||||||
|
ulint srv_fatal_semaphore_wait_threshold = 600;
|
||||||
|
|
||||||
ibool srv_lock_timeout_and_monitor_active = FALSE;
|
ibool srv_lock_timeout_and_monitor_active = FALSE;
|
||||||
ibool srv_error_monitor_active = FALSE;
|
ibool srv_error_monitor_active = FALSE;
|
||||||
|
|
||||||
|
@ -890,7 +890,7 @@ sync_arr_wake_threads_if_sema_free(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
Prints warnings of long semaphore waits to stderr. Currently > 120 sec. */
|
Prints warnings of long semaphore waits to stderr. */
|
||||||
|
|
||||||
void
|
void
|
||||||
sync_array_print_long_waits(void)
|
sync_array_print_long_waits(void)
|
||||||
@ -900,6 +900,7 @@ sync_array_print_long_waits(void)
|
|||||||
ibool old_val;
|
ibool old_val;
|
||||||
ibool noticed = FALSE;
|
ibool noticed = FALSE;
|
||||||
ulint i;
|
ulint i;
|
||||||
|
ulint fatal_timeout = srv_fatal_semaphore_wait_threshold;
|
||||||
|
|
||||||
for (i = 0; i < sync_primary_wait_array->n_cells; i++) {
|
for (i = 0; i < sync_primary_wait_array->n_cells; i++) {
|
||||||
|
|
||||||
@ -914,12 +915,13 @@ sync_array_print_long_waits(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (cell->wait_object != NULL
|
if (cell->wait_object != NULL
|
||||||
&& difftime(time(NULL), cell->reservation_time) > 600) {
|
&& difftime(time(NULL), cell->reservation_time)
|
||||||
|
> fatal_timeout) {
|
||||||
|
|
||||||
fputs(
|
fprintf(stderr,
|
||||||
"InnoDB: Error: semaphore wait has lasted > 600 seconds\n"
|
"InnoDB: Error: semaphore wait has lasted > %lu seconds\n"
|
||||||
"InnoDB: We intentionally crash the server, because it appears to be hung.\n",
|
"InnoDB: We intentionally crash the server, because it appears to be hung.\n",
|
||||||
stderr);
|
fatal_timeout);
|
||||||
|
|
||||||
ut_error;
|
ut_error;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user