mirror of
https://github.com/percona/percona-toolkit.git
synced 2025-09-18 17:58:55 +00:00
PT-157 Specifying the index to use for pt-archiver ignores --primary-key-only
This commit is contained in:
@@ -6347,7 +6347,7 @@ sub main {
|
|||||||
$del_stmt = $nibbler->generate_del_stmt(
|
$del_stmt = $nibbler->generate_del_stmt(
|
||||||
tbl_struct => $src->{info},
|
tbl_struct => $src->{info},
|
||||||
cols => \@sel_cols,
|
cols => \@sel_cols,
|
||||||
index => $src->{i},
|
index => $o->get('primary-key-only') ? 'PRIMARY' : $src->{i},
|
||||||
);
|
);
|
||||||
@del_slice = @{$del_stmt->{slice}};
|
@del_slice = @{$del_stmt->{slice}};
|
||||||
|
|
||||||
|
@@ -38,6 +38,7 @@ my $cmd = "perl -I $trunk/t/pt-archiver/samples $trunk/bin/pt-archiver";
|
|||||||
$sb->load_file('master', "t/pt-archiver/samples/delete_more.sql");
|
$sb->load_file('master', "t/pt-archiver/samples/delete_more.sql");
|
||||||
$dbh->do('use dm');
|
$dbh->do('use dm');
|
||||||
|
|
||||||
|
#1
|
||||||
is_deeply(
|
is_deeply(
|
||||||
$dbh->selectall_arrayref('select * from `main_table-123` order by id'),
|
$dbh->selectall_arrayref('select * from `main_table-123` order by id'),
|
||||||
[
|
[
|
||||||
@@ -49,7 +50,7 @@ is_deeply(
|
|||||||
],
|
],
|
||||||
'main_table-123 data before archiving'
|
'main_table-123 data before archiving'
|
||||||
);
|
);
|
||||||
|
#2
|
||||||
is_deeply(
|
is_deeply(
|
||||||
$dbh->selectall_arrayref('select * from `other_table-123` order by id'),
|
$dbh->selectall_arrayref('select * from `other_table-123` order by id'),
|
||||||
[
|
[
|
||||||
@@ -67,6 +68,10 @@ is_deeply(
|
|||||||
|
|
||||||
`$cmd --purge --primary-key-only --source F=$cnf,D=dm,t=main_table-123,i=pub_date,b=1,m=delete_more --where "pub_date < '2010-02-16'" --bulk-delete --limit 2`;
|
`$cmd --purge --primary-key-only --source F=$cnf,D=dm,t=main_table-123,i=pub_date,b=1,m=delete_more --where "pub_date < '2010-02-16'" --bulk-delete --limit 2`;
|
||||||
|
|
||||||
|
|
||||||
|
# PT-157 has changed the program behavior when using --primary-key-only even if an index was
|
||||||
|
# specified in the DSN
|
||||||
|
#3
|
||||||
is_deeply(
|
is_deeply(
|
||||||
$dbh->selectall_arrayref('select * from `main_table-123` order by id'),
|
$dbh->selectall_arrayref('select * from `main_table-123` order by id'),
|
||||||
[
|
[
|
||||||
@@ -74,17 +79,19 @@ is_deeply(
|
|||||||
# [2, '2010-02-15', 'b'],
|
# [2, '2010-02-15', 'b'],
|
||||||
# [3, '2010-02-15', 'c'],
|
# [3, '2010-02-15', 'c'],
|
||||||
[4, '2010-02-16', 'd'],
|
[4, '2010-02-16', 'd'],
|
||||||
# [5, '2010-02-14', 'e'],
|
[5, '2010-02-14', 'e'],
|
||||||
],
|
],
|
||||||
'main_table-123 data after archiving (limit 2)'
|
'main_table-123 data after archiving (limit 2)'
|
||||||
);
|
);
|
||||||
|
|
||||||
|
#4
|
||||||
is_deeply(
|
is_deeply(
|
||||||
$dbh->selectall_arrayref('select * from `other_table-123` order by id'),
|
$dbh->selectall_arrayref('select * from `other_table-123` order by id'),
|
||||||
[
|
[
|
||||||
[1, 'a'],
|
[1, 'a'],
|
||||||
[4, 'd'],
|
[4, 'd'],
|
||||||
[6, 'ot1'],
|
[5, 'e'],
|
||||||
|
[6, 'ot1']
|
||||||
],
|
],
|
||||||
'other_table-123 data after archiving (limit 2)'
|
'other_table-123 data after archiving (limit 2)'
|
||||||
);
|
);
|
||||||
@@ -92,6 +99,7 @@ is_deeply(
|
|||||||
SKIP: {
|
SKIP: {
|
||||||
skip 'Cannot connect to slave sandbox', 6 unless $slave_dbh;
|
skip 'Cannot connect to slave sandbox', 6 unless $slave_dbh;
|
||||||
$slave_dbh->do('use dm');
|
$slave_dbh->do('use dm');
|
||||||
|
#5
|
||||||
is_deeply(
|
is_deeply(
|
||||||
$slave_dbh->selectall_arrayref('select * from `main_table-123` order by id'),
|
$slave_dbh->selectall_arrayref('select * from `main_table-123` order by id'),
|
||||||
[
|
[
|
||||||
@@ -103,7 +111,7 @@ SKIP: {
|
|||||||
],
|
],
|
||||||
'Slave main_table-123 not changed'
|
'Slave main_table-123 not changed'
|
||||||
);
|
);
|
||||||
|
#6
|
||||||
is_deeply(
|
is_deeply(
|
||||||
$slave_dbh->selectall_arrayref('select * from `other_table-123` order by id'),
|
$slave_dbh->selectall_arrayref('select * from `other_table-123` order by id'),
|
||||||
[
|
[
|
||||||
@@ -122,6 +130,7 @@ SKIP: {
|
|||||||
# Run it again without DSN b so changes should be made on slave.
|
# Run it again without DSN b so changes should be made on slave.
|
||||||
$sb->load_file('master', "t/pt-archiver/samples/delete_more.sql");
|
$sb->load_file('master', "t/pt-archiver/samples/delete_more.sql");
|
||||||
|
|
||||||
|
#7
|
||||||
is_deeply(
|
is_deeply(
|
||||||
$slave_dbh->selectall_arrayref('select * from `main_table-123` order by id'),
|
$slave_dbh->selectall_arrayref('select * from `main_table-123` order by id'),
|
||||||
[
|
[
|
||||||
@@ -133,7 +142,7 @@ SKIP: {
|
|||||||
],
|
],
|
||||||
'Reset slave main_table-123'
|
'Reset slave main_table-123'
|
||||||
);
|
);
|
||||||
|
#8
|
||||||
is_deeply(
|
is_deeply(
|
||||||
$slave_dbh->selectall_arrayref('select * from `other_table-123` order by id'),
|
$slave_dbh->selectall_arrayref('select * from `other_table-123` order by id'),
|
||||||
[
|
[
|
||||||
@@ -151,7 +160,7 @@ SKIP: {
|
|||||||
|
|
||||||
`$cmd --purge --primary-key-only --source F=$cnf,D=dm,t=main_table-123,i=pub_date,m=delete_more --where "pub_date < '2010-02-16'" --bulk-delete --limit 2`;
|
`$cmd --purge --primary-key-only --source F=$cnf,D=dm,t=main_table-123,i=pub_date,m=delete_more --where "pub_date < '2010-02-16'" --bulk-delete --limit 2`;
|
||||||
sleep 1;
|
sleep 1;
|
||||||
|
#9
|
||||||
is_deeply(
|
is_deeply(
|
||||||
$slave_dbh->selectall_arrayref('select * from `main_table-123` order by id'),
|
$slave_dbh->selectall_arrayref('select * from `main_table-123` order by id'),
|
||||||
[
|
[
|
||||||
@@ -159,16 +168,18 @@ SKIP: {
|
|||||||
# [2, '2010-02-15', 'b'],
|
# [2, '2010-02-15', 'b'],
|
||||||
# [3, '2010-02-15', 'c'],
|
# [3, '2010-02-15', 'c'],
|
||||||
[4, '2010-02-16', 'd'],
|
[4, '2010-02-16', 'd'],
|
||||||
# [5, '2010-02-14', 'e'],
|
[5, '2010-02-14', 'e'],
|
||||||
],
|
],
|
||||||
'Slave main_table-123 changed'
|
'Slave main_table-123 changed'
|
||||||
);
|
);
|
||||||
|
|
||||||
|
#10
|
||||||
is_deeply(
|
is_deeply(
|
||||||
$slave_dbh->selectall_arrayref('select * from `other_table-123` order by id'),
|
$slave_dbh->selectall_arrayref('select * from `other_table-123` order by id'),
|
||||||
[
|
[
|
||||||
[1, 'a'],
|
[1, 'a'],
|
||||||
[4, 'd'],
|
[4, 'd'],
|
||||||
|
[5, 'e'],
|
||||||
[6, 'ot1'],
|
[6, 'ot1'],
|
||||||
],
|
],
|
||||||
'Slave other_table-123 changed'
|
'Slave other_table-123 changed'
|
||||||
@@ -180,7 +191,7 @@ SKIP: {
|
|||||||
# ###########################################################################
|
# ###########################################################################
|
||||||
$sb->load_file('master', "t/pt-archiver/samples/delete_more.sql");
|
$sb->load_file('master', "t/pt-archiver/samples/delete_more.sql");
|
||||||
$dbh->do('use dm');
|
$dbh->do('use dm');
|
||||||
|
#11
|
||||||
is_deeply(
|
is_deeply(
|
||||||
$dbh->selectall_arrayref('select * from `main_table-123` order by id'),
|
$dbh->selectall_arrayref('select * from `main_table-123` order by id'),
|
||||||
[
|
[
|
||||||
@@ -192,7 +203,7 @@ is_deeply(
|
|||||||
],
|
],
|
||||||
'main_table-123 data before archiving'
|
'main_table-123 data before archiving'
|
||||||
);
|
);
|
||||||
|
#12
|
||||||
is_deeply(
|
is_deeply(
|
||||||
$dbh->selectall_arrayref('select * from `other_table-123` order by id'),
|
$dbh->selectall_arrayref('select * from `other_table-123` order by id'),
|
||||||
[
|
[
|
||||||
@@ -209,7 +220,7 @@ is_deeply(
|
|||||||
);
|
);
|
||||||
|
|
||||||
`$cmd --purge --primary-key-only --source F=$cnf,D=dm,t=main_table-123,i=pub_date,b=1,m=delete_more --where "pub_date < '2010-02-16'" --bulk-delete --limit 100`;
|
`$cmd --purge --primary-key-only --source F=$cnf,D=dm,t=main_table-123,i=pub_date,b=1,m=delete_more --where "pub_date < '2010-02-16'" --bulk-delete --limit 100`;
|
||||||
|
#13
|
||||||
is_deeply(
|
is_deeply(
|
||||||
$dbh->selectall_arrayref('select * from `main_table-123` order by id'),
|
$dbh->selectall_arrayref('select * from `main_table-123` order by id'),
|
||||||
[
|
[
|
||||||
@@ -217,16 +228,17 @@ is_deeply(
|
|||||||
# [2, '2010-02-15', 'b'],
|
# [2, '2010-02-15', 'b'],
|
||||||
# [3, '2010-02-15', 'c'],
|
# [3, '2010-02-15', 'c'],
|
||||||
[4, '2010-02-16', 'd'],
|
[4, '2010-02-16', 'd'],
|
||||||
# [5, '2010-02-14', 'e'],
|
[5, '2010-02-14', 'e'],
|
||||||
],
|
],
|
||||||
'main_table-123 data after archiving (limit 100)'
|
'main_table-123 data after archiving (limit 100)'
|
||||||
);
|
);
|
||||||
|
#14
|
||||||
is_deeply(
|
is_deeply(
|
||||||
$dbh->selectall_arrayref('select * from `other_table-123` order by id'),
|
$dbh->selectall_arrayref('select * from `other_table-123` order by id'),
|
||||||
[
|
[
|
||||||
[1, 'a'],
|
[1, 'a'],
|
||||||
[4, 'd'],
|
[4, 'd'],
|
||||||
|
[5, 'e'],
|
||||||
[6, 'ot1'],
|
[6, 'ot1'],
|
||||||
],
|
],
|
||||||
'other_table-123 data after archiving (limit 100)'
|
'other_table-123 data after archiving (limit 100)'
|
||||||
@@ -237,7 +249,7 @@ is_deeply(
|
|||||||
# ###########################################################################
|
# ###########################################################################
|
||||||
$sb->load_file('master', "t/pt-archiver/samples/delete_more.sql");
|
$sb->load_file('master', "t/pt-archiver/samples/delete_more.sql");
|
||||||
$dbh->do('use dm');
|
$dbh->do('use dm');
|
||||||
|
#15
|
||||||
is_deeply(
|
is_deeply(
|
||||||
$dbh->selectall_arrayref('select * from `main_table-123` order by id'),
|
$dbh->selectall_arrayref('select * from `main_table-123` order by id'),
|
||||||
[
|
[
|
||||||
@@ -249,7 +261,7 @@ is_deeply(
|
|||||||
],
|
],
|
||||||
'main_table-123 data before archiving'
|
'main_table-123 data before archiving'
|
||||||
);
|
);
|
||||||
|
#16
|
||||||
is_deeply(
|
is_deeply(
|
||||||
$dbh->selectall_arrayref('select * from `other_table-123` order by id'),
|
$dbh->selectall_arrayref('select * from `other_table-123` order by id'),
|
||||||
[
|
[
|
||||||
@@ -267,7 +279,7 @@ is_deeply(
|
|||||||
|
|
||||||
`$cmd --purge --primary-key-only --source F=$cnf,D=dm,t=main_table-123,i=pub_date,b=1,m=delete_more --where "pub_date < '2010-02-16'"`;
|
`$cmd --purge --primary-key-only --source F=$cnf,D=dm,t=main_table-123,i=pub_date,b=1,m=delete_more --where "pub_date < '2010-02-16'"`;
|
||||||
`$cmd --purge --primary-key-only --source F=$cnf,D=dm,t=main_table-123,i=pub_date,b=1,m=delete_more --where "pub_date < '2010-02-16'"`;
|
`$cmd --purge --primary-key-only --source F=$cnf,D=dm,t=main_table-123,i=pub_date,b=1,m=delete_more --where "pub_date < '2010-02-16'"`;
|
||||||
|
#17
|
||||||
is_deeply(
|
is_deeply(
|
||||||
$dbh->selectall_arrayref('select * from `main_table-123` order by id'),
|
$dbh->selectall_arrayref('select * from `main_table-123` order by id'),
|
||||||
[
|
[
|
||||||
@@ -275,7 +287,7 @@ is_deeply(
|
|||||||
# [2, '2010-02-15', 'b'],
|
# [2, '2010-02-15', 'b'],
|
||||||
# [3, '2010-02-15', 'c'],
|
# [3, '2010-02-15', 'c'],
|
||||||
[4, '2010-02-16', 'd'],
|
[4, '2010-02-16', 'd'],
|
||||||
# [5, '2010-02-14', 'e'],
|
[5, '2010-02-14', 'e'],
|
||||||
],
|
],
|
||||||
'main_table-123 data after archiving (single delete)'
|
'main_table-123 data after archiving (single delete)'
|
||||||
);
|
);
|
||||||
@@ -285,6 +297,7 @@ is_deeply(
|
|||||||
[
|
[
|
||||||
[1, 'a'],
|
[1, 'a'],
|
||||||
[4, 'd'],
|
[4, 'd'],
|
||||||
|
[5, 'e'],
|
||||||
[6, 'ot1'],
|
[6, 'ot1'],
|
||||||
],
|
],
|
||||||
'other_table-123 data after archiving (single delete)'
|
'other_table-123 data after archiving (single delete)'
|
||||||
|
@@ -23,7 +23,7 @@ if ( !$dbh ) {
|
|||||||
plan skip_all => 'Cannot connect to sandbox master';
|
plan skip_all => 'Cannot connect to sandbox master';
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
plan tests => 7;
|
plan tests => 8;
|
||||||
}
|
}
|
||||||
|
|
||||||
my $output;
|
my $output;
|
||||||
@@ -38,8 +38,10 @@ $sb->load_file('master', 't/pt-archiver/samples/table1.sql');
|
|||||||
$output = output(
|
$output = output(
|
||||||
sub { pt_archiver::main(qw(--where 1=1), "--source", "D=test,t=table_1,F=$cnf", qw(--purge)) },
|
sub { pt_archiver::main(qw(--where 1=1), "--source", "D=test,t=table_1,F=$cnf", qw(--purge)) },
|
||||||
);
|
);
|
||||||
|
#1
|
||||||
is($output, '', 'Basic test run did not die');
|
is($output, '', 'Basic test run did not die');
|
||||||
$output = `/tmp/12345/use -N -e "select count(*) from test.table_1"`;
|
$output = `/tmp/12345/use -N -e "select count(*) from test.table_1"`;
|
||||||
|
#2
|
||||||
is($output + 0, 0, 'Purged ok');
|
is($output + 0, 0, 'Purged ok');
|
||||||
|
|
||||||
# Test basic functionality with --commit-each
|
# Test basic functionality with --commit-each
|
||||||
@@ -47,8 +49,10 @@ $sb->load_file('master', 't/pt-archiver/samples/table1.sql');
|
|||||||
$output = output(
|
$output = output(
|
||||||
sub { pt_archiver::main(qw(--where 1=1), "--source", "D=test,t=table_1,F=$cnf", qw(--commit-each --limit 1 --purge)) },
|
sub { pt_archiver::main(qw(--where 1=1), "--source", "D=test,t=table_1,F=$cnf", qw(--commit-each --limit 1 --purge)) },
|
||||||
);
|
);
|
||||||
|
#3
|
||||||
is($output, '', 'Commit-each did not die');
|
is($output, '', 'Commit-each did not die');
|
||||||
$output = `/tmp/12345/use -N -e "select count(*) from test.table_1"`;
|
$output = `/tmp/12345/use -N -e "select count(*) from test.table_1"`;
|
||||||
|
#4
|
||||||
is($output + 0, 0, 'Purged ok with --commit-each');
|
is($output + 0, 0, 'Purged ok with --commit-each');
|
||||||
|
|
||||||
# Archive only part of the table
|
# Archive only part of the table
|
||||||
@@ -56,10 +60,20 @@ $sb->load_file('master', 't/pt-archiver/samples/table1.sql');
|
|||||||
$output = output(
|
$output = output(
|
||||||
sub { pt_archiver::main(qw(--where 1=1), "--source", "D=test,t=table_1,F=$cnf", qw(--where a<4 --purge)) },
|
sub { pt_archiver::main(qw(--where 1=1), "--source", "D=test,t=table_1,F=$cnf", qw(--where a<4 --purge)) },
|
||||||
);
|
);
|
||||||
|
#5
|
||||||
is($output, '', 'No output for archiving only part of a table');
|
is($output, '', 'No output for archiving only part of a table');
|
||||||
$output = `/tmp/12345/use -N -e "select count(*) from test.table_1"`;
|
$output = `/tmp/12345/use -N -e "select count(*) from test.table_1"`;
|
||||||
|
#6
|
||||||
is($output + 0, 1, 'Purged some rows ok');
|
is($output + 0, 1, 'Purged some rows ok');
|
||||||
|
|
||||||
|
# Fail if --primary-key-only was specified and there is no PK in the table
|
||||||
|
$sb->load_file('master', 't/pt-archiver/samples/pt_157.sql');
|
||||||
|
$output = output(
|
||||||
|
sub { pt_archiver::main(qw(--where 1=1), "--source", "D=test,t=t1,F=$cnf", qw(--purge --primary-key-only)) },
|
||||||
|
stderr => 1,
|
||||||
|
);
|
||||||
|
like($output, qr/does not have a PRIMARY KEY/, 'Fail if --primary-key was specified and there is no PK');
|
||||||
|
|
||||||
# #############################################################################
|
# #############################################################################
|
||||||
# Done.
|
# Done.
|
||||||
# #############################################################################
|
# #############################################################################
|
||||||
|
20
t/pt-archiver/samples/pt_157.sql
Normal file
20
t/pt-archiver/samples/pt_157.sql
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
DROP DATABASE IF EXISTS test;
|
||||||
|
CREATE DATABASE test;
|
||||||
|
|
||||||
|
CREATE TABLE `test`.`t1` (
|
||||||
|
f1 INT NOT NULL,
|
||||||
|
f2 VARCHAR(10)
|
||||||
|
) Engine=InnoDB;
|
||||||
|
|
||||||
|
INSERT INTO `test`.`t1` VALUES
|
||||||
|
(1, 'a'),
|
||||||
|
(2, 'b'),
|
||||||
|
(3, 'c'),
|
||||||
|
(4, 'd'),
|
||||||
|
(5, 'e'),
|
||||||
|
(6, 'f'),
|
||||||
|
(7, 'g'),
|
||||||
|
(8, 'h'),
|
||||||
|
(9, 'i'),
|
||||||
|
(10, 'j');
|
||||||
|
|
Reference in New Issue
Block a user