diff --git a/bin/pt-duplicate-key-checker b/bin/pt-duplicate-key-checker index 96907b47..7c382bc6 100755 --- a/bin/pt-duplicate-key-checker +++ b/bin/pt-duplicate-key-checker @@ -3026,11 +3026,16 @@ sub next { if ( !$self->{initialized} ) { $self->{initialized} = 1; - if ( $self->{resume}->{tbl} - && !$self->table_is_allowed(@{$self->{resume}}{qw(db tbl)}) ) { - PTDEBUG && _d('Will resume after', - join('.', @{$self->{resume}}{qw(db tbl)})); - $self->{resume}->{after} = 1; + if ( $self->{resume}->{tbl} ) { + if ( !$self->table_is_allowed(@{$self->{resume}}{qw(db tbl)}) ) { + PTDEBUG && _d('Will resume after', + join('.', @{$self->{resume}}{qw(db tbl)})); + $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; + } } } @@ -3128,16 +3133,17 @@ sub _iterate_dbh { if ( !defined $self->{dbs} ) { my $sql = 'SHOW DATABASES'; PTDEBUG && _d($sql); - my @dbs = grep { $self->database_is_allowed($_) } - @{$dbh->selectcol_arrayref($sql)}; + my @dbs = grep { + $self->_resume_from_database($_) + && + $self->database_is_allowed($_) + } @{$dbh->selectcol_arrayref($sql)}; PTDEBUG && _d('Found', scalar @dbs, 'databases'); $self->{dbs} = \@dbs; } if ( !$self->{db} ) { - do { - $self->{db} = shift @{$self->{dbs}}; - } until $self->_resume_from_database($self->{db}); + $self->{db} = shift @{$self->{dbs}}; PTDEBUG && _d('Next database:', $self->{db}); return unless $self->{db}; } @@ -3244,7 +3250,6 @@ sub table_is_allowed { |slow_log |innodb_index_stats |innodb_table_stats - |ndb_binlog_index |slave_master_info |slave_relay_log_info |slave_worker_info @@ -3317,11 +3322,17 @@ sub _resume_from_database { my ($self, $db) = @_; return 1 unless $self->{resume}->{db}; - if ( $db eq $self->{resume}->{db} ) { - PTDEBUG && _d('At resume db', $db); - delete $self->{resume}->{db}; - return 1; + if ( !$self->{resume}->{after}->{db} ) { + PTDEBUG && _d('Resuming from db', $db); + delete $self->{resume}->{db}; + return 1; + } + else { + PTDEBUG && _d('Resuming after db', $db); + delete $self->{resume}->{db}; + delete $self->{resume}->{tbl}; + } } return 0; @@ -3333,7 +3344,7 @@ sub _resume_from_table { return 1 unless $self->{resume}->{tbl}; if ( $tbl eq $self->{resume}->{tbl} ) { - if ( !$self->{resume}->{after} ) { + if ( !$self->{resume}->{after}->{tbl} ) { PTDEBUG && _d('Resuming from table', $tbl); delete $self->{resume}->{tbl}; return 1; diff --git a/bin/pt-index-usage b/bin/pt-index-usage index f786206b..185c56ee 100755 --- a/bin/pt-index-usage +++ b/bin/pt-index-usage @@ -3844,11 +3844,16 @@ sub next { if ( !$self->{initialized} ) { $self->{initialized} = 1; - if ( $self->{resume}->{tbl} - && !$self->table_is_allowed(@{$self->{resume}}{qw(db tbl)}) ) { - PTDEBUG && _d('Will resume after', - join('.', @{$self->{resume}}{qw(db tbl)})); - $self->{resume}->{after} = 1; + if ( $self->{resume}->{tbl} ) { + if ( !$self->table_is_allowed(@{$self->{resume}}{qw(db tbl)}) ) { + PTDEBUG && _d('Will resume after', + join('.', @{$self->{resume}}{qw(db tbl)})); + $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; + } } } @@ -3946,16 +3951,17 @@ sub _iterate_dbh { if ( !defined $self->{dbs} ) { my $sql = 'SHOW DATABASES'; PTDEBUG && _d($sql); - my @dbs = grep { $self->database_is_allowed($_) } - @{$dbh->selectcol_arrayref($sql)}; + my @dbs = grep { + $self->_resume_from_database($_) + && + $self->database_is_allowed($_) + } @{$dbh->selectcol_arrayref($sql)}; PTDEBUG && _d('Found', scalar @dbs, 'databases'); $self->{dbs} = \@dbs; } if ( !$self->{db} ) { - do { - $self->{db} = shift @{$self->{dbs}}; - } until $self->_resume_from_database($self->{db}); + $self->{db} = shift @{$self->{dbs}}; PTDEBUG && _d('Next database:', $self->{db}); return unless $self->{db}; } @@ -4062,7 +4068,6 @@ sub table_is_allowed { |slow_log |innodb_index_stats |innodb_table_stats - |ndb_binlog_index |slave_master_info |slave_relay_log_info |slave_worker_info @@ -4135,11 +4140,17 @@ sub _resume_from_database { my ($self, $db) = @_; return 1 unless $self->{resume}->{db}; - if ( $db eq $self->{resume}->{db} ) { - PTDEBUG && _d('At resume db', $db); - delete $self->{resume}->{db}; - return 1; + if ( !$self->{resume}->{after}->{db} ) { + PTDEBUG && _d('Resuming from db', $db); + delete $self->{resume}->{db}; + return 1; + } + else { + PTDEBUG && _d('Resuming after db', $db); + delete $self->{resume}->{db}; + delete $self->{resume}->{tbl}; + } } return 0; @@ -4151,7 +4162,7 @@ sub _resume_from_table { return 1 unless $self->{resume}->{tbl}; if ( $tbl eq $self->{resume}->{tbl} ) { - if ( !$self->{resume}->{after} ) { + if ( !$self->{resume}->{after}->{tbl} ) { PTDEBUG && _d('Resuming from table', $tbl); delete $self->{resume}->{tbl}; return 1; diff --git a/bin/pt-table-checksum b/bin/pt-table-checksum index f54b12fb..71d4b853 100755 --- a/bin/pt-table-checksum +++ b/bin/pt-table-checksum @@ -6991,7 +6991,6 @@ sub table_is_allowed { |slow_log |innodb_index_stats |innodb_table_stats - |ndb_binlog_index |slave_master_info |slave_relay_log_info |slave_worker_info diff --git a/bin/pt-table-sync b/bin/pt-table-sync index 5502a56b..b2957ac3 100755 --- a/bin/pt-table-sync +++ b/bin/pt-table-sync @@ -7521,11 +7521,16 @@ sub next { if ( !$self->{initialized} ) { $self->{initialized} = 1; - if ( $self->{resume}->{tbl} - && !$self->table_is_allowed(@{$self->{resume}}{qw(db tbl)}) ) { - PTDEBUG && _d('Will resume after', - join('.', @{$self->{resume}}{qw(db tbl)})); - $self->{resume}->{after} = 1; + if ( $self->{resume}->{tbl} ) { + if ( !$self->table_is_allowed(@{$self->{resume}}{qw(db tbl)}) ) { + PTDEBUG && _d('Will resume after', + join('.', @{$self->{resume}}{qw(db tbl)})); + $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; + } } } @@ -7623,16 +7628,17 @@ sub _iterate_dbh { if ( !defined $self->{dbs} ) { my $sql = 'SHOW DATABASES'; PTDEBUG && _d($sql); - my @dbs = grep { $self->database_is_allowed($_) } - @{$dbh->selectcol_arrayref($sql)}; + my @dbs = grep { + $self->_resume_from_database($_) + && + $self->database_is_allowed($_) + } @{$dbh->selectcol_arrayref($sql)}; PTDEBUG && _d('Found', scalar @dbs, 'databases'); $self->{dbs} = \@dbs; } if ( !$self->{db} ) { - do { - $self->{db} = shift @{$self->{dbs}}; - } until $self->_resume_from_database($self->{db}); + $self->{db} = shift @{$self->{dbs}}; PTDEBUG && _d('Next database:', $self->{db}); return unless $self->{db}; } @@ -7739,7 +7745,6 @@ sub table_is_allowed { |slow_log |innodb_index_stats |innodb_table_stats - |ndb_binlog_index |slave_master_info |slave_relay_log_info |slave_worker_info @@ -7812,11 +7817,17 @@ sub _resume_from_database { my ($self, $db) = @_; return 1 unless $self->{resume}->{db}; - if ( $db eq $self->{resume}->{db} ) { - PTDEBUG && _d('At resume db', $db); - delete $self->{resume}->{db}; - return 1; + if ( !$self->{resume}->{after}->{db} ) { + PTDEBUG && _d('Resuming from db', $db); + delete $self->{resume}->{db}; + return 1; + } + else { + PTDEBUG && _d('Resuming after db', $db); + delete $self->{resume}->{db}; + delete $self->{resume}->{tbl}; + } } return 0; @@ -7828,7 +7839,7 @@ sub _resume_from_table { return 1 unless $self->{resume}->{tbl}; if ( $tbl eq $self->{resume}->{tbl} ) { - if ( !$self->{resume}->{after} ) { + if ( !$self->{resume}->{after}->{tbl} ) { PTDEBUG && _d('Resuming from table', $tbl); delete $self->{resume}->{tbl}; return 1; diff --git a/lib/SchemaIterator.pm b/lib/SchemaIterator.pm index 7009ef48..56d46cd6 100644 --- a/lib/SchemaIterator.pm +++ b/lib/SchemaIterator.pm @@ -449,7 +449,6 @@ sub table_is_allowed { |slow_log |innodb_index_stats |innodb_table_stats - |ndb_binlog_index |slave_master_info |slave_relay_log_info |slave_worker_info diff --git a/t/pt-table-checksum/basics.t b/t/pt-table-checksum/basics.t index dc364344..d0aa786b 100644 --- a/t/pt-table-checksum/basics.t +++ b/t/pt-table-checksum/basics.t @@ -97,7 +97,7 @@ ok( "Static chunk size (--chunk-time 0)" ); -my $n_checksums = $sandbox_version eq "5.6" ? 88 +my $n_checksums = $sandbox_version eq "5.6" ? 89 : $sandbox_version eq "5.5" ? 90 : $sandbox_version eq "5.1" ? 89 : 85; diff --git a/t/pt-table-checksum/samples/default-results-5.6.txt b/t/pt-table-checksum/samples/default-results-5.6.txt index 8f7325c9..1d735610 100644 --- a/t/pt-table-checksum/samples/default-results-5.6.txt +++ b/t/pt-table-checksum/samples/default-results-5.6.txt @@ -7,6 +7,7 @@ ERRORS DIFFS ROWS SKIPPED TABLE 0 0 461 0 mysql.help_keyword 0 0 1045 0 mysql.help_relation 0 0 324 0 mysql.help_topic +0 0 0 0 mysql.ndb_binlog_index 0 0 0 0 mysql.plugin 0 0 0 0 mysql.proc 0 0 0 0 mysql.procs_priv diff --git a/t/pt-table-checksum/samples/static-chunk-size-results-5.6.txt b/t/pt-table-checksum/samples/static-chunk-size-results-5.6.txt index dc865aa9..ce37f26f 100644 --- a/t/pt-table-checksum/samples/static-chunk-size-results-5.6.txt +++ b/t/pt-table-checksum/samples/static-chunk-size-results-5.6.txt @@ -7,6 +7,7 @@ ERRORS DIFFS ROWS CHUNKS SKIPPED TABLE 0 0 461 1 0 mysql.help_keyword 0 0 1045 1 0 mysql.help_relation 0 0 324 1 0 mysql.help_topic +0 0 0 1 0 mysql.ndb_binlog_index 0 0 0 1 0 mysql.plugin 0 0 0 1 0 mysql.proc 0 0 0 1 0 mysql.procs_priv