diff --git a/bin/pt-online-schema-change b/bin/pt-online-schema-change index 5a17df6a..b1a3bbce 100755 --- a/bin/pt-online-schema-change +++ b/bin/pt-online-schema-change @@ -4785,6 +4785,7 @@ package MySQLStatusWaiter; use strict; use warnings FATAL => 'all'; +use POSIX qw( ceil ); use English qw(-no_match_vars); use constant PTDEBUG => $ENV{PTDEBUG} || 0; @@ -4950,8 +4951,8 @@ sub _check_and_set_vals { } else { PTDEBUG && _d('Initial', $var, 'value:', $init_val); - $val = int(($init_val * $threshold_factor) + $init_val); - $vars->{$var} = $val; + $val = ($init_val * $threshold_factor) + $init_val; + $vars->{$var} = int(ceil($val)); } PTDEBUG && _d('Wait if', $var, '>=', $val); } diff --git a/bin/pt-table-checksum b/bin/pt-table-checksum index cc5f7af7..276a71fc 100755 --- a/bin/pt-table-checksum +++ b/bin/pt-table-checksum @@ -8347,6 +8347,7 @@ package MySQLStatusWaiter; use strict; use warnings FATAL => 'all'; +use POSIX qw( ceil ); use English qw(-no_match_vars); use constant PTDEBUG => $ENV{PTDEBUG} || 0; @@ -8512,8 +8513,8 @@ sub _check_and_set_vals { } else { PTDEBUG && _d('Initial', $var, 'value:', $init_val); - $val = int(($init_val * $threshold_factor) + $init_val); - $vars->{$var} = $val; + $val = ($init_val * $threshold_factor) + $init_val; + $vars->{$var} = int(ceil($val)); } PTDEBUG && _d('Wait if', $var, '>=', $val); } diff --git a/lib/MySQLStatusWaiter.pm b/lib/MySQLStatusWaiter.pm index ab5bfa55..99177be6 100644 --- a/lib/MySQLStatusWaiter.pm +++ b/lib/MySQLStatusWaiter.pm @@ -24,6 +24,7 @@ package MySQLStatusWaiter; use strict; use warnings FATAL => 'all'; +use POSIX qw( ceil ); use English qw(-no_match_vars); use constant PTDEBUG => $ENV{PTDEBUG} || 0; @@ -221,8 +222,8 @@ sub _check_and_set_vals { } else { PTDEBUG && _d('Initial', $var, 'value:', $init_val); - $val = int(($init_val * $threshold_factor) + $init_val); - $vars->{$var} = $val; + $val = ($init_val * $threshold_factor) + $init_val; + $vars->{$var} = int(ceil($val)); } PTDEBUG && _d('Wait if', $var, '>=', $val); } diff --git a/t/lib/MySQLStatusWaiter.t b/t/lib/MySQLStatusWaiter.t index d09e7e2c..1dadfccd 100644 --- a/t/lib/MySQLStatusWaiter.t +++ b/t/lib/MySQLStatusWaiter.t @@ -8,6 +8,7 @@ BEGIN { use strict; use warnings FATAL => 'all'; +use POSIX qw( ceil floor ); use English qw(-no_match_vars); use Test::More tests => 17; @@ -19,6 +20,7 @@ my @checked = (); my $slept = 0; my @vals = (); + sub oktorun { return $oktorun; } @@ -76,33 +78,35 @@ throws_ok( "Catch non-existent variable" ); + # ############################################################################ -# Use initial vals + 20%. +# Initial vals + 20% # ############################################################################ + @vals = ( # initial check for existence - { Threads_connected => 10, }, - { Threads_running => 5, }, + { Threads_connected => 9, }, + { Threads_running => 4, }, # first check, no wait { Threads_connected => 1, }, { Threads_running => 1, }, # second check, wait - { Threads_connected => 12, }, # too high - { Threads_running => 6, }, # too high + { Threads_connected => 11, }, # too high + { Threads_running => 5, }, # too high # third check, wait - { Threads_connected => 12, }, # too high - { Threads_running => 5, }, + { Threads_connected => 11, }, # too high + { Threads_running => 4, }, # fourth check, wait { Threads_connected => 10, }, - { Threads_running => 6, }, # too high + { Threads_running => 5, }, # too high # fifth check, no wait { Threads_connected => 10, }, - { Threads_running => 5, }, + { Threads_running => 4, }, ); $oktorun = 1; @@ -117,10 +121,10 @@ my $sw = new MySQLStatusWaiter( is_deeply( $sw->max_values(), { - Threads_connected => int(10 + (10 * 0.20)), - Threads_running => int(5 + (5 * 0.20)), + Threads_connected => ceil(9 + (9 * 0.20)), + Threads_running => ceil(4 + (4 * 0.20)), }, - "Initial values +20%" + "Threshold = ceil(InitialValue * 1.2)" ); # first check diff --git a/t/pt-table-checksum/basics.t b/t/pt-table-checksum/basics.t index 1f4c43ff..d99d0d32 100644 --- a/t/pt-table-checksum/basics.t +++ b/t/pt-table-checksum/basics.t @@ -97,6 +97,7 @@ ok( "Static chunk size (--chunk-time 0)" ); + $row = $master_dbh->selectrow_arrayref("select count(*) from percona.checksums"); ok( $row->[0] >= 85 && $row->[0] <= 90,