From d643d8896e6012eca5ee7603dfcb8dd3ecb87955 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Kusalananda=20K=C3=A4h=C3=A4ri?= <ak4@sanger.ac.uk> Date: Tue, 6 Mar 2012 10:49:19 +0000 Subject: [PATCH] Add loop labels. Do not die when finding an InnoDB table, go on to the next database instead. --- misc-scripts/CopyDBoverServer.pl | 74 +++++++++++++++++++------------- 1 file changed, 43 insertions(+), 31 deletions(-) diff --git a/misc-scripts/CopyDBoverServer.pl b/misc-scripts/CopyDBoverServer.pl index 5e31037dd3..9feb73da19 100755 --- a/misc-scripts/CopyDBoverServer.pl +++ b/misc-scripts/CopyDBoverServer.pl @@ -441,6 +441,7 @@ if ($do_unlink_tmp_file) { ## directory. ## ##====================================================================## +TODO: foreach my $spec (@todo) { my $source_server = $spec->{'source_server'}; my $source_hostname = $spec->{'source_hostname'}; @@ -478,7 +479,7 @@ foreach my $spec (@todo) { $spec->{'status'} = sprintf( "FAILED: can not connect to source database '%s@%s:%d'.", $source_db, $source_server, $source_port ); - next; + next TODO; } my $target_dsn = sprintf( "DBI:mysql:host=%s;port=%d", @@ -499,7 +500,7 @@ foreach my $spec (@todo) { $target_server, $target_port ); $source_dbh->disconnect(); - next; + next TODO; } # Get source and target server data directories. @@ -523,7 +524,7 @@ foreach my $spec (@todo) { $source_server, $source_port ); $source_dbh->disconnect(); - next; + next TODO; } if ( defined($target_location) ) { $target_dir = $target_location } @@ -539,7 +540,7 @@ foreach my $spec (@todo) { $target_server, $target_port ); $source_dbh->disconnect(); - next; + next TODO; } my $tmp_dir; @@ -576,7 +577,7 @@ foreach my $spec (@todo) { $destination_dir ); $source_dbh->disconnect(); - next; + next TODO; } if ( !$opt_force && -d $staging_dir ) { @@ -587,7 +588,7 @@ foreach my $spec (@todo) { sprintf( "FAILED: staging directory '%s' exists.", $staging_dir ); $source_dbh->disconnect(); - next; + next TODO; } if ( !mkdir($staging_dir) ) { @@ -600,7 +601,7 @@ foreach my $spec (@todo) { $staging_dir ); $source_dbh->disconnect(); - next; + next TODO; } } @@ -615,38 +616,47 @@ foreach my $spec (@todo) { # Fancy magic from DBI manual. $table_sth->bind_columns( \( @row{ @{ $table_sth->{'NAME_lc'} } } ) ); + TABLE: while ( $table_sth->fetch() ) { my $table = $row{'name'}; my $engine = $row{'engine'}; if ( defined($opt_only_tables) && !exists( $only_tables{$table} ) ) { - next; - } elsif ( defined($opt_skip_tables) - && exists( $skip_tables{$table} ) ) { - next; + next TABLE; + } + elsif ( defined($opt_skip_tables) && + exists( $skip_tables{$table} ) ) + { + next TABLE; } if ( defined($engine) ) { if ( $engine eq 'InnoDB' ) { if ( !$opt_innodb ) { - warn( sprintf( "SKIPPING InnoDB table '%s.%s'\n", - $source_db, $table ) ); - next; - } else { - die(sprintf( - "Found InnoDB table '%s.%s'\n" - . "Please convert table engine or specify --noinnodb", - $source_db, $table ) ); + warn( + sprintf( "SKIPPING InnoDB table '%s.%s'\n", + $source_db, $table + ) ); + next TABLE; + } + else { + $spec->{'status'} = + sprintf( "FAILED: can not copy InnoDB tables. " . + "Please convert '%s.%s' to MyISAM " . + "or run with --noinnodb.", + $source_db, $table ); + next TODO; } } - } else { - if ( $opt_skip_views ) { + } + else { + if ($opt_skip_views) { warn( sprintf( "SKIPPING view '%s'\n", $table ) ); - next; + next TABLE; } else { - push(@views, $table); + push( @views, $table ); } } @@ -766,7 +776,7 @@ foreach my $spec (@todo) { $spec->{'status'} = sprintf( "FAILED: copy failed (cleanup of '%s' may be needed).", $staging_dir ); - next; + next TODO; } ##------------------------------------------------------------------## @@ -787,6 +797,7 @@ foreach my $spec (@todo) { else { my $ok = 1; + VIEW: foreach my $current_view (@views) { print "Processing $current_view\n"; @@ -804,7 +815,7 @@ foreach my $spec (@todo) { sprintf( q{Cannot tie file '%s' for VIEW repair. Error}, $view_frm_loc ) ); $ok = 0; - next; + next VIEW; } } @@ -862,7 +873,7 @@ foreach my $spec (@todo) { } ## end foreach my $index ( glob( catfile...)) } ## end foreach my $table (@tables) - if ($check_failed) { next } + if ($check_failed) { next TODO } } ## end else [ if ( !$opt_check ) ] @@ -887,7 +898,7 @@ foreach my $spec (@todo) { sprintf( "FAILED: can not create destination directory '%s' " . "(cleanup of '%s' may be needed)", $destination_dir, $staging_dir ); - next; + next TODO; } move( catfile( $staging_dir, 'db.opt' ), $destination_dir ); @@ -898,6 +909,7 @@ foreach my $spec (@todo) { printf( "Moving %s...\n", $table ); + FILE: foreach my $file (@files) { if ( !move( $file, $destination_dir ) ) { warn( sprintf( "Failed to move database.\n" @@ -905,10 +917,10 @@ foreach my $spec (@todo) { $staging_dir, $destination_dir ) ); $spec->{'status'} = - sprintf( "FAILED: move from staging directory failed " - . "(cleanup of '%s' and '%s' may be needed)", - $staging_dir, $destination_dir ); - next; + sprintf( "FAILED: can not move '%s' from staging directory " . + "(cleanup of '%s' and '%s' may be needed)", + $file, $staging_dir, $destination_dir ); + next FILE; } } } -- GitLab