From 454592655674483102a155ee11732b203509a47e Mon Sep 17 00:00:00 2001 From: Daniel Nichter Date: Thu, 14 Feb 2013 08:28:18 -0700 Subject: [PATCH] Fix get_perl_module_version(). Add 'hours until next check' to debug output. --- bin/pt-archiver | 20 ++++++++------------ bin/pt-config-diff | 20 ++++++++------------ bin/pt-deadlock-logger | 20 ++++++++------------ bin/pt-diskstats | 20 ++++++++------------ bin/pt-duplicate-key-checker | 20 ++++++++------------ bin/pt-find | 20 ++++++++------------ bin/pt-fk-error-logger | 20 ++++++++------------ bin/pt-heartbeat | 20 ++++++++------------ bin/pt-index-usage | 20 ++++++++------------ bin/pt-kill | 20 ++++++++------------ bin/pt-online-schema-change | 20 ++++++++------------ bin/pt-query-advisor | 20 ++++++++------------ bin/pt-query-digest | 20 ++++++++------------ bin/pt-slave-delay | 20 ++++++++------------ bin/pt-slave-restart | 20 ++++++++------------ bin/pt-table-checksum | 20 ++++++++------------ bin/pt-table-sync | 20 ++++++++------------ bin/pt-upgrade | 20 ++++++++------------ bin/pt-variable-advisor | 20 ++++++++------------ lib/VersionCheck.pm | 22 ++++++++-------------- t/lib/VersionCheck.t | 17 +++++++++++++++++ 21 files changed, 177 insertions(+), 242 deletions(-) diff --git a/bin/pt-archiver b/bin/pt-archiver index d4e3e7be..d6af4e7d 100755 --- a/bin/pt-archiver +++ b/bin/pt-archiver @@ -4815,7 +4815,10 @@ sub get_instances_to_check { foreach my $instance ( @$instances ) { my $last_check_time = $last_check_time_for{ $instance->{id} }; PTDEBUG && _d('Intsance', $instance->{id}, 'last checked', - $last_check_time, 'now', $now, 'diff', $now - ($last_check_time || 0)); + $last_check_time, 'now', $now, 'diff', $now - ($last_check_time || 0), + 'hours until next check', + sprintf '%.2f', + ($check_time_limit - ($now - ($last_check_time || 0))) / 3600); if ( !defined $last_check_time || ($now - $last_check_time) >= $check_time_limit ) { PTDEBUG && _d('Time to check', Dumper($instance)); @@ -5044,7 +5047,6 @@ sub get_versions { } - sub get_os_version { if ( $OSNAME eq 'MSWin32' ) { require Win32; @@ -5135,16 +5137,10 @@ sub get_perl_module_version { my $item = $args{item}; return unless $item; - my $var = $item->{item} . '::VERSION'; - my $version = get_scalar($var); - PTDEBUG && _d('Perl version for', $var, '=', "$version"); - - return $version ? "$version" : $version; -} - -sub get_scalar { - no strict; - return ${*{shift()}}; + my $var = '$' . $item->{item} . '::VERSION'; + my $version = eval "use $item->{item}; $var;"; + PTDEBUG && _d('Perl version for', $var, '=', $version); + return $version; } sub get_mysql_variable { diff --git a/bin/pt-config-diff b/bin/pt-config-diff index cb64da6a..fc3ea220 100755 --- a/bin/pt-config-diff +++ b/bin/pt-config-diff @@ -4489,7 +4489,10 @@ sub get_instances_to_check { foreach my $instance ( @$instances ) { my $last_check_time = $last_check_time_for{ $instance->{id} }; PTDEBUG && _d('Intsance', $instance->{id}, 'last checked', - $last_check_time, 'now', $now, 'diff', $now - ($last_check_time || 0)); + $last_check_time, 'now', $now, 'diff', $now - ($last_check_time || 0), + 'hours until next check', + sprintf '%.2f', + ($check_time_limit - ($now - ($last_check_time || 0))) / 3600); if ( !defined $last_check_time || ($now - $last_check_time) >= $check_time_limit ) { PTDEBUG && _d('Time to check', Dumper($instance)); @@ -4718,7 +4721,6 @@ sub get_versions { } - sub get_os_version { if ( $OSNAME eq 'MSWin32' ) { require Win32; @@ -4809,16 +4811,10 @@ sub get_perl_module_version { my $item = $args{item}; return unless $item; - my $var = $item->{item} . '::VERSION'; - my $version = get_scalar($var); - PTDEBUG && _d('Perl version for', $var, '=', "$version"); - - return $version ? "$version" : $version; -} - -sub get_scalar { - no strict; - return ${*{shift()}}; + my $var = '$' . $item->{item} . '::VERSION'; + my $version = eval "use $item->{item}; $var;"; + PTDEBUG && _d('Perl version for', $var, '=', $version); + return $version; } sub get_mysql_variable { diff --git a/bin/pt-deadlock-logger b/bin/pt-deadlock-logger index aab5537f..ddef8ad7 100755 --- a/bin/pt-deadlock-logger +++ b/bin/pt-deadlock-logger @@ -3405,7 +3405,10 @@ sub get_instances_to_check { foreach my $instance ( @$instances ) { my $last_check_time = $last_check_time_for{ $instance->{id} }; PTDEBUG && _d('Intsance', $instance->{id}, 'last checked', - $last_check_time, 'now', $now, 'diff', $now - ($last_check_time || 0)); + $last_check_time, 'now', $now, 'diff', $now - ($last_check_time || 0), + 'hours until next check', + sprintf '%.2f', + ($check_time_limit - ($now - ($last_check_time || 0))) / 3600); if ( !defined $last_check_time || ($now - $last_check_time) >= $check_time_limit ) { PTDEBUG && _d('Time to check', Dumper($instance)); @@ -3634,7 +3637,6 @@ sub get_versions { } - sub get_os_version { if ( $OSNAME eq 'MSWin32' ) { require Win32; @@ -3725,16 +3727,10 @@ sub get_perl_module_version { my $item = $args{item}; return unless $item; - my $var = $item->{item} . '::VERSION'; - my $version = get_scalar($var); - PTDEBUG && _d('Perl version for', $var, '=', "$version"); - - return $version ? "$version" : $version; -} - -sub get_scalar { - no strict; - return ${*{shift()}}; + my $var = '$' . $item->{item} . '::VERSION'; + my $version = eval "use $item->{item}; $var;"; + PTDEBUG && _d('Perl version for', $var, '=', $version); + return $version; } sub get_mysql_variable { diff --git a/bin/pt-diskstats b/bin/pt-diskstats index 48a3ad25..e0fe0d53 100755 --- a/bin/pt-diskstats +++ b/bin/pt-diskstats @@ -4300,7 +4300,10 @@ sub get_instances_to_check { foreach my $instance ( @$instances ) { my $last_check_time = $last_check_time_for{ $instance->{id} }; PTDEBUG && _d('Intsance', $instance->{id}, 'last checked', - $last_check_time, 'now', $now, 'diff', $now - ($last_check_time || 0)); + $last_check_time, 'now', $now, 'diff', $now - ($last_check_time || 0), + 'hours until next check', + sprintf '%.2f', + ($check_time_limit - ($now - ($last_check_time || 0))) / 3600); if ( !defined $last_check_time || ($now - $last_check_time) >= $check_time_limit ) { PTDEBUG && _d('Time to check', Dumper($instance)); @@ -4529,7 +4532,6 @@ sub get_versions { } - sub get_os_version { if ( $OSNAME eq 'MSWin32' ) { require Win32; @@ -4620,16 +4622,10 @@ sub get_perl_module_version { my $item = $args{item}; return unless $item; - my $var = $item->{item} . '::VERSION'; - my $version = get_scalar($var); - PTDEBUG && _d('Perl version for', $var, '=', "$version"); - - return $version ? "$version" : $version; -} - -sub get_scalar { - no strict; - return ${*{shift()}}; + my $var = '$' . $item->{item} . '::VERSION'; + my $version = eval "use $item->{item}; $var;"; + PTDEBUG && _d('Perl version for', $var, '=', $version); + return $version; } sub get_mysql_variable { diff --git a/bin/pt-duplicate-key-checker b/bin/pt-duplicate-key-checker index 01de6cac..29b1c178 100755 --- a/bin/pt-duplicate-key-checker +++ b/bin/pt-duplicate-key-checker @@ -4161,7 +4161,10 @@ sub get_instances_to_check { foreach my $instance ( @$instances ) { my $last_check_time = $last_check_time_for{ $instance->{id} }; PTDEBUG && _d('Intsance', $instance->{id}, 'last checked', - $last_check_time, 'now', $now, 'diff', $now - ($last_check_time || 0)); + $last_check_time, 'now', $now, 'diff', $now - ($last_check_time || 0), + 'hours until next check', + sprintf '%.2f', + ($check_time_limit - ($now - ($last_check_time || 0))) / 3600); if ( !defined $last_check_time || ($now - $last_check_time) >= $check_time_limit ) { PTDEBUG && _d('Time to check', Dumper($instance)); @@ -4390,7 +4393,6 @@ sub get_versions { } - sub get_os_version { if ( $OSNAME eq 'MSWin32' ) { require Win32; @@ -4481,16 +4483,10 @@ sub get_perl_module_version { my $item = $args{item}; return unless $item; - my $var = $item->{item} . '::VERSION'; - my $version = get_scalar($var); - PTDEBUG && _d('Perl version for', $var, '=', "$version"); - - return $version ? "$version" : $version; -} - -sub get_scalar { - no strict; - return ${*{shift()}}; + my $var = '$' . $item->{item} . '::VERSION'; + my $version = eval "use $item->{item}; $var;"; + PTDEBUG && _d('Perl version for', $var, '=', $version); + return $version; } sub get_mysql_variable { diff --git a/bin/pt-find b/bin/pt-find index 12852536..01c9711f 100755 --- a/bin/pt-find +++ b/bin/pt-find @@ -2973,7 +2973,10 @@ sub get_instances_to_check { foreach my $instance ( @$instances ) { my $last_check_time = $last_check_time_for{ $instance->{id} }; PTDEBUG && _d('Intsance', $instance->{id}, 'last checked', - $last_check_time, 'now', $now, 'diff', $now - ($last_check_time || 0)); + $last_check_time, 'now', $now, 'diff', $now - ($last_check_time || 0), + 'hours until next check', + sprintf '%.2f', + ($check_time_limit - ($now - ($last_check_time || 0))) / 3600); if ( !defined $last_check_time || ($now - $last_check_time) >= $check_time_limit ) { PTDEBUG && _d('Time to check', Dumper($instance)); @@ -3202,7 +3205,6 @@ sub get_versions { } - sub get_os_version { if ( $OSNAME eq 'MSWin32' ) { require Win32; @@ -3293,16 +3295,10 @@ sub get_perl_module_version { my $item = $args{item}; return unless $item; - my $var = $item->{item} . '::VERSION'; - my $version = get_scalar($var); - PTDEBUG && _d('Perl version for', $var, '=', "$version"); - - return $version ? "$version" : $version; -} - -sub get_scalar { - no strict; - return ${*{shift()}}; + my $var = '$' . $item->{item} . '::VERSION'; + my $version = eval "use $item->{item}; $var;"; + PTDEBUG && _d('Perl version for', $var, '=', $version); + return $version; } sub get_mysql_variable { diff --git a/bin/pt-fk-error-logger b/bin/pt-fk-error-logger index 6a1c59b8..d42a65ad 100755 --- a/bin/pt-fk-error-logger +++ b/bin/pt-fk-error-logger @@ -2915,7 +2915,10 @@ sub get_instances_to_check { foreach my $instance ( @$instances ) { my $last_check_time = $last_check_time_for{ $instance->{id} }; PTDEBUG && _d('Intsance', $instance->{id}, 'last checked', - $last_check_time, 'now', $now, 'diff', $now - ($last_check_time || 0)); + $last_check_time, 'now', $now, 'diff', $now - ($last_check_time || 0), + 'hours until next check', + sprintf '%.2f', + ($check_time_limit - ($now - ($last_check_time || 0))) / 3600); if ( !defined $last_check_time || ($now - $last_check_time) >= $check_time_limit ) { PTDEBUG && _d('Time to check', Dumper($instance)); @@ -3144,7 +3147,6 @@ sub get_versions { } - sub get_os_version { if ( $OSNAME eq 'MSWin32' ) { require Win32; @@ -3235,16 +3237,10 @@ sub get_perl_module_version { my $item = $args{item}; return unless $item; - my $var = $item->{item} . '::VERSION'; - my $version = get_scalar($var); - PTDEBUG && _d('Perl version for', $var, '=', "$version"); - - return $version ? "$version" : $version; -} - -sub get_scalar { - no strict; - return ${*{shift()}}; + my $var = '$' . $item->{item} . '::VERSION'; + my $version = eval "use $item->{item}; $var;"; + PTDEBUG && _d('Perl version for', $var, '=', $version); + return $version; } sub get_mysql_variable { diff --git a/bin/pt-heartbeat b/bin/pt-heartbeat index 86fdce78..63ec2ad0 100755 --- a/bin/pt-heartbeat +++ b/bin/pt-heartbeat @@ -4141,7 +4141,10 @@ sub get_instances_to_check { foreach my $instance ( @$instances ) { my $last_check_time = $last_check_time_for{ $instance->{id} }; PTDEBUG && _d('Intsance', $instance->{id}, 'last checked', - $last_check_time, 'now', $now, 'diff', $now - ($last_check_time || 0)); + $last_check_time, 'now', $now, 'diff', $now - ($last_check_time || 0), + 'hours until next check', + sprintf '%.2f', + ($check_time_limit - ($now - ($last_check_time || 0))) / 3600); if ( !defined $last_check_time || ($now - $last_check_time) >= $check_time_limit ) { PTDEBUG && _d('Time to check', Dumper($instance)); @@ -4370,7 +4373,6 @@ sub get_versions { } - sub get_os_version { if ( $OSNAME eq 'MSWin32' ) { require Win32; @@ -4461,16 +4463,10 @@ sub get_perl_module_version { my $item = $args{item}; return unless $item; - my $var = $item->{item} . '::VERSION'; - my $version = get_scalar($var); - PTDEBUG && _d('Perl version for', $var, '=', "$version"); - - return $version ? "$version" : $version; -} - -sub get_scalar { - no strict; - return ${*{shift()}}; + my $var = '$' . $item->{item} . '::VERSION'; + my $version = eval "use $item->{item}; $var;"; + PTDEBUG && _d('Perl version for', $var, '=', $version); + return $version; } sub get_mysql_variable { diff --git a/bin/pt-index-usage b/bin/pt-index-usage index acf0cccf..99e9600f 100755 --- a/bin/pt-index-usage +++ b/bin/pt-index-usage @@ -5616,7 +5616,10 @@ sub get_instances_to_check { foreach my $instance ( @$instances ) { my $last_check_time = $last_check_time_for{ $instance->{id} }; PTDEBUG && _d('Intsance', $instance->{id}, 'last checked', - $last_check_time, 'now', $now, 'diff', $now - ($last_check_time || 0)); + $last_check_time, 'now', $now, 'diff', $now - ($last_check_time || 0), + 'hours until next check', + sprintf '%.2f', + ($check_time_limit - ($now - ($last_check_time || 0))) / 3600); if ( !defined $last_check_time || ($now - $last_check_time) >= $check_time_limit ) { PTDEBUG && _d('Time to check', Dumper($instance)); @@ -5845,7 +5848,6 @@ sub get_versions { } - sub get_os_version { if ( $OSNAME eq 'MSWin32' ) { require Win32; @@ -5936,16 +5938,10 @@ sub get_perl_module_version { my $item = $args{item}; return unless $item; - my $var = $item->{item} . '::VERSION'; - my $version = get_scalar($var); - PTDEBUG && _d('Perl version for', $var, '=', "$version"); - - return $version ? "$version" : $version; -} - -sub get_scalar { - no strict; - return ${*{shift()}}; + my $var = '$' . $item->{item} . '::VERSION'; + my $version = eval "use $item->{item}; $var;"; + PTDEBUG && _d('Perl version for', $var, '=', $version); + return $version; } sub get_mysql_variable { diff --git a/bin/pt-kill b/bin/pt-kill index cab0144d..901cbd44 100755 --- a/bin/pt-kill +++ b/bin/pt-kill @@ -5838,7 +5838,10 @@ sub get_instances_to_check { foreach my $instance ( @$instances ) { my $last_check_time = $last_check_time_for{ $instance->{id} }; PTDEBUG && _d('Intsance', $instance->{id}, 'last checked', - $last_check_time, 'now', $now, 'diff', $now - ($last_check_time || 0)); + $last_check_time, 'now', $now, 'diff', $now - ($last_check_time || 0), + 'hours until next check', + sprintf '%.2f', + ($check_time_limit - ($now - ($last_check_time || 0))) / 3600); if ( !defined $last_check_time || ($now - $last_check_time) >= $check_time_limit ) { PTDEBUG && _d('Time to check', Dumper($instance)); @@ -6067,7 +6070,6 @@ sub get_versions { } - sub get_os_version { if ( $OSNAME eq 'MSWin32' ) { require Win32; @@ -6158,16 +6160,10 @@ sub get_perl_module_version { my $item = $args{item}; return unless $item; - my $var = $item->{item} . '::VERSION'; - my $version = get_scalar($var); - PTDEBUG && _d('Perl version for', $var, '=', "$version"); - - return $version ? "$version" : $version; -} - -sub get_scalar { - no strict; - return ${*{shift()}}; + my $var = '$' . $item->{item} . '::VERSION'; + my $version = eval "use $item->{item}; $var;"; + PTDEBUG && _d('Perl version for', $var, '=', $version); + return $version; } sub get_mysql_variable { diff --git a/bin/pt-online-schema-change b/bin/pt-online-schema-change index 1145a692..bfe7c455 100755 --- a/bin/pt-online-schema-change +++ b/bin/pt-online-schema-change @@ -7288,7 +7288,10 @@ sub get_instances_to_check { foreach my $instance ( @$instances ) { my $last_check_time = $last_check_time_for{ $instance->{id} }; PTDEBUG && _d('Intsance', $instance->{id}, 'last checked', - $last_check_time, 'now', $now, 'diff', $now - ($last_check_time || 0)); + $last_check_time, 'now', $now, 'diff', $now - ($last_check_time || 0), + 'hours until next check', + sprintf '%.2f', + ($check_time_limit - ($now - ($last_check_time || 0))) / 3600); if ( !defined $last_check_time || ($now - $last_check_time) >= $check_time_limit ) { PTDEBUG && _d('Time to check', Dumper($instance)); @@ -7517,7 +7520,6 @@ sub get_versions { } - sub get_os_version { if ( $OSNAME eq 'MSWin32' ) { require Win32; @@ -7608,16 +7610,10 @@ sub get_perl_module_version { my $item = $args{item}; return unless $item; - my $var = $item->{item} . '::VERSION'; - my $version = get_scalar($var); - PTDEBUG && _d('Perl version for', $var, '=', "$version"); - - return $version ? "$version" : $version; -} - -sub get_scalar { - no strict; - return ${*{shift()}}; + my $var = '$' . $item->{item} . '::VERSION'; + my $version = eval "use $item->{item}; $var;"; + PTDEBUG && _d('Perl version for', $var, '=', $version); + return $version; } sub get_mysql_variable { diff --git a/bin/pt-query-advisor b/bin/pt-query-advisor index cd3e9145..139221ea 100755 --- a/bin/pt-query-advisor +++ b/bin/pt-query-advisor @@ -7571,7 +7571,10 @@ sub get_instances_to_check { foreach my $instance ( @$instances ) { my $last_check_time = $last_check_time_for{ $instance->{id} }; PTDEBUG && _d('Intsance', $instance->{id}, 'last checked', - $last_check_time, 'now', $now, 'diff', $now - ($last_check_time || 0)); + $last_check_time, 'now', $now, 'diff', $now - ($last_check_time || 0), + 'hours until next check', + sprintf '%.2f', + ($check_time_limit - ($now - ($last_check_time || 0))) / 3600); if ( !defined $last_check_time || ($now - $last_check_time) >= $check_time_limit ) { PTDEBUG && _d('Time to check', Dumper($instance)); @@ -7800,7 +7803,6 @@ sub get_versions { } - sub get_os_version { if ( $OSNAME eq 'MSWin32' ) { require Win32; @@ -7891,16 +7893,10 @@ sub get_perl_module_version { my $item = $args{item}; return unless $item; - my $var = $item->{item} . '::VERSION'; - my $version = get_scalar($var); - PTDEBUG && _d('Perl version for', $var, '=', "$version"); - - return $version ? "$version" : $version; -} - -sub get_scalar { - no strict; - return ${*{shift()}}; + my $var = '$' . $item->{item} . '::VERSION'; + my $version = eval "use $item->{item}; $var;"; + PTDEBUG && _d('Perl version for', $var, '=', $version); + return $version; } sub get_mysql_variable { diff --git a/bin/pt-query-digest b/bin/pt-query-digest index 36c19e34..928d1cc5 100755 --- a/bin/pt-query-digest +++ b/bin/pt-query-digest @@ -13200,7 +13200,10 @@ sub get_instances_to_check { foreach my $instance ( @$instances ) { my $last_check_time = $last_check_time_for{ $instance->{id} }; PTDEBUG && _d('Intsance', $instance->{id}, 'last checked', - $last_check_time, 'now', $now, 'diff', $now - ($last_check_time || 0)); + $last_check_time, 'now', $now, 'diff', $now - ($last_check_time || 0), + 'hours until next check', + sprintf '%.2f', + ($check_time_limit - ($now - ($last_check_time || 0))) / 3600); if ( !defined $last_check_time || ($now - $last_check_time) >= $check_time_limit ) { PTDEBUG && _d('Time to check', Dumper($instance)); @@ -13429,7 +13432,6 @@ sub get_versions { } - sub get_os_version { if ( $OSNAME eq 'MSWin32' ) { require Win32; @@ -13520,16 +13522,10 @@ sub get_perl_module_version { my $item = $args{item}; return unless $item; - my $var = $item->{item} . '::VERSION'; - my $version = get_scalar($var); - PTDEBUG && _d('Perl version for', $var, '=', "$version"); - - return $version ? "$version" : $version; -} - -sub get_scalar { - no strict; - return ${*{shift()}}; + my $var = '$' . $item->{item} . '::VERSION'; + my $version = eval "use $item->{item}; $var;"; + PTDEBUG && _d('Perl version for', $var, '=', $version); + return $version; } sub get_mysql_variable { diff --git a/bin/pt-slave-delay b/bin/pt-slave-delay index 8daab2c3..9bf85331 100755 --- a/bin/pt-slave-delay +++ b/bin/pt-slave-delay @@ -3516,7 +3516,10 @@ sub get_instances_to_check { foreach my $instance ( @$instances ) { my $last_check_time = $last_check_time_for{ $instance->{id} }; PTDEBUG && _d('Intsance', $instance->{id}, 'last checked', - $last_check_time, 'now', $now, 'diff', $now - ($last_check_time || 0)); + $last_check_time, 'now', $now, 'diff', $now - ($last_check_time || 0), + 'hours until next check', + sprintf '%.2f', + ($check_time_limit - ($now - ($last_check_time || 0))) / 3600); if ( !defined $last_check_time || ($now - $last_check_time) >= $check_time_limit ) { PTDEBUG && _d('Time to check', Dumper($instance)); @@ -3745,7 +3748,6 @@ sub get_versions { } - sub get_os_version { if ( $OSNAME eq 'MSWin32' ) { require Win32; @@ -3836,16 +3838,10 @@ sub get_perl_module_version { my $item = $args{item}; return unless $item; - my $var = $item->{item} . '::VERSION'; - my $version = get_scalar($var); - PTDEBUG && _d('Perl version for', $var, '=', "$version"); - - return $version ? "$version" : $version; -} - -sub get_scalar { - no strict; - return ${*{shift()}}; + my $var = '$' . $item->{item} . '::VERSION'; + my $version = eval "use $item->{item}; $var;"; + PTDEBUG && _d('Perl version for', $var, '=', $version); + return $version; } sub get_mysql_variable { diff --git a/bin/pt-slave-restart b/bin/pt-slave-restart index 8cad2e69..923e8d48 100755 --- a/bin/pt-slave-restart +++ b/bin/pt-slave-restart @@ -4140,7 +4140,10 @@ sub get_instances_to_check { foreach my $instance ( @$instances ) { my $last_check_time = $last_check_time_for{ $instance->{id} }; PTDEBUG && _d('Intsance', $instance->{id}, 'last checked', - $last_check_time, 'now', $now, 'diff', $now - ($last_check_time || 0)); + $last_check_time, 'now', $now, 'diff', $now - ($last_check_time || 0), + 'hours until next check', + sprintf '%.2f', + ($check_time_limit - ($now - ($last_check_time || 0))) / 3600); if ( !defined $last_check_time || ($now - $last_check_time) >= $check_time_limit ) { PTDEBUG && _d('Time to check', Dumper($instance)); @@ -4369,7 +4372,6 @@ sub get_versions { } - sub get_os_version { if ( $OSNAME eq 'MSWin32' ) { require Win32; @@ -4460,16 +4462,10 @@ sub get_perl_module_version { my $item = $args{item}; return unless $item; - my $var = $item->{item} . '::VERSION'; - my $version = get_scalar($var); - PTDEBUG && _d('Perl version for', $var, '=', "$version"); - - return $version ? "$version" : $version; -} - -sub get_scalar { - no strict; - return ${*{shift()}}; + my $var = '$' . $item->{item} . '::VERSION'; + my $version = eval "use $item->{item}; $var;"; + PTDEBUG && _d('Perl version for', $var, '=', $version); + return $version; } sub get_mysql_variable { diff --git a/bin/pt-table-checksum b/bin/pt-table-checksum index a5d2035f..f5a01381 100755 --- a/bin/pt-table-checksum +++ b/bin/pt-table-checksum @@ -854,7 +854,10 @@ sub get_instances_to_check { foreach my $instance ( @$instances ) { my $last_check_time = $last_check_time_for{ $instance->{id} }; PTDEBUG && _d('Intsance', $instance->{id}, 'last checked', - $last_check_time, 'now', $now, 'diff', $now - ($last_check_time || 0)); + $last_check_time, 'now', $now, 'diff', $now - ($last_check_time || 0), + 'hours until next check', + sprintf '%.2f', + ($check_time_limit - ($now - ($last_check_time || 0))) / 3600); if ( !defined $last_check_time || ($now - $last_check_time) >= $check_time_limit ) { PTDEBUG && _d('Time to check', Dumper($instance)); @@ -1083,7 +1086,6 @@ sub get_versions { } - sub get_os_version { if ( $OSNAME eq 'MSWin32' ) { require Win32; @@ -1174,16 +1176,10 @@ sub get_perl_module_version { my $item = $args{item}; return unless $item; - my $var = $item->{item} . '::VERSION'; - my $version = get_scalar($var); - PTDEBUG && _d('Perl version for', $var, '=', "$version"); - - return $version ? "$version" : $version; -} - -sub get_scalar { - no strict; - return ${*{shift()}}; + my $var = '$' . $item->{item} . '::VERSION'; + my $version = eval "use $item->{item}; $var;"; + PTDEBUG && _d('Perl version for', $var, '=', $version); + return $version; } sub get_mysql_variable { diff --git a/bin/pt-table-sync b/bin/pt-table-sync index 96549837..1704ab3f 100755 --- a/bin/pt-table-sync +++ b/bin/pt-table-sync @@ -8978,7 +8978,10 @@ sub get_instances_to_check { foreach my $instance ( @$instances ) { my $last_check_time = $last_check_time_for{ $instance->{id} }; PTDEBUG && _d('Intsance', $instance->{id}, 'last checked', - $last_check_time, 'now', $now, 'diff', $now - ($last_check_time || 0)); + $last_check_time, 'now', $now, 'diff', $now - ($last_check_time || 0), + 'hours until next check', + sprintf '%.2f', + ($check_time_limit - ($now - ($last_check_time || 0))) / 3600); if ( !defined $last_check_time || ($now - $last_check_time) >= $check_time_limit ) { PTDEBUG && _d('Time to check', Dumper($instance)); @@ -9207,7 +9210,6 @@ sub get_versions { } - sub get_os_version { if ( $OSNAME eq 'MSWin32' ) { require Win32; @@ -9298,16 +9300,10 @@ sub get_perl_module_version { my $item = $args{item}; return unless $item; - my $var = $item->{item} . '::VERSION'; - my $version = get_scalar($var); - PTDEBUG && _d('Perl version for', $var, '=', "$version"); - - return $version ? "$version" : $version; -} - -sub get_scalar { - no strict; - return ${*{shift()}}; + my $var = '$' . $item->{item} . '::VERSION'; + my $version = eval "use $item->{item}; $var;"; + PTDEBUG && _d('Perl version for', $var, '=', $version); + return $version; } sub get_mysql_variable { diff --git a/bin/pt-upgrade b/bin/pt-upgrade index 9d221ee2..dce1ee5e 100755 --- a/bin/pt-upgrade +++ b/bin/pt-upgrade @@ -11797,7 +11797,10 @@ sub get_instances_to_check { foreach my $instance ( @$instances ) { my $last_check_time = $last_check_time_for{ $instance->{id} }; PTDEBUG && _d('Intsance', $instance->{id}, 'last checked', - $last_check_time, 'now', $now, 'diff', $now - ($last_check_time || 0)); + $last_check_time, 'now', $now, 'diff', $now - ($last_check_time || 0), + 'hours until next check', + sprintf '%.2f', + ($check_time_limit - ($now - ($last_check_time || 0))) / 3600); if ( !defined $last_check_time || ($now - $last_check_time) >= $check_time_limit ) { PTDEBUG && _d('Time to check', Dumper($instance)); @@ -12026,7 +12029,6 @@ sub get_versions { } - sub get_os_version { if ( $OSNAME eq 'MSWin32' ) { require Win32; @@ -12117,16 +12119,10 @@ sub get_perl_module_version { my $item = $args{item}; return unless $item; - my $var = $item->{item} . '::VERSION'; - my $version = get_scalar($var); - PTDEBUG && _d('Perl version for', $var, '=', "$version"); - - return $version ? "$version" : $version; -} - -sub get_scalar { - no strict; - return ${*{shift()}}; + my $var = '$' . $item->{item} . '::VERSION'; + my $version = eval "use $item->{item}; $var;"; + PTDEBUG && _d('Perl version for', $var, '=', $version); + return $version; } sub get_mysql_variable { diff --git a/bin/pt-variable-advisor b/bin/pt-variable-advisor index 5f91ae38..69c647b6 100755 --- a/bin/pt-variable-advisor +++ b/bin/pt-variable-advisor @@ -4423,7 +4423,10 @@ sub get_instances_to_check { foreach my $instance ( @$instances ) { my $last_check_time = $last_check_time_for{ $instance->{id} }; PTDEBUG && _d('Intsance', $instance->{id}, 'last checked', - $last_check_time, 'now', $now, 'diff', $now - ($last_check_time || 0)); + $last_check_time, 'now', $now, 'diff', $now - ($last_check_time || 0), + 'hours until next check', + sprintf '%.2f', + ($check_time_limit - ($now - ($last_check_time || 0))) / 3600); if ( !defined $last_check_time || ($now - $last_check_time) >= $check_time_limit ) { PTDEBUG && _d('Time to check', Dumper($instance)); @@ -4652,7 +4655,6 @@ sub get_versions { } - sub get_os_version { if ( $OSNAME eq 'MSWin32' ) { require Win32; @@ -4743,16 +4745,10 @@ sub get_perl_module_version { my $item = $args{item}; return unless $item; - my $var = $item->{item} . '::VERSION'; - my $version = get_scalar($var); - PTDEBUG && _d('Perl version for', $var, '=', "$version"); - - return $version ? "$version" : $version; -} - -sub get_scalar { - no strict; - return ${*{shift()}}; + my $var = '$' . $item->{item} . '::VERSION'; + my $version = eval "use $item->{item}; $var;"; + PTDEBUG && _d('Perl version for', $var, '=', $version); + return $version; } sub get_mysql_variable { diff --git a/lib/VersionCheck.pm b/lib/VersionCheck.pm index a7e96e32..acb67064 100644 --- a/lib/VersionCheck.pm +++ b/lib/VersionCheck.pm @@ -187,7 +187,10 @@ sub get_instances_to_check { foreach my $instance ( @$instances ) { my $last_check_time = $last_check_time_for{ $instance->{id} }; PTDEBUG && _d('Intsance', $instance->{id}, 'last checked', - $last_check_time, 'now', $now, 'diff', $now - ($last_check_time || 0)); + $last_check_time, 'now', $now, 'diff', $now - ($last_check_time || 0), + 'hours until next check', + sprintf '%.2f', + ($check_time_limit - ($now - ($last_check_time || 0))) / 3600); if ( !defined $last_check_time || ($now - $last_check_time) >= $check_time_limit ) { PTDEBUG && _d('Time to check', Dumper($instance)); @@ -455,7 +458,6 @@ sub get_versions { return \%versions; } - # ############################################################################# # Version getters # ############################################################################# @@ -554,18 +556,10 @@ sub get_perl_module_version { # If there's a var, then its an explicit Perl variable name to get, # else the item name is an implicity Perl module name to which we # append ::VERSION to get the module's version. - my $var = $item->{item} . '::VERSION'; - my $version = get_scalar($var); - PTDEBUG && _d('Perl version for', $var, '=', "$version"); - - # Explicitly stringify this else $PERL_VERSION will return - # as a version object. - return $version ? "$version" : $version; -} - -sub get_scalar { - no strict; - return ${*{shift()}}; + my $var = '$' . $item->{item} . '::VERSION'; + my $version = eval "use $item->{item}; $var;"; + PTDEBUG && _d('Perl version for', $var, '=', $version); + return $version; } sub get_mysql_variable { diff --git a/t/lib/VersionCheck.t b/t/lib/VersionCheck.t index 758a1f0d..8cb4f836 100644 --- a/t/lib/VersionCheck.t +++ b/t/lib/VersionCheck.t @@ -162,6 +162,10 @@ SKIP: { ); } +# ############################################################################# +# Version getters +# ############################################################################# + # I can't think of a way to make these 2 OS tests more specific # since the test env doesn't know what OS its running on. We # at least know that an OS should have these two things: a word @@ -188,6 +192,19 @@ ok( "Newline stripped from OS" ); +is( + VersionCheck::get_perl_module_version( + item => { + item => 'DBD::mysql', + type => 'perl_module_version', + vars => [], + }, + instances => [], + ), + $DBD::mysql::VERSION, + "get_perl_module_version(): DBD::mysql" +); + # ############################################################################# # Validate items # #############################################################################