~percona-toolkit-dev/percona-toolkit/2.2

« back to all changes in this revision

Viewing changes to bin/pt-online-schema-change

Merge fix-pt-osc-drop-bug-1188002.

Show diffs side-by-side

added added

removed removed

Lines of Context:
7710
7710
my $exit_status = 0;
7711
7711
my $oktorun     = 1;
7712
7712
my @drop_trigger_sqls;
 
7713
my @triggers_not_dropped;
7713
7714
 
7714
7715
$OUTPUT_AUTOFLUSH = 1;
7715
7716
 
7716
7717
sub main {
7717
 
   local @ARGV        = @_;
 
7718
   local @ARGV = @_;
7718
7719
 
7719
7720
   # Reset global vars else tests will fail.
7720
 
   $exit_status       = 0;
7721
 
   $oktorun           = 1;
7722
 
   @drop_trigger_sqls = ();
 
7721
   $exit_status          = 0;
 
7722
   $oktorun              = 1;
 
7723
   @drop_trigger_sqls    = ();
 
7724
   @triggers_not_dropped = ();
7723
7725
 
7724
7726
   my %stats = (
7725
7727
      INSERT => 0,
8419
8421
             . "--no-drop-new-table was specified.  To drop the new table, "
8420
8422
             . "execute:\n$sql\n";
8421
8423
      }
 
8424
      elsif ( @triggers_not_dropped ) {
 
8425
         # https://bugs.launchpad.net/percona-toolkit/+bug/1188002
 
8426
         print "Not dropping the new table $new_tbl->{name} because "
 
8427
            . "dropping these triggers failed:\n"
 
8428
            . join("\n", map { "  $_" } @triggers_not_dropped)
 
8429
            . "\nThese triggers must be dropped before dropping "
 
8430
            . "$new_tbl->{name}, else writing to $orig_tbl->{name} will "
 
8431
            . "cause MySQL error 1146 (42S02): \"Table $new_tbl->{name} "
 
8432
            . " doesn't exist\".\n";
 
8433
      }
8422
8434
      else {
8423
8435
         print "Dropping new table...\n";
8424
8436
         print $sql, "\n" if $o->get('print');
10025
10037
   else {
10026
10038
      print "Dropping triggers...\n";
10027
10039
   }
10028
 
 
10029
 
   my @not_dropped;
 
10040
 
10030
10041
   foreach my $sql ( @drop_trigger_sqls ) {
10031
10042
      print $sql, "\n" if $o->get('print');
10032
10043
      if ( $o->get('execute') ) {
10044
10055
         };
10045
10056
         if ( $EVAL_ERROR ) {
10046
10057
            warn "Error dropping trigger: $EVAL_ERROR\n";
10047
 
            push @not_dropped, $sql;
 
10058
            push @triggers_not_dropped, $sql;
10048
10059
            $exit_status = 1;
10049
10060
         }
10050
10061
      }
10051
10062
   }
10052
10063
 
10053
10064
   if ( $o->get('execute') ) {
10054
 
      if ( !@not_dropped ) {
 
10065
      if ( !@triggers_not_dropped ) {
10055
10066
         print "Dropped triggers OK.\n";
10056
10067
      }
10057
10068
      else {
10058
10069
         warn "To try dropping the triggers again, execute:\n"
10059
 
            . join("\n", @not_dropped) . "\n";
 
10070
            . join("\n", @triggers_not_dropped) . "\n";
10060
10071
      }
10061
10072
   }
10062
10073