mirror of
https://github.com/percona/percona-toolkit.git
synced 2025-09-10 13:11:32 +00:00
Eval checking each table in case the table goes away.
This commit is contained in:
@@ -3405,74 +3405,74 @@ sub main {
|
|||||||
);
|
);
|
||||||
TABLE:
|
TABLE:
|
||||||
while ( my $tbl = $schema_itr->next() ) {
|
while ( my $tbl = $schema_itr->next() ) {
|
||||||
$tbl->{engine} = $tbl->{tbl_struct}->{engine};
|
eval {
|
||||||
|
$tbl->{engine} = $tbl->{tbl_struct}->{engine};
|
||||||
|
|
||||||
my ($keys, $clustered_key, $fks);
|
my ($keys, $clustered_key, $fks);
|
||||||
if ( $get_keys ) {
|
if ( $get_keys ) {
|
||||||
($keys, $clustered_key)
|
($keys, $clustered_key)
|
||||||
= $tp->get_keys($tbl->{ddl}, {});
|
= $tp->get_keys($tbl->{ddl}, {});
|
||||||
}
|
}
|
||||||
if ( $get_fks ) {
|
if ( $get_fks ) {
|
||||||
$fks = $tp->get_fks($tbl->{ddl}, {database => $tbl->{db}});
|
$fks = $tp->get_fks($tbl->{ddl}, {database => $tbl->{db}});
|
||||||
}
|
|
||||||
|
|
||||||
next TABLE unless ($keys && %$keys) || ($fks && %$fks);
|
|
||||||
|
|
||||||
if ( $o->got('verbose') ) {
|
|
||||||
print_all_keys($keys, $tbl, \%seen_tbl) if $keys;
|
|
||||||
print_all_keys($fks, $tbl, \%seen_tbl) if $fks;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
PTDEBUG && _d('Getting duplicate keys on', $tbl->{db}, $tbl->{tbl});
|
|
||||||
eval {
|
|
||||||
if ( $keys ) {
|
|
||||||
$dk->get_duplicate_keys(
|
|
||||||
$keys,
|
|
||||||
clustered_key => $clustered_key,
|
|
||||||
tbl_info => $tbl,
|
|
||||||
callback => \&print_duplicate_key,
|
|
||||||
%tp_opts,
|
|
||||||
# get_duplicate_keys() ignores these args but passes them
|
|
||||||
# to the callback:
|
|
||||||
dbh => $dbh,
|
|
||||||
is_fk => 0,
|
|
||||||
o => $o,
|
|
||||||
ks => $ks,
|
|
||||||
tp => $tp,
|
|
||||||
q => $q,
|
|
||||||
seen_tbl => \%seen_tbl,
|
|
||||||
summary => \%summary,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
if ( $fks ) {
|
|
||||||
$dk->get_duplicate_fks(
|
|
||||||
$fks,
|
|
||||||
tbl_info => $tbl,
|
|
||||||
callback => \&print_duplicate_key,
|
|
||||||
%tp_opts,
|
|
||||||
# get_duplicate_fks() ignores these args but passes them
|
|
||||||
# to the callback:
|
|
||||||
dbh => $dbh,
|
|
||||||
is_fk => 1,
|
|
||||||
o => $o,
|
|
||||||
ks => $ks,
|
|
||||||
tp => $tp,
|
|
||||||
q => $q,
|
|
||||||
seen_tbl => \%seen_tbl,
|
|
||||||
summary => \%summary,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
if ( $EVAL_ERROR ) {
|
|
||||||
warn "Error checking `$tbl->{db}`.`$tbl->{tbl}` for duplicate keys: "
|
|
||||||
. $EVAL_ERROR;
|
|
||||||
next TABLE;
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
# Always count Total Keys so print_key_summary won't die
|
if ( ($keys && %$keys) || ($fks && %$fks) ) {
|
||||||
# because %summary is empty.
|
if ( $o->got('verbose') ) {
|
||||||
$summary{'Total Indexes'} += (scalar keys %$keys) + (scalar keys %$fks)
|
print_all_keys($keys, $tbl, \%seen_tbl) if $keys;
|
||||||
|
print_all_keys($fks, $tbl, \%seen_tbl) if $fks;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
PTDEBUG && _d('Getting duplicate keys on',
|
||||||
|
$tbl->{db}, $tbl->{tbl});
|
||||||
|
if ( $keys ) {
|
||||||
|
$dk->get_duplicate_keys(
|
||||||
|
$keys,
|
||||||
|
clustered_key => $clustered_key,
|
||||||
|
tbl_info => $tbl,
|
||||||
|
callback => \&print_duplicate_key,
|
||||||
|
%tp_opts,
|
||||||
|
# get_duplicate_keys() ignores these args but passes them
|
||||||
|
# to the callback:
|
||||||
|
dbh => $dbh,
|
||||||
|
is_fk => 0,
|
||||||
|
o => $o,
|
||||||
|
ks => $ks,
|
||||||
|
tp => $tp,
|
||||||
|
q => $q,
|
||||||
|
seen_tbl => \%seen_tbl,
|
||||||
|
summary => \%summary,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if ( $fks ) {
|
||||||
|
$dk->get_duplicate_fks(
|
||||||
|
$fks,
|
||||||
|
tbl_info => $tbl,
|
||||||
|
callback => \&print_duplicate_key,
|
||||||
|
%tp_opts,
|
||||||
|
# get_duplicate_fks() ignores these args but passes them
|
||||||
|
# to the callback:
|
||||||
|
dbh => $dbh,
|
||||||
|
is_fk => 1,
|
||||||
|
o => $o,
|
||||||
|
ks => $ks,
|
||||||
|
tp => $tp,
|
||||||
|
q => $q,
|
||||||
|
seen_tbl => \%seen_tbl,
|
||||||
|
summary => \%summary,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Always count Total Keys so print_key_summary won't die
|
||||||
|
# because %summary is empty.
|
||||||
|
$summary{'Total Indexes'} += (scalar keys %$keys)
|
||||||
|
+ (scalar keys %$fks)
|
||||||
|
}
|
||||||
|
};
|
||||||
|
if ( $EVAL_ERROR ) {
|
||||||
|
warn "Error checking $tbl->{db}.$tbl->{tbl}: $EVAL_ERROR";
|
||||||
|
}
|
||||||
} # TABLE
|
} # TABLE
|
||||||
|
|
||||||
print_key_summary(%summary) if $o->get('summary');
|
print_key_summary(%summary) if $o->get('summary');
|
||||||
|
Reference in New Issue
Block a user