Merged fix-1050737-1075638-ptc-division-by-zero-nibble_time

This commit is contained in:
Brian Fraser fraserb@gmail.com
2012-12-05 20:32:25 -03:00
2 changed files with 40 additions and 5 deletions

View File

@@ -9477,14 +9477,15 @@ sub main {
# Update the rate of rows per second for the entire server.
# This is used for the initial chunk size of the next table.
$total_rows += $cnt;
$total_time += $tbl->{nibble_time};
$total_rate = int($total_rows / $total_time);
$total_time += ($tbl->{nibble_time} || 0);
$total_rate = $total_time ? int($total_rows / $total_time) : 0;
PTDEBUG && _d('Total avg rate:', $total_rate);
# Adjust chunk size. This affects the next chunk.
if ( $o->get('chunk-time') ) {
$tbl->{chunk_size}
= $tbl->{rate}->update($cnt, $tbl->{nibble_time});
$tbl->{chunk_size} = $tbl->{nibble_time}
? $tbl->{rate}->update($cnt, $tbl->{nibble_time})
: $o->get('chunk-time');
if ( $tbl->{chunk_size} < 1 ) {
# This shouldn't happen. WeightedAvgRate::update() may return
@@ -9500,7 +9501,7 @@ sub main {
. "or increase --chunk-time. The last chunk, number "
. "$chunk of table $tbl->{db}.$tbl->{tbl}, "
. "selected $cnt rows and took "
. sprintf('%.3f', $tbl->{nibble_time})
. sprintf('%.3f', $tbl->{nibble_time} || 0)
. " seconds to execute.\n");
}
}

View File

@@ -206,6 +206,40 @@ like(
"Bug 1016131: ptc should skip tables where all columns are excluded"
);
# #############################################################################
# Illegal division by zero at pt-table-checksum line 7950
# https://bugs.launchpad.net/percona-toolkit/+bug/1075638
# and the ptc part of
# divison by zero errors on default Gentoo mysql
# https://bugs.launchpad.net/percona-toolkit/+bug/1050737
# #############################################################################
{
no warnings qw(redefine once);
my $orig = \&Time::HiRes::time;
my $time = Time::HiRes::time();
local *pt_table_checksum::time = local *Time::HiRes::time = sub { $time };
($output) = output(
sub { pt_table_checksum::main(@args,
qw(--replicate=pt.checksums -t test.t --chunk-size 10))
},
stderr => 1
);
unlike(
$output,
qr/Illegal division by zero/,
"Bugs 1075638 and 1050737: No division by zero error when nibble_time is zero"
);
is(
PerconaTest::count_checksum_results($output, 'diffs'),
3,
"Bug 1075638 and 1050737: ...And we get the correct number of diffs"
);
}
# #############################################################################
# pt-table-checksum doesn't warn if binlog_format=row or mixed on slaves
# https://bugs.launchpad.net/percona-toolkit/+bug/938068