Commit 8d73628d authored by monty@mysql.com's avatar monty@mysql.com

Merge

parents b751796a c73cd9ff
...@@ -67,6 +67,7 @@ igor@rurik.mysql.com ...@@ -67,6 +67,7 @@ igor@rurik.mysql.com
ingo@mysql.com ingo@mysql.com
jan@hundin.mysql.fi jan@hundin.mysql.fi
jani@a80-186-24-72.elisa-laajakaista.fi jani@a80-186-24-72.elisa-laajakaista.fi
jani@a80-186-41-201.elisa-laajakaista.fi
jani@dsl-jkl1657.dial.inet.fi jani@dsl-jkl1657.dial.inet.fi
jani@dsl-kpogw4gb5.dial.inet.fi jani@dsl-kpogw4gb5.dial.inet.fi
jani@hynda.(none) jani@hynda.(none)
......
...@@ -97,9 +97,11 @@ sync_arr_wake_threads_if_sema_free(void); ...@@ -97,9 +97,11 @@ sync_arr_wake_threads_if_sema_free(void);
/************************************************************************** /**************************************************************************
Prints warnings of long semaphore waits to stderr. */ Prints warnings of long semaphore waits to stderr. */
void ibool
sync_array_print_long_waits(void); sync_array_print_long_waits(void);
/*=============================*/ /*=============================*/
/* out: TRUE if fatal semaphore wait threshold
was exceeded */
/************************************************************************ /************************************************************************
Validates the integrity of the wait array. Checks Validates the integrity of the wait array. Checks
that the number of reserved cells equals the count variable. */ that the number of reserved cells equals the count variable. */
......
...@@ -1810,7 +1810,8 @@ srv_error_monitor_thread( ...@@ -1810,7 +1810,8 @@ srv_error_monitor_thread(
/* in: a dummy parameter required by /* in: a dummy parameter required by
os_thread_create */ os_thread_create */
{ {
ulint cnt = 0; /* number of successive fatal timeouts observed */
ulint fatal_cnt = 0;
dulint old_lsn; dulint old_lsn;
dulint new_lsn; dulint new_lsn;
...@@ -1823,8 +1824,6 @@ srv_error_monitor_thread( ...@@ -1823,8 +1824,6 @@ srv_error_monitor_thread(
loop: loop:
srv_error_monitor_active = TRUE; srv_error_monitor_active = TRUE;
cnt++;
/* 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 */
...@@ -1851,7 +1850,20 @@ loop: ...@@ -1851,7 +1850,20 @@ loop:
srv_refresh_innodb_monitor_stats(); srv_refresh_innodb_monitor_stats();
} }
sync_array_print_long_waits(); if (sync_array_print_long_waits()) {
fatal_cnt++;
if (fatal_cnt > 5) {
fprintf(stderr,
"InnoDB: Error: semaphore wait has lasted > %lu seconds\n"
"InnoDB: We intentionally crash the server, because it appears to be hung.\n",
srv_fatal_semaphore_wait_threshold);
ut_error;
}
} else {
fatal_cnt = 0;
}
/* Flush stderr so that a database user gets the output /* Flush stderr so that a database user gets the output
to possible MySQL error file */ to possible MySQL error file */
......
...@@ -894,15 +894,18 @@ sync_arr_wake_threads_if_sema_free(void) ...@@ -894,15 +894,18 @@ sync_arr_wake_threads_if_sema_free(void)
/************************************************************************** /**************************************************************************
Prints warnings of long semaphore waits to stderr. */ Prints warnings of long semaphore waits to stderr. */
void ibool
sync_array_print_long_waits(void) sync_array_print_long_waits(void)
/*=============================*/ /*=============================*/
/* out: TRUE if fatal semaphore wait threshold
was exceeded */
{ {
sync_cell_t* cell; sync_cell_t* cell;
ibool old_val; ibool old_val;
ibool noticed = FALSE; ibool noticed = FALSE;
ulint i; ulint i;
ulint fatal_timeout = srv_fatal_semaphore_wait_threshold; ulint fatal_timeout = srv_fatal_semaphore_wait_threshold;
ibool fatal = FALSE;
for (i = 0; i < sync_primary_wait_array->n_cells; i++) { for (i = 0; i < sync_primary_wait_array->n_cells; i++) {
...@@ -919,13 +922,7 @@ sync_array_print_long_waits(void) ...@@ -919,13 +922,7 @@ sync_array_print_long_waits(void)
if (cell->wait_object != NULL if (cell->wait_object != NULL
&& difftime(time(NULL), cell->reservation_time) && difftime(time(NULL), cell->reservation_time)
> fatal_timeout) { > fatal_timeout) {
fatal = TRUE;
fprintf(stderr,
"InnoDB: Error: semaphore wait has lasted > %lu seconds\n"
"InnoDB: We intentionally crash the server, because it appears to be hung.\n",
fatal_timeout);
ut_error;
} }
} }
...@@ -953,6 +950,8 @@ sync_array_print_long_waits(void) ...@@ -953,6 +950,8 @@ sync_array_print_long_waits(void)
fprintf(stderr, fprintf(stderr,
"InnoDB: ###### Diagnostic info printed to the standard error stream\n"); "InnoDB: ###### Diagnostic info printed to the standard error stream\n");
} }
return(fatal);
} }
/************************************************************************** /**************************************************************************
......
...@@ -8,7 +8,7 @@ use File::Path; ...@@ -8,7 +8,7 @@ use File::Path;
use DBI; use DBI;
use Sys::Hostname; use Sys::Hostname;
use File::Copy; use File::Copy;
use File::Temp; use File::Temp qw(tempfile);
=head1 NAME =head1 NAME
...@@ -39,7 +39,7 @@ WARNING: THIS PROGRAM IS STILL IN BETA. Comments/patches welcome. ...@@ -39,7 +39,7 @@ WARNING: THIS PROGRAM IS STILL IN BETA. Comments/patches welcome.
# Documentation continued at end of file # Documentation continued at end of file
my $VERSION = "1.21"; my $VERSION = "1.22";
my $opt_tmpdir = $ENV{TMPDIR} || "/tmp"; my $opt_tmpdir = $ENV{TMPDIR} || "/tmp";
...@@ -655,7 +655,7 @@ sub copy_index ...@@ -655,7 +655,7 @@ sub copy_index
} }
elsif ($opt{method} =~ /^scp\b/) elsif ($opt{method} =~ /^scp\b/)
{ {
my ($fh, $tmp)=tempfile('mysqlhotcopy-XXXXXX', DIR => $opt_tmpdir); my ($fh, $tmp)= tempfile('mysqlhotcopy-XXXXXX', DIR => $opt_tmpdir) or
die "Can\'t create/open file in $opt_tmpdir\n"; die "Can\'t create/open file in $opt_tmpdir\n";
if (syswrite($fh,$buff) != length($buff)) if (syswrite($fh,$buff) != length($buff))
{ {
......
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