diff --git a/bin/pt-table-checksum b/bin/pt-table-checksum index ac4ee8c5..42029680 100755 --- a/bin/pt-table-checksum +++ b/bin/pt-table-checksum @@ -7690,7 +7690,7 @@ sub main { ); # Check each slave for checksum diffs. - my $max_diffs = 0; + my %diff_chunks; foreach my $slave ( @$slaves ) { eval { my $diffs = $rc->find_replication_differences( @@ -7700,10 +7700,9 @@ sub main { ); PTDEBUG && _d(scalar @$diffs, 'checksum diffs on', $slave->name()); - if ( my $n_diffs = scalar @$diffs ) { - # https://bugs.launchpad.net/percona-toolkit/+bug/1030031 - $max_diffs = $n_diffs if $n_diffs > $max_diffs; - } + # Save unique chunks that differ. + # https://bugs.launchpad.net/percona-toolkit/+bug/1030031 + map { $diff_chunks{ $_->{chunk} }++ } @$diffs; }; if ($EVAL_ERROR) { if ( $o->get('quiet') < 2 ) { @@ -7716,7 +7715,7 @@ sub main { $tbl->{checksum_results}->{errors}++; } } - $tbl->{checksum_results}->{diffs} = $max_diffs; + $tbl->{checksum_results}->{diffs} = scalar keys %diff_chunks; } # Print table's checksum results if we're not being quiet, diff --git a/t/pt-table-checksum/bugs.t b/t/pt-table-checksum/bugs.t index e0149c9a..8c6e0fe7 100644 --- a/t/pt-table-checksum/bugs.t +++ b/t/pt-table-checksum/bugs.t @@ -42,7 +42,7 @@ elsif ( !$slave2_dbh ) { plan skip_all => 'Cannot connect to sandbox slave2'; } else { - plan tests => 9; + plan tests => 10; } # The sandbox servers run with lock_wait_timeout=3 and it's not dynamic @@ -155,7 +155,6 @@ $slave1_dbh->do("SET SQL_LOG_BIN=1"); $output = output( sub { pt_table_checksum::main(@args, qw(-t test.t --chunk-size 10)) }, - stderr => 1, ); is( @@ -164,6 +163,21 @@ is( "Bug 1030031 (wrong DIFFS): 2 diffs" ); +# Restore slave2, but then give it 1 diff that's not the same chunk# +# as slave1, so there's 3 unique chunk that differ. +$slave2_dbh->do("UPDATE test.t SET c='e' WHERE id=5"); +$slave2_dbh->do("UPDATE test.t SET c='' WHERE id=26"); + +$output = output( + sub { pt_table_checksum::main(@args, qw(-t test.t --chunk-size 10)) }, +); + +is( + PerconaTest::count_checksum_results($output, 'diffs'), + 3, + "Bug 1030031 (wrong DIFFS): 3 diffs" +); + # ############################################################################# # Done. # #############################################################################