Comment 2 for bug 1406390

Revision history for this message
Nilnandan Joshi (nilnandan-joshi) wrote :

Confirmed code with pt-heartbeat 2.2.12

nilnandan@desktop:~$ pt-heartbeat --version
pt-heartbeat 2.2.12
nilnandan@desktop:~$

# ########################################################################
   # Monitor or update the heartbeat table.
   # ########################################################################
   my $end = $o->get('run-time') ? int(time + $o->get('run-time')) : 0;
   PTDEBUG && _d($end ? ('Will exit at', ts($end)) : 'Running forever');

   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;
}