my $get_next_interval = make_interval_iter($interval, $skew);
while ( # Stop if...
(!$end || int(time) < $end) # runtime exceeded, or
&& !-f $sentinel # sentinel file created
) {
eval {
my $next_interval = $get_next_interval->();
if ( time >= $next_interval ) {
do { $next_interval = $get_next_interval->() } until $next_interval > time;
PTDEBUG && _d("Missed last interval; next interval:", ts($next_interval));
}
sleep $next_interval - time;
PTDEBUG && _d('Woke up at', ts(time));
..
...
....
sub make_interval_iter {
my ( $interval, $skew ) = @_;
die "I need an interval argument" unless defined $interval;
my ($s) = gettimeofday();
my $start_s = $s + 1;
my $i = 0;
my $get_next_interval = sub {
return $start_s + ($interval * $i++) + $skew;
};
return $get_next_interval;
}
Confirmed code with pt-heartbeat 2.2.12
nilnandan@ desktop: ~$ pt-heartbeat --version desktop: ~$
pt-heartbeat 2.2.12
nilnandan@
# ####### ####### ####### ####### ####### ####### ####### ####### ####### ####### ## ####### ####### ####### ####### ####### ####### ####### ####### ####### ## 'run-time' )) : 0;
# Monitor or update the heartbeat table.
# #######
my $end = $o->get('run-time') ? int(time + $o->get(
PTDEBUG && _d($end ? ('Will exit at', ts($end)) : 'Running forever');
my $get_next_interval = make_interval_ iter($interval, $skew);
while ( # Stop if... interval- >(); interval- >() }
until $next_interval > time;
ts($next_ interval) );
(!$end || int(time) < $end) # runtime exceeded, or
&& !-f $sentinel # sentinel file created
) {
eval {
my $next_interval = $get_next_
if ( time >= $next_interval ) {
do { $next_interval = $get_next_
PTDEBUG && _d("Missed last interval; next interval:",
}
sleep $next_interval - time;
PTDEBUG && _d('Woke up at', ts(time));
..
...
....
sub make_interval_iter {
my ( $interval, $skew ) = @_;
die "I need an interval argument" unless defined $interval;
my ($s) = gettimeofday();
my $start_s = $s + 1;
my $i = 0;
my $get_next_interval = sub {
return $start_s + ($interval * $i++) + $skew;
};
return $get_next_interval;
}