Commit 79032a7a authored by Shaohua Wang's avatar Shaohua Wang

BUG#22530768 Innodb freeze running REPLACE statements

we can see from the hang stacktrace, srv_monitor_thread is blocked
when getting log_sys::mutex, so that sync_arr_wake_threads_if_sema_free
cannot get a change to break the mutex deadlock.

The fix is simply removing any mutex wait in srv_monitor_thread.

Patch is reviewed by Sunny over IM.
parent c06138e4
/***************************************************************************** /*****************************************************************************
Copyright (c) 1995, 2011, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 1995, 2016, Oracle and/or its affiliates. All Rights Reserved.
This program is free software; you can redistribute it and/or modify it under This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software the terms of the GNU General Public License as published by the Free Software
...@@ -2103,7 +2103,10 @@ buf_flush_stat_update(void) ...@@ -2103,7 +2103,10 @@ buf_flush_stat_update(void)
ib_uint64_t lsn; ib_uint64_t lsn;
ulint n_flushed; ulint n_flushed;
lsn = log_get_lsn(); if (!log_peek_lsn(&lsn)) {
return;
}
if (buf_flush_stat_cur.redo == 0) { if (buf_flush_stat_cur.redo == 0) {
/* First time around. Just update the current LSN /* First time around. Just update the current LSN
and return. */ and return. */
......
/***************************************************************************** /*****************************************************************************
Copyright (c) 1995, 2013, Oracle and/or its affiliates. All Rights Reserved. Copyright (c) 1995, 2016, Oracle and/or its affiliates. All Rights Reserved.
Copyright (c) 2008, 2009 Google Inc. Copyright (c) 2008, 2009 Google Inc.
Copyright (c) 2009, Percona Inc. Copyright (c) 2009, Percona Inc.
...@@ -2413,6 +2413,8 @@ exit_func: ...@@ -2413,6 +2413,8 @@ exit_func:
/*********************************************************************//** /*********************************************************************//**
A thread which prints warnings about semaphore waits which have lasted A thread which prints warnings about semaphore waits which have lasted
too long. These can be used to track bugs which cause hangs. too long. These can be used to track bugs which cause hangs.
Note: In order to make sync_arr_wake_threads_if_sema_free work as expected,
we should avoid waiting any mutexes in this function!
@return a dummy parameter */ @return a dummy parameter */
UNIV_INTERN UNIV_INTERN
os_thread_ret_t os_thread_ret_t
...@@ -2450,23 +2452,22 @@ loop: ...@@ -2450,23 +2452,22 @@ loop:
/* Try to track a strange bug reported by Harald Fuchs and others, /* Try to track a strange bug reported by Harald Fuchs and others,
where the lsn seems to decrease at times */ where the lsn seems to decrease at times */
if (log_peek_lsn(&new_lsn)) {
if (new_lsn < old_lsn) {
ut_print_timestamp(stderr);
fprintf(stderr,
" InnoDB: Error: old log sequence number %llu"
" was greater\n"
"InnoDB: than the new log sequence number %llu!\n"
"InnoDB: Please submit a bug report"
" to http://bugs.mysql.com\n",
old_lsn, new_lsn);
ut_ad(0);
}
new_lsn = log_get_lsn(); old_lsn = new_lsn;
if (new_lsn < old_lsn) {
ut_print_timestamp(stderr);
fprintf(stderr,
" InnoDB: Error: old log sequence number %llu"
" was greater\n"
"InnoDB: than the new log sequence number %llu!\n"
"InnoDB: Please submit a bug report"
" to http://bugs.mysql.com\n",
old_lsn, new_lsn);
ut_ad(0);
} }
old_lsn = new_lsn;
if (difftime(time(NULL), srv_last_monitor_time) > 60) { if (difftime(time(NULL), srv_last_monitor_time) > 60) {
/* We referesh InnoDB Monitor values so that averages are /* We referesh InnoDB Monitor values so that averages are
printed from at most 60 last seconds */ printed from at most 60 last seconds */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment