From b8d849e9bd30ecf7052517699a1748e20c0e841f Mon Sep 17 00:00:00 2001 From: Carlos Salguero Date: Mon, 27 Jun 2016 16:00:15 -0300 Subject: [PATCH] Fixed tests for pt-table-checksum/chunk_index.t --- t/pt-table-checksum/chunk_index.t | 213 +++++++++++++++--------------- 1 file changed, 105 insertions(+), 108 deletions(-) diff --git a/t/pt-table-checksum/chunk_index.t b/t/pt-table-checksum/chunk_index.t index 0348ca8d..aa3cb27e 100644 --- a/t/pt-table-checksum/chunk_index.t +++ b/t/pt-table-checksum/chunk_index.t @@ -118,9 +118,6 @@ ok( # ############################################################################# $sb->load_file('master', "t/pt-table-checksum/samples/all-uc-table.sql"); my $exit_status = 0; -warn "----------------------------------------------------------------------------------------------------"; -warn $master_dsn; -warn "----------------------------------------------------------------------------------------------------"; $output = output(sub { $exit_status = pt_table_checksum::main( @@ -154,111 +151,111 @@ is( "14 rows checksummed (bug 925855)" ); -# # ############################################################################# -# # Bug 978432: PK is ignored -# # ############################################################################# -# $sb->load_file('master', "t/pt-table-checksum/samples/not-using-pk-bug.sql"); -# -# ok( -# no_diff( -# sub { pt_table_checksum::main(@args, -# qw(-t test.multi_resource_apt --chunk-size 2 --explain --explain)) -# }, -# "t/pt-table-checksum/samples/not-using-pk-bug.out", -# ), -# "Smarter chunk index selection (bug 978432)" -# ); -# -# -# -# # the following 2 tests seem to rely on EXPLAIN getting key_len wrong -# # on a poorly indexed table. -# # but this doesn't happen on all configurations of OS/MySQL -# # commenting out for now, until I think of an alternate way to test this -# -# # ############################################################################# -# # PK but bad explain plan. -# # https://bugs.launchpad.net/percona-toolkit/+bug/1010232 -# # ############################################################################# -# #$sb->load_file('master', "t/pt-table-checksum/samples/bad-plan-bug-1010232.sql"); -# #PerconaTest::wait_for_table($dbh, "bad_plan.t", "(c1,c2,c3,c4)=(1,1,2,100)"); -# #$output = output(sub { -# # $exit_status = pt_table_checksum::main( -# # $master_dsn, '--max-load', '', -# # qw(--set-vars innodb_lock_wait_timeout=3 --chunk-size 10 -t bad_plan.t) -# # ) }, -# # stderr => 1, -# #); -# # -# #is( -# # $exit_status, -# # 32, # SKIP_CHUNK -# # "Bad key_len chunks are not errors" -# #) or diag($output); -# # -# #cmp_ok( -# # PerconaTest::count_checksum_results($output, 'skipped'), -# # '>', -# # 1, -# # "Skipped bad key_len chunks" -# #); -# -# -# # Use --chunk-index:3 to use only the first 3 left-most columns of the index. -# # Can't use bad_plan.t, however, because its row are almost all identical, -# # so using 3 of 4 pk cols creates an infinite loop. -# ok( -# no_diff( -# sub { -# pt_table_checksum::main( -# $master_dsn, '--max-load', '', -# qw(--set-vars innodb_lock_wait_timeout=3 --chunk-size 5000 -t sakila.rental), -# qw(--chunk-index rental_date --chunk-index-columns 2), -# qw(--explain --explain)); -# }, -# "t/pt-table-checksum/samples/n-chunk-index-cols.txt", -# ), -# "--chunk-index-columns" -# ); -# -# $output = output( -# sub { -# $exit_status = pt_table_checksum::main( -# $master_dsn, '--max-load', '', -# qw(--set-vars innodb_lock_wait_timeout=3 --chunk-size 1000 -t sakila.film_actor), -# qw(--chunk-index PRIMARY --chunk-index-columns 9), -# ); -# }, -# stderr => 1, -# ); -# -# is( -# PerconaTest::count_checksum_results($output, 'rows'), -# 5462, -# "--chunk-index-columns > number of index columns" -# ) or diag($output); -# -# $output = output( -# sub { -# $exit_status = pt_table_checksum::main( -# $master_dsn, '--max-load', '', -# qw(--set-vars innodb_lock_wait_timeout=3 --chunk-size 1000 -t sakila.film_actor), -# qw(--chunk-index-columns 1 --chunk-size-limit 3), -# ); -# }, -# stderr => 1, -# ); -# -# # Since we're not using the full index, it's basically a non-unique index, -# # so there are dupes. The table really has 5462 rows, so we must get -# # at least that many, and probably a few more. -# cmp_ok( -# PerconaTest::count_checksum_results($output, 'rows'), -# '>=', -# 5462, -# "Initial key_len reflects --chunk-index-columns" -# ) or diag($output); -# +# ############################################################################# +# Bug 978432: PK is ignored +# ############################################################################# +$sb->load_file('master', "t/pt-table-checksum/samples/not-using-pk-bug.sql"); + +ok( + no_diff( + sub { pt_table_checksum::main(@args, + qw(-t test.multi_resource_apt --chunk-size 2 --explain --explain)) + }, + "t/pt-table-checksum/samples/not-using-pk-bug.out", + ), + "Smarter chunk index selection (bug 978432)" +); + + + +# the following 2 tests seem to rely on EXPLAIN getting key_len wrong +# on a poorly indexed table. +# but this doesn't happen on all configurations of OS/MySQL +# commenting out for now, until I think of an alternate way to test this + +# ############################################################################# +# PK but bad explain plan. +# https://bugs.launchpad.net/percona-toolkit/+bug/1010232 +# ############################################################################# +#$sb->load_file('master', "t/pt-table-checksum/samples/bad-plan-bug-1010232.sql"); +#PerconaTest::wait_for_table($dbh, "bad_plan.t", "(c1,c2,c3,c4)=(1,1,2,100)"); +#$output = output(sub { +# $exit_status = pt_table_checksum::main( +# $master_dsn, '--max-load', '', +# qw(--set-vars innodb_lock_wait_timeout=3 --chunk-size 10 -t bad_plan.t) +# ) }, +# stderr => 1, +#); +# +#is( +# $exit_status, +# 32, # SKIP_CHUNK +# "Bad key_len chunks are not errors" +#) or diag($output); +# +#cmp_ok( +# PerconaTest::count_checksum_results($output, 'skipped'), +# '>', +# 1, +# "Skipped bad key_len chunks" +#); + + +# Use --chunk-index:3 to use only the first 3 left-most columns of the index. +# Can't use bad_plan.t, however, because its row are almost all identical, +# so using 3 of 4 pk cols creates an infinite loop. +ok( + no_diff( + sub { + pt_table_checksum::main( + $master_dsn, '--max-load', '', + qw(--set-vars innodb_lock_wait_timeout=3 --chunk-size 5000 -t sakila.rental), + qw(--chunk-index rental_date --chunk-index-columns 2), + qw(--explain --explain)); + }, + "t/pt-table-checksum/samples/n-chunk-index-cols.txt", + ), + "--chunk-index-columns" +); + +$output = output( + sub { + $exit_status = pt_table_checksum::main( + $master_dsn, '--max-load', '', + qw(--set-vars innodb_lock_wait_timeout=3 --chunk-size 1000 -t sakila.film_actor), + qw(--chunk-index PRIMARY --chunk-index-columns 9), + ); + }, + stderr => 1, +); + +is( + PerconaTest::count_checksum_results($output, 'rows'), + 5462, + "--chunk-index-columns > number of index columns" +) or diag($output); + +$output = output( + sub { + $exit_status = pt_table_checksum::main( + $master_dsn, '--max-load', '', + qw(--set-vars innodb_lock_wait_timeout=3 --chunk-size 1000 -t sakila.film_actor), + qw(--chunk-index-columns 1 --chunk-size-limit 3), + ); + }, + stderr => 1, +); + +# Since we're not using the full index, it's basically a non-unique index, +# so there are dupes. The table really has 5462 rows, so we must get +# at least that many, and probably a few more. +cmp_ok( + PerconaTest::count_checksum_results($output, 'rows'), + '>=', + 5462, + "Initial key_len reflects --chunk-index-columns" +) or diag($output); + # ############################################################################# # Done. # #############################################################################