merged pt-heartbeat-crashes-with-sleep-argument-1406390

This commit is contained in:
Frank Cizmich
2015-04-09 11:49:13 -03:00
+12 -6
View File
@@ -5286,13 +5286,16 @@ sub main {
) { ) {
eval { eval {
my $next_interval = $get_next_interval->(); my $next_interval = $get_next_interval->();
if ( time >= $next_interval ) { # save current time in variable to avoid race condition
# https://bugs.launchpad.net/percona-toolkit/+bug/1406390
my $time = time;
if ( $time >= $next_interval ) {
do { $next_interval = $get_next_interval->() } do { $next_interval = $get_next_interval->() }
until $next_interval > time; until $next_interval > $time;
PTDEBUG && _d("Missed last interval; next interval:", PTDEBUG && _d("Missed last interval; next interval:",
ts($next_interval)); ts($next_interval));
} }
sleep $next_interval - time; sleep $next_interval - $time;
PTDEBUG && _d('Woke up at', ts(time)); PTDEBUG && _d('Woke up at', ts(time));
# Connect or reconnect if necessary. # Connect or reconnect if necessary.
@@ -5419,13 +5422,16 @@ sub check_delay {
PTDEBUG && _d('Checking slave', $dp->as_string($dsn)); PTDEBUG && _d('Checking slave', $dp->as_string($dsn));
my $next_interval = $get_next_interval->(); my $next_interval = $get_next_interval->();
if ( time >= $next_interval ) { # save current time in variable to avoid race condition
# https://bugs.launchpad.net/percona-toolkit/+bug/1406390
my $time = time;
if ( $time >= $next_interval ) {
do { $next_interval = $get_next_interval->() } do { $next_interval = $get_next_interval->() }
until $next_interval > time; until $next_interval > $time;
PTDEBUG && _d("Missed last interval; next interval:", PTDEBUG && _d("Missed last interval; next interval:",
ts($next_interval)); ts($next_interval));
} }
sleep $next_interval - time; sleep $next_interval - $time;
PTDEBUG && _d('Woke up at', ts(time)); PTDEBUG && _d('Woke up at', ts(time));
my ($delay, $hostname, $master_server_id) = $get_delay->($sth); my ($delay, $hostname, $master_server_id) = $get_delay->($sth);