summaryrefslogtreecommitdiff
path: root/innobase
diff options
context:
space:
mode:
authorunknown <marko@hundin.mysql.fi>2004-07-12 15:13:18 +0300
committerunknown <marko@hundin.mysql.fi>2004-07-12 15:13:18 +0300
commit7b6fc58ffff432df623d78511eab7e19ddb32f50 (patch)
tree56be07977acfd18f8f7ec1c92b4ee9506f85b471 /innobase
parent45485da7027b5cd65bfdb569fa046f91547c302f (diff)
downloadmariadb-git-7b6fc58ffff432df623d78511eab7e19ddb32f50.tar.gz
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.
Diffstat (limited to 'innobase')
-rw-r--r--innobase/include/srv0srv.h1
-rw-r--r--innobase/include/sync0arr.h2
-rw-r--r--innobase/row/row0mysql.c12
-rw-r--r--innobase/srv/srv0srv.c3
-rw-r--r--innobase/sync/sync0arr.c12
5 files changed, 23 insertions, 7 deletions
diff --git a/innobase/include/srv0srv.h b/innobase/include/srv0srv.h
index 40a96e79973..0be13528fd7 100644
--- a/innobase/include/srv0srv.h
+++ b/innobase/include/srv0srv.h
@@ -149,6 +149,7 @@ extern ulint srv_test_n_mutexes;
extern ulint srv_test_array_size;
extern ulint srv_activity_count;
+extern ulint srv_fatal_semaphore_wait_threshold;
extern mutex_t* kernel_mutex_temp;/* mutex protecting the server, trx structs,
query threads, and lock table: we allocate
diff --git a/innobase/include/sync0arr.h b/innobase/include/sync0arr.h
index 383d0c69fb2..4324f2d3f2c 100644
--- a/innobase/include/sync0arr.h
+++ b/innobase/include/sync0arr.h
@@ -95,7 +95,7 @@ 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
sync_array_print_long_waits(void);
diff --git a/innobase/row/row0mysql.c b/innobase/row/row0mysql.c
index b7779e5b7a3..e559ef739cc 100644
--- a/innobase/row/row0mysql.c
+++ b/innobase/row/row0mysql.c
@@ -2805,7 +2805,12 @@ row_check_table_for_mysql(
REPEATABLE READ here */
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);
while (index != NULL) {
@@ -2853,6 +2858,11 @@ row_check_table_for_mysql(
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 *) "";
return(ret);
diff --git a/innobase/srv/srv0srv.c b/innobase/srv/srv0srv.c
index a78bd0d864c..174214f9efe 100644
--- a/innobase/srv/srv0srv.c
+++ b/innobase/srv/srv0srv.c
@@ -55,6 +55,9 @@ ibool srv_lower_case_table_names = FALSE;
in the server */
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_error_monitor_active = FALSE;
diff --git a/innobase/sync/sync0arr.c b/innobase/sync/sync0arr.c
index 944503aa0e2..176aedb6ae3 100644
--- a/innobase/sync/sync0arr.c
+++ b/innobase/sync/sync0arr.c
@@ -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
sync_array_print_long_waits(void)
@@ -900,6 +900,7 @@ sync_array_print_long_waits(void)
ibool old_val;
ibool noticed = FALSE;
ulint i;
+ ulint fatal_timeout = srv_fatal_semaphore_wait_threshold;
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
- && difftime(time(NULL), cell->reservation_time) > 600) {
+ && difftime(time(NULL), cell->reservation_time)
+ > fatal_timeout) {
- fputs(
-"InnoDB: Error: semaphore wait has lasted > 600 seconds\n"
+ fprintf(stderr,
+"InnoDB: Error: semaphore wait has lasted > %lu seconds\n"
"InnoDB: We intentionally crash the server, because it appears to be hung.\n",
- stderr);
+ fatal_timeout);
ut_error;
}