diff --git a/bin/pt-archiver b/bin/pt-archiver index 1f88f553..364992f4 100755 --- a/bin/pt-archiver +++ b/bin/pt-archiver @@ -5294,7 +5294,7 @@ sub main { # ######################################################################## # Do the version-check # ######################################################################## - if ( $o->get('version-check') && ($o->has('quiet') && !$o->get('quiet')) ) { + if ( $o->get('version-check') && (!$o->has('quiet') || !$o->get('quiet')) ) { Pingback::version_check($src->{dbh}); } diff --git a/bin/pt-config-diff b/bin/pt-config-diff index 511cde7d..2f03a4d1 100755 --- a/bin/pt-config-diff +++ b/bin/pt-config-diff @@ -3978,7 +3978,7 @@ sub main { # ######################################################################## # Do the version-check # ######################################################################## - if ( $o->get('version-check') && ($o->has('quiet') && !$o->get('quiet')) ) { + if ( $o->get('version-check') && (!$o->has('quiet') || !$o->get('quiet')) ) { Pingback::version_check($configs[0]->{dbh}); } diff --git a/bin/pt-deadlock-logger b/bin/pt-deadlock-logger index f77661da..8b77d81f 100755 --- a/bin/pt-deadlock-logger +++ b/bin/pt-deadlock-logger @@ -3503,7 +3503,7 @@ sub main { # ######################################################################## # Do the version-check # ######################################################################## - if ( $o->get('version-check') && ($o->has('quiet') && !$o->get('quiet')) ) { + if ( $o->get('version-check') && (!$o->has('quiet') || !$o->get('quiet')) ) { Pingback::version_check($dbh); } diff --git a/bin/pt-diskstats b/bin/pt-diskstats index 907d8bf8..27f13c2e 100755 --- a/bin/pt-diskstats +++ b/bin/pt-diskstats @@ -4485,7 +4485,7 @@ sub main { # ######################################################################## # Do the version-check # ######################################################################## - if ( $o->get('version-check') && ($o->has('quiet') && !$o->get('quiet')) ) { + if ( $o->get('version-check') && (!$o->has('quiet') || !$o->get('quiet')) ) { Pingback::version_check(); } diff --git a/bin/pt-duplicate-key-checker b/bin/pt-duplicate-key-checker index 2253b7f7..a23256a1 100755 --- a/bin/pt-duplicate-key-checker +++ b/bin/pt-duplicate-key-checker @@ -4356,7 +4356,7 @@ sub main { # ######################################################################## # Do the version-check # ######################################################################## - if ( $o->get('version-check') && ($o->has('quiet') && !$o->get('quiet')) ) { + if ( $o->get('version-check') && (!$o->has('quiet') || !$o->get('quiet')) ) { Pingback::version_check($dbh); } diff --git a/bin/pt-find b/bin/pt-find index b9469569..eb9956c3 100755 --- a/bin/pt-find +++ b/bin/pt-find @@ -3524,7 +3524,7 @@ sub main { # ######################################################################## # Do the version-check # ######################################################################## - if ( $o->get('version-check') && ($o->has('quiet') && !$o->get('quiet')) ) { + if ( $o->get('version-check') && (!$o->has('quiet') || !$o->get('quiet')) ) { Pingback::version_check($dbh); } diff --git a/bin/pt-fk-error-logger b/bin/pt-fk-error-logger index 36d5ca84..f29d0a60 100755 --- a/bin/pt-fk-error-logger +++ b/bin/pt-fk-error-logger @@ -3148,7 +3148,7 @@ sub main { # ######################################################################## # Do the version-check # ######################################################################## - if ( $o->get('version-check') && ($o->has('quiet') && !$o->get('quiet')) ) { + if ( $o->get('version-check') && (!$o->has('quiet') || !$o->get('quiet')) ) { Pingback::version_check($dbh); } diff --git a/bin/pt-heartbeat b/bin/pt-heartbeat index 98c81163..1b169695 100755 --- a/bin/pt-heartbeat +++ b/bin/pt-heartbeat @@ -4644,7 +4644,7 @@ sub main { # ######################################################################## # Do the version-check # ######################################################################## - if ( $o->get('version-check') && ($o->has('quiet') && !$o->get('quiet')) ) { + if ( $o->get('version-check') && (!$o->has('quiet') || !$o->get('quiet')) ) { Pingback::version_check($dbh); } diff --git a/bin/pt-index-usage b/bin/pt-index-usage index 9f812960..38c28314 100755 --- a/bin/pt-index-usage +++ b/bin/pt-index-usage @@ -5987,7 +5987,7 @@ sub main { # ######################################################################## # Do the version-check # ######################################################################## - if ( $o->get('version-check') && ($o->has('quiet') && !$o->get('quiet')) ) { + if ( $o->get('version-check') && (!$o->has('quiet') || !$o->get('quiet')) ) { Pingback::version_check($dbh); } diff --git a/bin/pt-kill b/bin/pt-kill index 9626e1af..fd71c89c 100755 --- a/bin/pt-kill +++ b/bin/pt-kill @@ -6136,7 +6136,7 @@ sub main { # ######################################################################## # Do the version-check # ######################################################################## - if ( $o->get('version-check') && ($o->has('quiet') && !$o->get('quiet')) ) { + if ( $o->get('version-check') && (!$o->has('quiet') || !$o->get('quiet')) ) { Pingback::version_check($dbh); } diff --git a/bin/pt-online-schema-change b/bin/pt-online-schema-change index 76289af7..d6a83b59 100755 --- a/bin/pt-online-schema-change +++ b/bin/pt-online-schema-change @@ -7030,7 +7030,7 @@ sub main { # ######################################################################## # Do the version-check # ######################################################################## - if ( $o->get('version-check') && ($o->has('quiet') && !$o->get('quiet')) ) { + if ( $o->get('version-check') && (!$o->has('quiet') || !$o->get('quiet')) ) { Pingback::version_check($cxn->dbh()); } diff --git a/bin/pt-query-advisor b/bin/pt-query-advisor index 140d0a53..2c5d63b2 100755 --- a/bin/pt-query-advisor +++ b/bin/pt-query-advisor @@ -7363,7 +7363,7 @@ sub main { # ######################################################################## # Do the version-check # ######################################################################## - if ( $o->get('version-check') && ($o->has('quiet') && !$o->get('quiet')) ) { + if ( $o->get('version-check') && (!$o->has('quiet') || !$o->get('quiet')) ) { Pingback::version_check($dbh); } diff --git a/bin/pt-query-digest b/bin/pt-query-digest index 07a59afd..e6c85214 100755 --- a/bin/pt-query-digest +++ b/bin/pt-query-digest @@ -14161,7 +14161,7 @@ sub main { # ######################################################################## # Do the version-check # ######################################################################## - if ( $o->get('version-check') && ($o->has('quiet') && !$o->get('quiet')) ) { + if ( $o->get('version-check') && (!$o->has('quiet') || !$o->get('quiet')) ) { Pingback::version_check($qv_dbh || $ps_dbh || $ex_dbh); } diff --git a/bin/pt-slave-delay b/bin/pt-slave-delay index cd319dd0..ee02479c 100755 --- a/bin/pt-slave-delay +++ b/bin/pt-slave-delay @@ -3542,7 +3542,7 @@ sub main { # ######################################################################## # Do the version-check # ######################################################################## - if ( $o->get('version-check') && ($o->has('quiet') && !$o->get('quiet')) ) { + if ( $o->get('version-check') && (!$o->has('quiet') || !$o->get('quiet')) ) { Pingback::version_check($slave_dbh); } diff --git a/bin/pt-slave-restart b/bin/pt-slave-restart index c543e6a6..ff585fb5 100755 --- a/bin/pt-slave-restart +++ b/bin/pt-slave-restart @@ -4186,7 +4186,7 @@ sub main { # ######################################################################## # Do the version-check # ######################################################################## - if ( $o->get('version-check') && ($o->has('quiet') && !$o->get('quiet')) ) { + if ( $o->get('version-check') && (!$o->has('quiet') || !$o->get('quiet')) ) { Pingback::version_check($dbh); } diff --git a/bin/pt-table-checksum b/bin/pt-table-checksum index 7e78d9a2..aba4fcc4 100755 --- a/bin/pt-table-checksum +++ b/bin/pt-table-checksum @@ -8034,7 +8034,7 @@ sub main { # ######################################################################## # Do the version-check # ######################################################################## - if ( $o->get('version-check') && ($o->has('quiet') && !$o->get('quiet')) ) { + if ( $o->get('version-check') && (!$o->has('quiet') || !$o->get('quiet')) ) { Pingback::version_check($master_dbh); } diff --git a/bin/pt-table-sync b/bin/pt-table-sync index 53aa432e..32558a82 100755 --- a/bin/pt-table-sync +++ b/bin/pt-table-sync @@ -9437,7 +9437,7 @@ sub main { # ######################################################################## # Do the version-check # ######################################################################## - if ( $o->get('version-check') && ($o->has('quiet') && !$o->get('quiet')) ) { + if ( $o->get('version-check') && (!$o->has('quiet') || !$o->get('quiet')) ) { Pingback::version_check($dsns[0]->{dbh}); } diff --git a/bin/pt-upgrade b/bin/pt-upgrade index d2d032f9..3930e876 100755 --- a/bin/pt-upgrade +++ b/bin/pt-upgrade @@ -11604,7 +11604,7 @@ sub main { # ######################################################################## # Do the version-check # ######################################################################## - if ( $o->get('version-check') && ($o->has('quiet') && !$o->get('quiet')) ) { + if ( $o->get('version-check') && (!$o->has('quiet') || !$o->get('quiet')) ) { Pingback::version_check($hosts->[0]->{dbh}); } diff --git a/bin/pt-variable-advisor b/bin/pt-variable-advisor index 6a5ab963..acf0d69f 100755 --- a/bin/pt-variable-advisor +++ b/bin/pt-variable-advisor @@ -4468,7 +4468,7 @@ sub main { # ######################################################################## # Do the version-check # ######################################################################## - if ( $o->get('version-check') && ($o->has('quiet') && !$o->get('quiet')) ) { + if ( $o->get('version-check') && (!$o->has('quiet') || !$o->get('quiet')) ) { Pingback::version_check($dbh); } diff --git a/t/pt-query-digest/version_check.t b/t/pt-query-digest/version_check.t new file mode 100644 index 00000000..81639a4d --- /dev/null +++ b/t/pt-query-digest/version_check.t @@ -0,0 +1,126 @@ +#!/usr/bin/env perl + +BEGIN { + die "The PERCONA_TOOLKIT_BRANCH environment variable is not set.\n" + unless $ENV{PERCONA_TOOLKIT_BRANCH} && -d $ENV{PERCONA_TOOLKIT_BRANCH}; + unshift @INC, "$ENV{PERCONA_TOOLKIT_BRANCH}/lib"; +}; + +use strict; +use warnings FATAL => 'all'; +use English qw(-no_match_vars); +use Test::More; + +use PerconaTest; +use Sandbox; +use Data::Dumper; +use File::Spec; +use Time::HiRes qw(time); +require "$trunk/bin/pt-query-digest"; + +# PerconaTest.pm sets this because normal tests shouldn't v-c. +delete $ENV{PERCONA_VERSION_CHECK}; + +my $output; +my $cmd = "$trunk/bin/pt-query-digest --limit 1 $trunk/t/lib/samples/slowlogs/slow001.txt"; + +# Pingback.pm does this too. +my $dir = File::Spec->tmpdir(); +my $check_time_file = File::Spec->catfile($dir,'percona-toolkit-version-check'); +unlink $check_time_file if -f $check_time_file; + +$output = `PTVCDEBUG=1 $cmd 2>&1`; + +like( + $output, + qr/(?:VersionCheck|Pingback|Percona suggests)/, + "Looks like the version-check happened" +) or diag($output); + +like( + $output, + qr/# Query 1: 0 QPS, 0x concurrency, ID 0x7F7D57ACDD8A346E at byte 0/, + "Tool ran after version-check" +) or diag(Dumper($output)); + +ok( + -f $check_time_file, + "Created percona-toolkit-version-check file" +); + +# ########################################################################### +# v-c file should limit checks to 1 per 24 hours +# ########################################################################### + +$output = `PTVCDEBUG=1 $cmd 2>&1`; + +like( + $output, + qr/It is not time to --version-checka again/, + "Doesn't always check because of time limit" +); + +unlink $check_time_file if -f $check_time_file; + +# ########################################################################### +# Fake v.percona.com not responding by using a different, non-existent URL. +# ########################################################################### + +my $t0 = time; + +$output = `PTVCDEBUG=1 PERCONA_VERSION_CHECK_URL='http://x.percona.com' $cmd 2>&1`; + +my $t = time - $t0; + +like( + $output, + qr/Error.+?GET http:\/\/x\.percona\.com.+?HTTP status 5\d+/, + "The Percona server didn't respond" +); + +# In actuality it should only wait 2s, but on slow boxes all the other +# stuff the tool does may cause the time to be much greater than 2. +# If nothing else, this tests that the timeout isn't something crazy +# like 30s. +cmp_ok( + $t, + '<', + 6, + "Tool waited a short while for the Percona server to respond" +); + +# ########################################################################### +# Disable the v-c. +# ########################################################################### + +unlink $check_time_file if -f $check_time_file; + +$output = `PTVCDEBUG=1 $cmd --no-version-check 2>&1`; + +unlike( + $output, + qr/(?:VersionCheck|Pingback|Percona suggests)/, + "Looks like --no-version-check disabled the version-check" +) or diag($output); + +ok( + !-f $check_time_file, + "percona-toolkit-version-check file not created with --no-version-check" +); + +# PERCONA_VERSION_CHECK=0 is handled in Pingback, so it will print a line +# for PTVCDEBUG saying why it didn't run. So we just check that it doesn't +# create the file which also signifies that it didn't run. +$output = `PTVCDEBUG=1 PERCONA_VERSION_CHECK=0 $cmd 2>&1`; + +ok( + !-f $check_time_file, + "Looks like PERCONA_VERSION_CHECK=0 disabled the version-check" +); + +# ############################################################################# +# Done. +# ############################################################################# +unlink $check_time_file if -f $check_time_file; +done_testing; +exit;