Merge lp:~percona-toolkit-dev/percona-toolkit/pt-upgrade-fails-to-aggregate-queries-based-on-fingerprint-1421405 into lp:~percona-toolkit-dev/percona-toolkit/release-2.2.14

Proposed by Frank Cizmich
Status: Merged
Approved by: Daniel Nichter
Approved revision: 614
Merged at revision: 623
Proposed branch: lp:~percona-toolkit-dev/percona-toolkit/pt-upgrade-fails-to-aggregate-queries-based-on-fingerprint-1421405
Merge into: lp:~percona-toolkit-dev/percona-toolkit/release-2.2.14
Diff against target: 237 lines (+112/-16)
5 files modified
bin/pt-upgrade (+13/-8)
lib/UpgradeResults.pm (+13/-8)
t/pt-upgrade/samples/008/conf (+2/-0)
t/pt-upgrade/samples/008/fingerprint-grouping-and-max-examples-issue-1421405.log (+9/-0)
t/pt-upgrade/samples/008/fingerprint-grouping-and-max-examples-issue-1421405.txt (+75/-0)
To merge this branch: bzr merge lp:~percona-toolkit-dev/percona-toolkit/pt-upgrade-fails-to-aggregate-queries-based-on-fingerprint-1421405
Reviewer Review Type Date Requested Status
Daniel Nichter Approve
Review via email: mp+254983@code.launchpad.net

Description of the change

problem:
pt-upgrade reported differences of same class of queries (same fingerprint) repeatedly.

solution:
fixed by correcting the way "reported" attribute was set and also checking for it before reporting.

problem:
erroneous message "Reporting class because there are 1000 row diffs." which always confused the max number of rows in a class (1000) with max number of diffs (default 3)
(Same fix for 'errors' and 'failures')

solution:
fix is fairly obvious from the diffs

notes:
both of these were fixed in UpgradeResults module
test added

To post a comment you must log in.
Revision history for this message
Daniel Nichter (daniel-nichter) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'bin/pt-upgrade'
2--- bin/pt-upgrade 2015-01-23 10:19:56 +0000
3+++ bin/pt-upgrade 2015-04-01 20:08:35 +0000
4@@ -5858,7 +5858,7 @@
5 class => $class,
6 reasons => ["$reason, but hasn't been reported yet"],
7 );
8- $class = { reported => 1 };
9+ $class->{reported} = 1;
10 };
11 if ( $EVAL_ERROR ) {
12 $success = 1;
13@@ -5872,11 +5872,11 @@
14 sub report_if_ready {
15 my ($self, %args) = @_;
16 my $class = $args{class};
17-
18- my $max_examples = $self->max_class_size;
19+ my $max_examples = $self->max_examples;
20+ my $max_class_size = $self->max_class_size;
21 my @report_reasons;
22
23- if ( scalar keys %{$class->{unique_queries}} >= $self->max_class_size ) {
24+ if ( scalar keys %{$class->{unique_queries}} >= $max_class_size ) {
25 push @report_reasons, "it's full (--max-class-size)";
26 }
27
28@@ -5888,15 +5888,15 @@
29 push @report_reasons, "there are $max_examples warning diffs";
30 }
31
32- if ( scalar @{$class->{row_diffs}} >= $self->max_examples ) {
33+ if ( scalar @{$class->{row_diffs}} >= $max_examples ) {
34 push @report_reasons, "there are $max_examples row diffs";
35 }
36
37- if ( scalar @{$class->{errors}} >= $self->max_examples ) {
38+ if ( scalar @{$class->{errors}} >= $max_examples ) {
39 push @report_reasons, "there are $max_examples query errors";
40 }
41
42- if ( scalar @{$class->{failures}} >= $self->max_examples ) {
43+ if ( scalar @{$class->{failures}} >= $max_examples ) {
44 push @report_reasons, "there are $max_examples failed queries";
45 }
46
47@@ -5906,7 +5906,7 @@
48 class => $class,
49 reasons => \@report_reasons,
50 );
51- $class = { reported => 1 };
52+ $class->{reported} = 1;
53 }
54
55 return;
56@@ -5917,6 +5917,11 @@
57 my $class = $args{class};
58 my $reasons = $args{reasons};
59
60+ if ( $class->{reported} ) {
61+ PTDEBUG && _d('Class already reported');
62+ return;
63+ }
64+
65 PTDEBUG && _d('Reporting class', $class->{id}, $class->{fingerprint});
66
67 $self->_print_class_header(
68
69=== modified file 'lib/UpgradeResults.pm'
70--- lib/UpgradeResults.pm 2013-03-14 15:20:54 +0000
71+++ lib/UpgradeResults.pm 2015-04-01 20:08:35 +0000
72@@ -220,7 +220,7 @@
73 class => $class,
74 reasons => ["$reason, but hasn't been reported yet"],
75 );
76- $class = { reported => 1 };
77+ $class->{reported} = 1;
78 };
79 if ( $EVAL_ERROR ) {
80 $success = 1;
81@@ -234,11 +234,11 @@
82 sub report_if_ready {
83 my ($self, %args) = @_;
84 my $class = $args{class};
85-
86- my $max_examples = $self->max_class_size;
87+ my $max_examples = $self->max_examples;
88+ my $max_class_size = $self->max_class_size;
89 my @report_reasons;
90
91- if ( scalar keys %{$class->{unique_queries}} >= $self->max_class_size ) {
92+ if ( scalar keys %{$class->{unique_queries}} >= $max_class_size ) {
93 push @report_reasons, "it's full (--max-class-size)";
94 }
95
96@@ -250,15 +250,15 @@
97 push @report_reasons, "there are $max_examples warning diffs";
98 }
99
100- if ( scalar @{$class->{row_diffs}} >= $self->max_examples ) {
101+ if ( scalar @{$class->{row_diffs}} >= $max_examples ) {
102 push @report_reasons, "there are $max_examples row diffs";
103 }
104
105- if ( scalar @{$class->{errors}} >= $self->max_examples ) {
106+ if ( scalar @{$class->{errors}} >= $max_examples ) {
107 push @report_reasons, "there are $max_examples query errors";
108 }
109
110- if ( scalar @{$class->{failures}} >= $self->max_examples ) {
111+ if ( scalar @{$class->{failures}} >= $max_examples ) {
112 push @report_reasons, "there are $max_examples failed queries";
113 }
114
115@@ -268,7 +268,7 @@
116 class => $class,
117 reasons => \@report_reasons,
118 );
119- $class = { reported => 1 };
120+ $class->{reported} = 1;
121 }
122
123 return;
124@@ -279,6 +279,11 @@
125 my $class = $args{class};
126 my $reasons = $args{reasons};
127
128+ if ( $class->{reported} ) {
129+ PTDEBUG && _d('Class already reported');
130+ return;
131+ }
132+
133 PTDEBUG && _d('Reporting class', $class->{id}, $class->{fingerprint});
134
135 $self->_print_class_header(
136
137=== added directory 't/pt-upgrade/samples/008'
138=== added file 't/pt-upgrade/samples/008/conf'
139--- t/pt-upgrade/samples/008/conf 1970-01-01 00:00:00 +0000
140+++ t/pt-upgrade/samples/008/conf 2015-04-01 20:08:35 +0000
141@@ -0,0 +1,2 @@
142+type=rawlog
143+max-examples=3
144
145=== added file 't/pt-upgrade/samples/008/fingerprint-grouping-and-max-examples-issue-1421405.log'
146--- t/pt-upgrade/samples/008/fingerprint-grouping-and-max-examples-issue-1421405.log 1970-01-01 00:00:00 +0000
147+++ t/pt-upgrade/samples/008/fingerprint-grouping-and-max-examples-issue-1421405.log 2015-04-01 20:08:35 +0000
148@@ -0,0 +1,9 @@
149+select @@port
150+select @@port
151+select @@port
152+select @@port
153+select @@port
154+select @@port
155+select @@port
156+select @@port
157+select @@port
158
159=== added file 't/pt-upgrade/samples/008/fingerprint-grouping-and-max-examples-issue-1421405.txt'
160--- t/pt-upgrade/samples/008/fingerprint-grouping-and-max-examples-issue-1421405.txt 1970-01-01 00:00:00 +0000
161+++ t/pt-upgrade/samples/008/fingerprint-grouping-and-max-examples-issue-1421405.txt 2015-04-01 20:08:35 +0000
162@@ -0,0 +1,75 @@
163+
164+#-----------------------------------------------------------------------
165+# Logs
166+#-----------------------------------------------------------------------
167+
168+File: ...
169+Size: 126
170+
171+#-----------------------------------------------------------------------
172+# Hosts
173+#-----------------------------------------------------------------------
174+
175+host1:
176+
177+ DSN: h=127.1,P=12345
178+ hostname: ...
179+ MySQL: ...
180+
181+host2:
182+
183+ DSN: h=127.1,P=12348
184+ hostname: ...
185+ MySQL: ...
186+
187+########################################################################
188+# Query class 3530F787A2430DC8
189+########################################################################
190+
191+Reporting class because there are 3 row diffs.
192+
193+Total queries 3
194+Unique queries 3
195+Discarded queries 0
196+
197+select @@port
198+
199+##
200+## Row diffs: 3
201+##
202+
203+-- 1.
204+
205+@ row 1
206+< 12345
207+> 12348
208+
209+select @@port
210+
211+-- 2.
212+
213+@ row 1
214+< 12345
215+> 12348
216+
217+select @@port
218+
219+-- 3.
220+
221+@ row 1
222+< 12345
223+> 12348
224+
225+select @@port
226+
227+#-----------------------------------------------------------------------
228+# Stats
229+#-----------------------------------------------------------------------
230+
231+failed_queries 0
232+not_select 0
233+queries_filtered 0
234+queries_no_diffs 0
235+queries_read 9
236+queries_with_diffs 9
237+queries_with_errors 0

Subscribers

People subscribed via source and target branches

to all changes: