From 793ff24a6944df0930e5f58b49973b1010cdabef Mon Sep 17 00:00:00 2001 From: Frank Cizmich Date: Wed, 25 Mar 2015 15:02:22 -0300 Subject: [PATCH] Added warning about size of fulltext keys not being computed, if present. Sort key report by key name for ease of testing. --- bin/pt-duplicate-key-checker | 28 +++++++++++++------ t/pt-duplicate-key-checker/basics.t | 15 ++++++++-- .../samples/simple_dupe_bug_1217013.txt | 4 +-- 3 files changed, 34 insertions(+), 13 deletions(-) diff --git a/bin/pt-duplicate-key-checker b/bin/pt-duplicate-key-checker index 38f31548..56925bbb 100755 --- a/bin/pt-duplicate-key-checker +++ b/bin/pt-duplicate-key-checker @@ -4881,7 +4881,7 @@ my $hdr_fmt = "# %-${hdr_width}s\n"; sub main { local @ARGV = @_; # set global ARGV for this package - my %summary = ( 'Total Indexes' => 0 ); + my %summary = ( 'items' => {'Total Indexes' => 0} ); my %seen_tbl; my $q = new Quoter(); @@ -5014,7 +5014,7 @@ sub main { # Always count Total Keys so print_key_summary won't die # because %summary is empty. - $summary{'Total Indexes'} += (scalar keys %$keys) + $summary{items}->{'Total Indexes'} += (scalar keys %$keys) + (scalar keys %$fks) } }; @@ -5042,7 +5042,8 @@ sub print_all_keys { printf $hdr_fmt, "$db.$tbl"; printf $hdr_fmt, ('#' x $hdr_width); } - foreach my $key ( values %$keys ) { + # Print keys sorted by name (easier to test) + foreach my $key ( sort {$a->{name} cmp $b->{name}} values %$keys ) { print "\n# $key->{name} ($key->{colnames})"; } print "\n"; @@ -5067,6 +5068,10 @@ sub print_duplicate_key { my $summary = $args{summary}; my $struct = $tp->parse($args{tbl_info}->{ddl}); + if ($dupe->{ddl} =~ /FULLTEXT/) { + $summary->{has_fulltext_dupe}++; + } + if ( !$seen_tbl->{"$db$tbl"}++ ) { printf $hdr_fmt, ('#' x $hdr_width); printf $hdr_fmt, "$db.$tbl"; @@ -5109,7 +5114,7 @@ sub print_duplicate_key { print "\n"; if ( $o->get('summary') && $summary ) { - $summary->{'Total Duplicate Indexes'} += 1; + $summary->{'items'}->{'Total Duplicate Indexes'} += 1; my ($size, $chosen_key) = $ks->get_key_size( name => $dupe->{key}, cols => $dupe->{cols}, @@ -5126,7 +5131,7 @@ sub print_duplicate_key { $size ||= 0; # Create Size Duplicate Keys summary even if there's no valid keys. - $summary->{'Size Duplicate Indexes'} += $size; + $summary->{'items'}->{'Size Duplicate Indexes'} += $size; if ( $size ) { if ( $chosen_key && $chosen_key ne $dupe->{key} ) { @@ -5141,14 +5146,19 @@ sub print_duplicate_key { sub print_key_summary { my ( %summary ) = @_; + my $items = $summary{items}; printf $hdr_fmt, ('#' x $hdr_width); printf $hdr_fmt, 'Summary of indexes'; printf $hdr_fmt, ('#' x $hdr_width); print "\n"; - my $max_item = max(map { length($_) } keys %summary); - my $line_fmt = "# %-${max_item}s %-s\n"; - foreach my $item ( sort keys %summary ) { - printf $line_fmt, $item, $summary{$item}; + my $max_item = max(map { length($_) } keys %$items); + my $line_fmt = "# %-${max_item}s %-s"; + foreach my $item ( sort keys %$items ) { + printf $line_fmt, $item, $items->{$item}; + if ( $item eq 'Size Duplicate Indexes' && $summary{has_fulltext_dupe} ) { + print ' (not including FULLTEXT indexes)'; + } + print "\n"; } return; } diff --git a/t/pt-duplicate-key-checker/basics.t b/t/pt-duplicate-key-checker/basics.t index ac730a0e..45a014a8 100644 --- a/t/pt-duplicate-key-checker/basics.t +++ b/t/pt-duplicate-key-checker/basics.t @@ -136,8 +136,6 @@ ok( # ############################################################################# # Exact unique dupes # https://bugs.launchpad.net/percona-toolkit/+bug/1217013 -# Also added --verbose option (-v) to test for: -# https://bugs.launchpad.net/percona-toolkit/+bug/1402730 # ############################################################################# $sb->load_file('master', 't/lib/samples/dupekeys/simple_dupe_bug_1217013.sql', 'test'); @@ -149,6 +147,19 @@ ok( 'Exact unique dupes (bug 1217013)' ) or diag($test_diff); +# ############################################################################# +# Same thing, but added --verbose option to test for: +# https://bugs.launchpad.net/percona-toolkit/+bug/1402730 +# ############################################################################# + +ok( + no_diff( + sub { pt_duplicate_key_checker::main(@args, qw(-t test.domains --verbose)) }, + "$sample/simple_dupe_bug_1217013.txt", keep_output=>1), + q[--verbose option doesn't skip dupes reporting (bug 1402730)] +) or diag($test_diff); + + # ############################################################################# # Done. # ############################################################################# diff --git a/t/pt-duplicate-key-checker/samples/simple_dupe_bug_1217013.txt b/t/pt-duplicate-key-checker/samples/simple_dupe_bug_1217013.txt index b8a73b69..4d5d0c4d 100644 --- a/t/pt-duplicate-key-checker/samples/simple_dupe_bug_1217013.txt +++ b/t/pt-duplicate-key-checker/samples/simple_dupe_bug_1217013.txt @@ -2,9 +2,9 @@ # test.domains # ######################################################################## -# unique_key_domain (`domain`) -# domain (`domain`) # PRIMARY (`id`) +# domain (`domain`) +# unique_key_domain (`domain`) # Uniqueness of domain ignored because unique_key_domain is a duplicate constraint # domain is a duplicate of unique_key_domain