diff --git a/bin/pt-upgrade b/bin/pt-upgrade index 7ae17717..bd09e993 100755 --- a/bin/pt-upgrade +++ b/bin/pt-upgrade @@ -5858,7 +5858,7 @@ sub report_unreported_classes { class => $class, reasons => ["$reason, but hasn't been reported yet"], ); - $class = { reported => 1 }; + $class->{reported} = 1; }; if ( $EVAL_ERROR ) { $success = 1; @@ -5872,11 +5872,11 @@ sub report_unreported_classes { sub report_if_ready { my ($self, %args) = @_; my $class = $args{class}; - - my $max_examples = $self->max_class_size; + my $max_examples = $self->max_examples; + my $max_class_size = $self->max_class_size; my @report_reasons; - if ( scalar keys %{$class->{unique_queries}} >= $self->max_class_size ) { + if ( scalar keys %{$class->{unique_queries}} >= $max_class_size ) { push @report_reasons, "it's full (--max-class-size)"; } @@ -5888,15 +5888,15 @@ sub report_if_ready { push @report_reasons, "there are $max_examples warning diffs"; } - if ( scalar @{$class->{row_diffs}} >= $self->max_examples ) { + if ( scalar @{$class->{row_diffs}} >= $max_examples ) { push @report_reasons, "there are $max_examples row diffs"; } - if ( scalar @{$class->{errors}} >= $self->max_examples ) { + if ( scalar @{$class->{errors}} >= $max_examples ) { push @report_reasons, "there are $max_examples query errors"; } - if ( scalar @{$class->{failures}} >= $self->max_examples ) { + if ( scalar @{$class->{failures}} >= $max_examples ) { push @report_reasons, "there are $max_examples failed queries"; } @@ -5906,7 +5906,7 @@ sub report_if_ready { class => $class, reasons => \@report_reasons, ); - $class = { reported => 1 }; + $class->{reported} = 1; } return; @@ -5917,6 +5917,11 @@ sub report_class { my $class = $args{class}; my $reasons = $args{reasons}; + if ( $class->{reported} ) { + PTDEBUG && _d('Class already reported'); + return; + } + PTDEBUG && _d('Reporting class', $class->{id}, $class->{fingerprint}); $self->_print_class_header( diff --git a/lib/UpgradeResults.pm b/lib/UpgradeResults.pm index 9ba00524..4959710c 100644 --- a/lib/UpgradeResults.pm +++ b/lib/UpgradeResults.pm @@ -220,7 +220,7 @@ sub report_unreported_classes { class => $class, reasons => ["$reason, but hasn't been reported yet"], ); - $class = { reported => 1 }; + $class->{reported} = 1; }; if ( $EVAL_ERROR ) { $success = 1; @@ -234,11 +234,11 @@ sub report_unreported_classes { sub report_if_ready { my ($self, %args) = @_; my $class = $args{class}; - - my $max_examples = $self->max_class_size; + my $max_examples = $self->max_examples; + my $max_class_size = $self->max_class_size; my @report_reasons; - if ( scalar keys %{$class->{unique_queries}} >= $self->max_class_size ) { + if ( scalar keys %{$class->{unique_queries}} >= $max_class_size ) { push @report_reasons, "it's full (--max-class-size)"; } @@ -250,15 +250,15 @@ sub report_if_ready { push @report_reasons, "there are $max_examples warning diffs"; } - if ( scalar @{$class->{row_diffs}} >= $self->max_examples ) { + if ( scalar @{$class->{row_diffs}} >= $max_examples ) { push @report_reasons, "there are $max_examples row diffs"; } - if ( scalar @{$class->{errors}} >= $self->max_examples ) { + if ( scalar @{$class->{errors}} >= $max_examples ) { push @report_reasons, "there are $max_examples query errors"; } - if ( scalar @{$class->{failures}} >= $self->max_examples ) { + if ( scalar @{$class->{failures}} >= $max_examples ) { push @report_reasons, "there are $max_examples failed queries"; } @@ -268,7 +268,7 @@ sub report_if_ready { class => $class, reasons => \@report_reasons, ); - $class = { reported => 1 }; + $class->{reported} = 1; } return; @@ -279,6 +279,11 @@ sub report_class { my $class = $args{class}; my $reasons = $args{reasons}; + if ( $class->{reported} ) { + PTDEBUG && _d('Class already reported'); + return; + } + PTDEBUG && _d('Reporting class', $class->{id}, $class->{fingerprint}); $self->_print_class_header( diff --git a/t/pt-upgrade/samples/008/conf b/t/pt-upgrade/samples/008/conf new file mode 100644 index 00000000..367cb152 --- /dev/null +++ b/t/pt-upgrade/samples/008/conf @@ -0,0 +1,2 @@ +type=rawlog +max-examples=3 diff --git a/t/pt-upgrade/samples/008/fingerprint-grouping-and-max-examples-issue-1421405.log b/t/pt-upgrade/samples/008/fingerprint-grouping-and-max-examples-issue-1421405.log new file mode 100644 index 00000000..2a748eaa --- /dev/null +++ b/t/pt-upgrade/samples/008/fingerprint-grouping-and-max-examples-issue-1421405.log @@ -0,0 +1,9 @@ +select @@port +select @@port +select @@port +select @@port +select @@port +select @@port +select @@port +select @@port +select @@port diff --git a/t/pt-upgrade/samples/008/fingerprint-grouping-and-max-examples-issue-1421405.txt b/t/pt-upgrade/samples/008/fingerprint-grouping-and-max-examples-issue-1421405.txt new file mode 100644 index 00000000..4f767e26 --- /dev/null +++ b/t/pt-upgrade/samples/008/fingerprint-grouping-and-max-examples-issue-1421405.txt @@ -0,0 +1,75 @@ + +#----------------------------------------------------------------------- +# Logs +#----------------------------------------------------------------------- + +File: ... +Size: 126 + +#----------------------------------------------------------------------- +# Hosts +#----------------------------------------------------------------------- + +host1: + + DSN: h=127.1,P=12345 + hostname: ... + MySQL: ... + +host2: + + DSN: h=127.1,P=12348 + hostname: ... + MySQL: ... + +######################################################################## +# Query class 3530F787A2430DC8 +######################################################################## + +Reporting class because there are 3 row diffs. + +Total queries 3 +Unique queries 3 +Discarded queries 0 + +select @@port + +## +## Row diffs: 3 +## + +-- 1. + +@ row 1 +< 12345 +> 12348 + +select @@port + +-- 2. + +@ row 1 +< 12345 +> 12348 + +select @@port + +-- 3. + +@ row 1 +< 12345 +> 12348 + +select @@port + +#----------------------------------------------------------------------- +# Stats +#----------------------------------------------------------------------- + +failed_queries 0 +not_select 0 +queries_filtered 0 +queries_no_diffs 0 +queries_read 9 +queries_with_diffs 9 +queries_with_errors 0