mirror of
https://github.com/percona/percona-toolkit.git
synced 2025-09-18 01:33:14 +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(
|
||||
tbl_struct => $src->{info},
|
||||
cols => \@sel_cols,
|
||||
index => $src->{i},
|
||||
index => $o->get('primary-key-only') ? 'PRIMARY' : $src->{i},
|
||||
);
|
||||
@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");
|
||||
$dbh->do('use dm');
|
||||
|
||||
#1
|
||||
is_deeply(
|
||||
$dbh->selectall_arrayref('select * from `main_table-123` order by id'),
|
||||
[
|
||||
@@ -49,7 +50,7 @@ is_deeply(
|
||||
],
|
||||
'main_table-123 data before archiving'
|
||||
);
|
||||
|
||||
#2
|
||||
is_deeply(
|
||||
$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`;
|
||||
|
||||
|
||||
# PT-157 has changed the program behavior when using --primary-key-only even if an index was
|
||||
# specified in the DSN
|
||||
#3
|
||||
is_deeply(
|
||||
$dbh->selectall_arrayref('select * from `main_table-123` order by id'),
|
||||
[
|
||||
@@ -74,17 +79,19 @@ is_deeply(
|
||||
# [2, '2010-02-15', 'b'],
|
||||
# [3, '2010-02-15', 'c'],
|
||||
[4, '2010-02-16', 'd'],
|
||||
# [5, '2010-02-14', 'e'],
|
||||
[5, '2010-02-14', 'e'],
|
||||
],
|
||||
'main_table-123 data after archiving (limit 2)'
|
||||
);
|
||||
|
||||
#4
|
||||
is_deeply(
|
||||
$dbh->selectall_arrayref('select * from `other_table-123` order by id'),
|
||||
[
|
||||
[1, 'a'],
|
||||
[4, 'd'],
|
||||
[6, 'ot1'],
|
||||
[5, 'e'],
|
||||
[6, 'ot1']
|
||||
],
|
||||
'other_table-123 data after archiving (limit 2)'
|
||||
);
|
||||
@@ -92,6 +99,7 @@ is_deeply(
|
||||
SKIP: {
|
||||
skip 'Cannot connect to slave sandbox', 6 unless $slave_dbh;
|
||||
$slave_dbh->do('use dm');
|
||||
#5
|
||||
is_deeply(
|
||||
$slave_dbh->selectall_arrayref('select * from `main_table-123` order by id'),
|
||||
[
|
||||
@@ -103,7 +111,7 @@ SKIP: {
|
||||
],
|
||||
'Slave main_table-123 not changed'
|
||||
);
|
||||
|
||||
#6
|
||||
is_deeply(
|
||||
$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.
|
||||
$sb->load_file('master', "t/pt-archiver/samples/delete_more.sql");
|
||||
|
||||
#7
|
||||
is_deeply(
|
||||
$slave_dbh->selectall_arrayref('select * from `main_table-123` order by id'),
|
||||
[
|
||||
@@ -133,7 +142,7 @@ SKIP: {
|
||||
],
|
||||
'Reset slave main_table-123'
|
||||
);
|
||||
|
||||
#8
|
||||
is_deeply(
|
||||
$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`;
|
||||
sleep 1;
|
||||
|
||||
#9
|
||||
is_deeply(
|
||||
$slave_dbh->selectall_arrayref('select * from `main_table-123` order by id'),
|
||||
[
|
||||
@@ -159,16 +168,18 @@ SKIP: {
|
||||
# [2, '2010-02-15', 'b'],
|
||||
# [3, '2010-02-15', 'c'],
|
||||
[4, '2010-02-16', 'd'],
|
||||
# [5, '2010-02-14', 'e'],
|
||||
[5, '2010-02-14', 'e'],
|
||||
],
|
||||
'Slave main_table-123 changed'
|
||||
);
|
||||
|
||||
#10
|
||||
is_deeply(
|
||||
$slave_dbh->selectall_arrayref('select * from `other_table-123` order by id'),
|
||||
[
|
||||
[1, 'a'],
|
||||
[4, 'd'],
|
||||
[5, 'e'],
|
||||
[6, 'ot1'],
|
||||
],
|
||||
'Slave other_table-123 changed'
|
||||
@@ -180,7 +191,7 @@ SKIP: {
|
||||
# ###########################################################################
|
||||
$sb->load_file('master', "t/pt-archiver/samples/delete_more.sql");
|
||||
$dbh->do('use dm');
|
||||
|
||||
#11
|
||||
is_deeply(
|
||||
$dbh->selectall_arrayref('select * from `main_table-123` order by id'),
|
||||
[
|
||||
@@ -192,7 +203,7 @@ is_deeply(
|
||||
],
|
||||
'main_table-123 data before archiving'
|
||||
);
|
||||
|
||||
#12
|
||||
is_deeply(
|
||||
$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`;
|
||||
|
||||
#13
|
||||
is_deeply(
|
||||
$dbh->selectall_arrayref('select * from `main_table-123` order by id'),
|
||||
[
|
||||
@@ -217,16 +228,17 @@ is_deeply(
|
||||
# [2, '2010-02-15', 'b'],
|
||||
# [3, '2010-02-15', 'c'],
|
||||
[4, '2010-02-16', 'd'],
|
||||
# [5, '2010-02-14', 'e'],
|
||||
[5, '2010-02-14', 'e'],
|
||||
],
|
||||
'main_table-123 data after archiving (limit 100)'
|
||||
);
|
||||
|
||||
#14
|
||||
is_deeply(
|
||||
$dbh->selectall_arrayref('select * from `other_table-123` order by id'),
|
||||
[
|
||||
[1, 'a'],
|
||||
[4, 'd'],
|
||||
[5, 'e'],
|
||||
[6, 'ot1'],
|
||||
],
|
||||
'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");
|
||||
$dbh->do('use dm');
|
||||
|
||||
#15
|
||||
is_deeply(
|
||||
$dbh->selectall_arrayref('select * from `main_table-123` order by id'),
|
||||
[
|
||||
@@ -249,7 +261,7 @@ is_deeply(
|
||||
],
|
||||
'main_table-123 data before archiving'
|
||||
);
|
||||
|
||||
#16
|
||||
is_deeply(
|
||||
$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'"`;
|
||||
|
||||
#17
|
||||
is_deeply(
|
||||
$dbh->selectall_arrayref('select * from `main_table-123` order by id'),
|
||||
[
|
||||
@@ -275,7 +287,7 @@ is_deeply(
|
||||
# [2, '2010-02-15', 'b'],
|
||||
# [3, '2010-02-15', 'c'],
|
||||
[4, '2010-02-16', 'd'],
|
||||
# [5, '2010-02-14', 'e'],
|
||||
[5, '2010-02-14', 'e'],
|
||||
],
|
||||
'main_table-123 data after archiving (single delete)'
|
||||
);
|
||||
@@ -285,6 +297,7 @@ is_deeply(
|
||||
[
|
||||
[1, 'a'],
|
||||
[4, 'd'],
|
||||
[5, 'e'],
|
||||
[6, 'ot1'],
|
||||
],
|
||||
'other_table-123 data after archiving (single delete)'
|
||||
|
@@ -23,7 +23,7 @@ if ( !$dbh ) {
|
||||
plan skip_all => 'Cannot connect to sandbox master';
|
||||
}
|
||||
else {
|
||||
plan tests => 7;
|
||||
plan tests => 8;
|
||||
}
|
||||
|
||||
my $output;
|
||||
@@ -38,8 +38,10 @@ $sb->load_file('master', 't/pt-archiver/samples/table1.sql');
|
||||
$output = output(
|
||||
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');
|
||||
$output = `/tmp/12345/use -N -e "select count(*) from test.table_1"`;
|
||||
#2
|
||||
is($output + 0, 0, 'Purged ok');
|
||||
|
||||
# Test basic functionality with --commit-each
|
||||
@@ -47,8 +49,10 @@ $sb->load_file('master', 't/pt-archiver/samples/table1.sql');
|
||||
$output = output(
|
||||
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');
|
||||
$output = `/tmp/12345/use -N -e "select count(*) from test.table_1"`;
|
||||
#4
|
||||
is($output + 0, 0, 'Purged ok with --commit-each');
|
||||
|
||||
# Archive only part of the table
|
||||
@@ -56,10 +60,20 @@ $sb->load_file('master', 't/pt-archiver/samples/table1.sql');
|
||||
$output = output(
|
||||
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');
|
||||
$output = `/tmp/12345/use -N -e "select count(*) from test.table_1"`;
|
||||
#6
|
||||
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.
|
||||
# #############################################################################
|
||||
|
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