mirror of
https://github.com/percona/percona-toolkit.git
synced 2025-09-16 08:17:20 +00:00
Change the behavior to resume+ignore-databases to mimic resume+ignore-tables; now it starts from the next table.
This commit is contained in:
@@ -6673,11 +6673,16 @@ sub next {
|
|||||||
|
|
||||||
if ( !$self->{initialized} ) {
|
if ( !$self->{initialized} ) {
|
||||||
$self->{initialized} = 1;
|
$self->{initialized} = 1;
|
||||||
if ( $self->{resume}->{tbl}
|
if ( $self->{resume}->{tbl} ) {
|
||||||
&& !$self->table_is_allowed(@{$self->{resume}}{qw(db tbl)}) ) {
|
if ( !$self->table_is_allowed(@{$self->{resume}}{qw(db tbl)}) ) {
|
||||||
PTDEBUG && _d('Will resume after',
|
PTDEBUG && _d('Will resume after',
|
||||||
join('.', @{$self->{resume}}{qw(db tbl)}));
|
join('.', @{$self->{resume}}{qw(db tbl)}));
|
||||||
$self->{resume}->{after} = 1;
|
$self->{resume}->{after}->{tbl} = 1;
|
||||||
|
}
|
||||||
|
if ( !$self->database_is_allowed($self->{resume}->{db}) ) {
|
||||||
|
PTDEBUG && _d('Will resume after', $self->{resume}->{db});
|
||||||
|
$self->{resume}->{after}->{db} = 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -6775,17 +6780,17 @@ sub _iterate_dbh {
|
|||||||
if ( !defined $self->{dbs} ) {
|
if ( !defined $self->{dbs} ) {
|
||||||
my $sql = 'SHOW DATABASES';
|
my $sql = 'SHOW DATABASES';
|
||||||
PTDEBUG && _d($sql);
|
PTDEBUG && _d($sql);
|
||||||
my @dbs = grep { $self->database_is_allowed($_) }
|
my @dbs = grep {
|
||||||
@{$dbh->selectcol_arrayref($sql)};
|
$self->_resume_from_database($_)
|
||||||
|
&&
|
||||||
|
$self->database_is_allowed($_)
|
||||||
|
} @{$dbh->selectcol_arrayref($sql)};
|
||||||
PTDEBUG && _d('Found', scalar @dbs, 'databases');
|
PTDEBUG && _d('Found', scalar @dbs, 'databases');
|
||||||
$self->{dbs} = \@dbs;
|
$self->{dbs} = \@dbs;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !$self->{db} ) {
|
if ( !$self->{db} ) {
|
||||||
while ( @{$self->{dbs}} ) {
|
$self->{db} = shift @{$self->{dbs}};
|
||||||
$self->{db} = shift @{$self->{dbs}};
|
|
||||||
last if $self->_resume_from_database($self->{db});
|
|
||||||
}
|
|
||||||
PTDEBUG && _d('Next database:', $self->{db});
|
PTDEBUG && _d('Next database:', $self->{db});
|
||||||
return unless $self->{db};
|
return unless $self->{db};
|
||||||
}
|
}
|
||||||
@@ -6948,11 +6953,17 @@ sub _resume_from_database {
|
|||||||
my ($self, $db) = @_;
|
my ($self, $db) = @_;
|
||||||
|
|
||||||
return 1 unless $self->{resume}->{db};
|
return 1 unless $self->{resume}->{db};
|
||||||
|
|
||||||
if ( $db eq $self->{resume}->{db} ) {
|
if ( $db eq $self->{resume}->{db} ) {
|
||||||
PTDEBUG && _d('At resume db', $db);
|
if ( !$self->{resume}->{after}->{db} ) {
|
||||||
delete $self->{resume}->{db};
|
PTDEBUG && _d('Resuming from db', $db);
|
||||||
return 1;
|
delete $self->{resume}->{db};
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
PTDEBUG && _d('Resuming after db', $db);
|
||||||
|
delete $self->{resume}->{db};
|
||||||
|
delete $self->{resume}->{tbl};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@@ -6964,7 +6975,7 @@ sub _resume_from_table {
|
|||||||
return 1 unless $self->{resume}->{tbl};
|
return 1 unless $self->{resume}->{tbl};
|
||||||
|
|
||||||
if ( $tbl eq $self->{resume}->{tbl} ) {
|
if ( $tbl eq $self->{resume}->{tbl} ) {
|
||||||
if ( !$self->{resume}->{after} ) {
|
if ( !$self->{resume}->{after}->{tbl} ) {
|
||||||
PTDEBUG && _d('Resuming from table', $tbl);
|
PTDEBUG && _d('Resuming from table', $tbl);
|
||||||
delete $self->{resume}->{tbl};
|
delete $self->{resume}->{tbl};
|
||||||
return 1;
|
return 1;
|
||||||
|
@@ -203,11 +203,16 @@ sub next {
|
|||||||
|
|
||||||
if ( !$self->{initialized} ) {
|
if ( !$self->{initialized} ) {
|
||||||
$self->{initialized} = 1;
|
$self->{initialized} = 1;
|
||||||
if ( $self->{resume}->{tbl}
|
if ( $self->{resume}->{tbl} ) {
|
||||||
&& !$self->table_is_allowed(@{$self->{resume}}{qw(db tbl)}) ) {
|
if ( !$self->table_is_allowed(@{$self->{resume}}{qw(db tbl)}) ) {
|
||||||
PTDEBUG && _d('Will resume after',
|
PTDEBUG && _d('Will resume after',
|
||||||
join('.', @{$self->{resume}}{qw(db tbl)}));
|
join('.', @{$self->{resume}}{qw(db tbl)}));
|
||||||
$self->{resume}->{after} = 1;
|
$self->{resume}->{after}->{tbl} = 1;
|
||||||
|
}
|
||||||
|
if ( !$self->database_is_allowed($self->{resume}->{db}) ) {
|
||||||
|
PTDEBUG && _d('Will resume after', $self->{resume}->{db});
|
||||||
|
$self->{resume}->{after}->{db} = 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -320,17 +325,17 @@ sub _iterate_dbh {
|
|||||||
# This happens once, the first time we're called.
|
# This happens once, the first time we're called.
|
||||||
my $sql = 'SHOW DATABASES';
|
my $sql = 'SHOW DATABASES';
|
||||||
PTDEBUG && _d($sql);
|
PTDEBUG && _d($sql);
|
||||||
my @dbs = grep { $self->database_is_allowed($_) }
|
my @dbs = grep {
|
||||||
@{$dbh->selectcol_arrayref($sql)};
|
$self->_resume_from_database($_)
|
||||||
|
&&
|
||||||
|
$self->database_is_allowed($_)
|
||||||
|
} @{$dbh->selectcol_arrayref($sql)};
|
||||||
PTDEBUG && _d('Found', scalar @dbs, 'databases');
|
PTDEBUG && _d('Found', scalar @dbs, 'databases');
|
||||||
$self->{dbs} = \@dbs;
|
$self->{dbs} = \@dbs;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !$self->{db} ) {
|
if ( !$self->{db} ) {
|
||||||
while ( @{$self->{dbs}} ) {
|
$self->{db} = shift @{$self->{dbs}};
|
||||||
$self->{db} = shift @{$self->{dbs}};
|
|
||||||
last if $self->_resume_from_database($self->{db});
|
|
||||||
}
|
|
||||||
PTDEBUG && _d('Next database:', $self->{db});
|
PTDEBUG && _d('Next database:', $self->{db});
|
||||||
return unless $self->{db};
|
return unless $self->{db};
|
||||||
}
|
}
|
||||||
@@ -510,11 +515,19 @@ sub _resume_from_database {
|
|||||||
|
|
||||||
# "Resume" from any db if we're not, in fact, resuming.
|
# "Resume" from any db if we're not, in fact, resuming.
|
||||||
return 1 unless $self->{resume}->{db};
|
return 1 unless $self->{resume}->{db};
|
||||||
|
|
||||||
if ( $db eq $self->{resume}->{db} ) {
|
if ( $db eq $self->{resume}->{db} ) {
|
||||||
PTDEBUG && _d('At resume db', $db);
|
if ( !$self->{resume}->{after}->{db} ) {
|
||||||
delete $self->{resume}->{db};
|
PTDEBUG && _d('Resuming from db', $db);
|
||||||
return 1;
|
delete $self->{resume}->{db};
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
PTDEBUG && _d('Resuming after db', $db);
|
||||||
|
# If we're not resuming from the resume db, then
|
||||||
|
# we aren't resuming from the resume table either.
|
||||||
|
delete $self->{resume}->{db};
|
||||||
|
delete $self->{resume}->{tbl};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@@ -527,7 +540,7 @@ sub _resume_from_table {
|
|||||||
return 1 unless $self->{resume}->{tbl};
|
return 1 unless $self->{resume}->{tbl};
|
||||||
|
|
||||||
if ( $tbl eq $self->{resume}->{tbl} ) {
|
if ( $tbl eq $self->{resume}->{tbl} ) {
|
||||||
if ( !$self->{resume}->{after} ) {
|
if ( !$self->{resume}->{after}->{tbl} ) {
|
||||||
PTDEBUG && _d('Resuming from table', $tbl);
|
PTDEBUG && _d('Resuming from table', $tbl);
|
||||||
delete $self->{resume}->{tbl};
|
delete $self->{resume}->{tbl};
|
||||||
return 1;
|
return 1;
|
||||||
|
@@ -416,13 +416,37 @@ test_so(
|
|||||||
# https://bugs.launchpad.net/percona-toolkit/+bug/911385
|
# https://bugs.launchpad.net/percona-toolkit/+bug/911385
|
||||||
# ############################################################################
|
# ############################################################################
|
||||||
|
|
||||||
# Actually, the important bit here si that it doesn't die, not the results.
|
|
||||||
|
|
||||||
test_so(
|
test_so(
|
||||||
filters => ['--ignore-databases', 'sakila,mysql'],
|
filters => ['--ignore-databases', 'sakila,mysql'],
|
||||||
result => "", # hack; uses lives_ok instead
|
result => "",
|
||||||
lives_ok => 1,
|
lives_ok => 1,
|
||||||
test_name => "Bug 911385: pt-table-checksum v2 fails when --resume + --ignore-database is used"
|
resume => 'sakila.payment',
|
||||||
|
test_name => "Bug 911385: ptc works with --resume + --ignore-database"
|
||||||
|
);
|
||||||
|
|
||||||
|
$dbh->do("CREATE DATABASE zakila");
|
||||||
|
$dbh->do("CREATE TABLE zakila.bug_911385 (i int)");
|
||||||
|
test_so(
|
||||||
|
filters => ['--ignore-databases', 'sakila,mysql'],
|
||||||
|
result => "zakila.bug_911385 ",
|
||||||
|
resume => 'sakila.payment',
|
||||||
|
test_name => "Bug 911385: ...and continues to the next db"
|
||||||
|
);
|
||||||
|
$dbh->do("DROP DATABASE zakila");
|
||||||
|
|
||||||
|
test_so(
|
||||||
|
filters => [qw(--ignore-tables-regex payment --ignore-databases mysql)],
|
||||||
|
result => "",
|
||||||
|
lives_ok => 1,
|
||||||
|
resume => 'sakila.payment',
|
||||||
|
test_name => "Bug 911385: ptc works with --resume + --ignore-tables-regex"
|
||||||
|
);
|
||||||
|
|
||||||
|
test_so(
|
||||||
|
filters => [qw(--ignore-tables-regex payment --ignore-databases mysql)],
|
||||||
|
result => "sakila.rental sakila.staff sakila.store ",
|
||||||
|
resume => 'sakila.payment',
|
||||||
|
test_name => "Bug 911385: ...and continues to the next table"
|
||||||
);
|
);
|
||||||
|
|
||||||
# #############################################################################
|
# #############################################################################
|
||||||
|
Reference in New Issue
Block a user