I'm not sure I understand the underlying problem yet, but we hardcode the number of tries to 10:
my $name_tries = 10; # don't try forever
...
while ( $name_tries-- ) {
...
}
# This shouldn't happen.
# Here and in the attempt to find a new table name we probably ought to
# use --tries (and maybe a Retry object?)
die ts("Failed to find a unique old table name after "
. "serveral attempts.\n");
}
And then, for some reason, the "Try X of 10" instead of showing 1, 2, 3, etc, is always showing 1.
# cat /tmp/pt-osc_t1.out.err | grep "Try code did not succeed" | wc -l
10
# cat /tmp/pt-osc_t1_2.out.err | grep "Try"
# Retry:3745 24763 Try 1 of 10
# Retry:3762 24763 Try code succeeded
# Retry:3745 24763 Try 1 of 10
# Retry:3762 24763 Try code succeeded
# Retry:3745 24763 Try 1 of 10
# Retry:3762 24763 Try code succeeded
# Retry:3745 24763 Try 1 of 10
# Retry:3762 24763 Try code succeeded
# Retry:3745 24763 Try 1 of 10
# Retry:3762 24763 Try code succeeded
# Retry:3745 24763 Try 1 of 10
# Retry:3751 24763 Try code failed: DBD::mysql::db do failed: Table '_t1_old' already exists [for Statement "RENAME TABLE `test`.`t1` TO `test`.`_t1_old`, `test`.`__t1_new` TO `test`.`t1`"] at /usr/bin/pt-online-schema-change line 10134.
# Retry:3767 24763 Try code did not succeed
# Retry:3745 24763 Try 1 of 10
# Retry:3751 24763 Try code failed: DBD::mysql::db do failed: Table '__t1_old' already exists [for Statement "RENAME TABLE `test`.`t1` TO `test`.`__t1_old`, `test`.`__t1_new` TO `test`.`t1`"] at /usr/bin/pt-online-schema-change line 10134.
# Retry:3767 24763 Try code did not succeed
# Retry:3745 24763 Try 1 of 10
# Retry:3751 24763 Try code failed: DBD::mysql::db do failed: Table '___t1_old' already exists [for Statement "RENAME TABLE `test`.`t1` TO `test`.`___t1_old`, `test`.`__t1_new` TO `test`.`t1`"] at /usr/bin/pt-online-schema-change line 10134.
# Retry:3767 24763 Try code did not succeed
# Retry:3745 24763 Try 1 of 10
# Retry:3751 24763 Try code failed: DBD::mysql::db do failed: Table '____t1_old' already exists [for Statement "RENAME TABLE `test`.`t1` TO `test`.`____t1_old`, `test`.`__t1_new` TO `test`.`t1`"] at /usr/bin/pt-online-schema-change line 10134.
# Retry:3767 24763 Try code did not succeed
# Retry:3745 24763 Try 1 of 10
# Retry:3751 24763 Try code failed: DBD::mysql::db do failed: Table '_____t1_old' already exists [for Statement "RENAME TABLE `test`.`t1` TO `test`.`_____t1_old`, `test`.`__t1_new` TO `test`.`t1`"] at /usr/bin/pt-online-schema-change line 10134.
# Retry:3767 24763 Try code did not succeed
# Retry:3745 24763 Try 1 of 10
# Retry:3751 24763 Try code failed: DBD::mysql::db do failed: Table '______t1_old' already exists [for Statement "RENAME TABLE `test`.`t1` TO `test`.`______t1_old`, `test`.`__t1_new` TO `test`.`t1`"] at /usr/bin/pt-online-schema-change line 10134.
# Retry:3767 24763 Try code did not succeed
# Retry:3745 24763 Try 1 of 10
# Retry:3751 24763 Try code failed: DBD::mysql::db do failed: Table '_______t1_old' already exists [for Statement "RENAME TABLE `test`.`t1` TO `test`.`_______t1_old`, `test`.`__t1_new` TO `test`.`t1`"] at /usr/bin/pt-online-schema-change line 10134.
# Retry:3767 24763 Try code did not succeed
# Retry:3745 24763 Try 1 of 10
# Retry:3751 24763 Try code failed: DBD::mysql::db do failed: Table '________t1_old' already exists [for Statement "RENAME TABLE `test`.`t1` TO `test`.`________t1_old`, `test`.`__t1_new` TO `test`.`t1`"] at /usr/bin/pt-online-schema-change line 10134.
# Retry:3767 24763 Try code did not succeed
# Retry:3745 24763 Try 1 of 10
# Retry:3751 24763 Try code failed: DBD::mysql::db do failed: Table '_________t1_old' already exists [for Statement "RENAME TABLE `test`.`t1` TO `test`.`_________t1_old`, `test`.`__t1_new` TO `test`.`t1`"] at /usr/bin/pt-online-schema-change line 10134.
# Retry:3767 24763 Try code did not succeed
# Retry:3745 24763 Try 1 of 10
# Retry:3751 24763 Try code failed: DBD::mysql::db do failed: Table '__________t1_old' already exists [for Statement "RENAME TABLE `test`.`t1` TO `test`.`__________t1_old`, `test`.`__t1_new` TO `test`.`t1`"] at /usr/bin/pt-online-schema-change line 10134.
# Retry:3767 24763 Try code did not succeed
# Retry:3745 24763 Try 1 of 10
# Retry:3762 24763 Try code succeeded
# Retry:3745 24763 Try 1 of 10
# Retry:3762 24763 Try code succeeded
# Retry:3745 24763 Try 1 of 10
# Retry:3762 24763 Try code succeeded
After inspecting the code (sub swap_tables) I see that the title is wrong, since there is a length check in the table name:
if ( length($table_name) > 64 ) { table_name = substr($table_name, 0, 64);
$truncated _table_ name);
$table_ name = $truncated_ table_name;
my $truncated_
PTDEBUG && _d($table_name, 'is > 64 chars, truncating to',
}
I'm not sure I understand the underlying problem yet, but we hardcode the number of tries to 10:
my $name_tries = 10; # don't try forever
...
while ( $name_tries-- ) {
...
}
# This shouldn't happen.
# Here and in the attempt to find a new table name we probably ought to
# use --tries (and maybe a Retry object?)
die ts("Failed to find a unique old table name after "
. "serveral attempts.\n");
}
And then, for some reason, the "Try X of 10" instead of showing 1, 2, 3, etc, is always showing 1.
# cat /tmp/pt- osc_t1. out.err | grep "Try code did not succeed" | wc -l
10
# cat /tmp/pt- osc_t1_ 2.out.err | grep "Try" pt-online- schema- change line 10134. pt-online- schema- change line 10134. pt-online- schema- change line 10134. `____t1_ old`, `test`.`__t1_new` TO `test`.`t1`"] at /usr/bin/ pt-online- schema- change line 10134. `_____t1_ old`, `test`.`__t1_new` TO `test`.`t1`"] at /usr/bin/ pt-online- schema- change line 10134. `______ t1_old` , `test`.`__t1_new` TO `test`.`t1`"] at /usr/bin/ pt-online- schema- change line 10134. `______ _t1_old` , `test`.`__t1_new` TO `test`.`t1`"] at /usr/bin/ pt-online- schema- change line 10134. `______ __t1_old` , `test`.`__t1_new` TO `test`.`t1`"] at /usr/bin/ pt-online- schema- change line 10134. `______ ___t1_old` , `test`.`__t1_new` TO `test`.`t1`"] at /usr/bin/ pt-online- schema- change line 10134. `______ ____t1_ old`, `test`.`__t1_new` TO `test`.`t1`"] at /usr/bin/ pt-online- schema- change line 10134.
# Retry:3745 24763 Try 1 of 10
# Retry:3762 24763 Try code succeeded
# Retry:3745 24763 Try 1 of 10
# Retry:3762 24763 Try code succeeded
# Retry:3745 24763 Try 1 of 10
# Retry:3762 24763 Try code succeeded
# Retry:3745 24763 Try 1 of 10
# Retry:3762 24763 Try code succeeded
# Retry:3745 24763 Try 1 of 10
# Retry:3762 24763 Try code succeeded
# Retry:3745 24763 Try 1 of 10
# Retry:3751 24763 Try code failed: DBD::mysql::db do failed: Table '_t1_old' already exists [for Statement "RENAME TABLE `test`.`t1` TO `test`.`_t1_old`, `test`.`__t1_new` TO `test`.`t1`"] at /usr/bin/
# Retry:3767 24763 Try code did not succeed
# Retry:3745 24763 Try 1 of 10
# Retry:3751 24763 Try code failed: DBD::mysql::db do failed: Table '__t1_old' already exists [for Statement "RENAME TABLE `test`.`t1` TO `test`.`__t1_old`, `test`.`__t1_new` TO `test`.`t1`"] at /usr/bin/
# Retry:3767 24763 Try code did not succeed
# Retry:3745 24763 Try 1 of 10
# Retry:3751 24763 Try code failed: DBD::mysql::db do failed: Table '___t1_old' already exists [for Statement "RENAME TABLE `test`.`t1` TO `test`.`___t1_old`, `test`.`__t1_new` TO `test`.`t1`"] at /usr/bin/
# Retry:3767 24763 Try code did not succeed
# Retry:3745 24763 Try 1 of 10
# Retry:3751 24763 Try code failed: DBD::mysql::db do failed: Table '____t1_old' already exists [for Statement "RENAME TABLE `test`.`t1` TO `test`.
# Retry:3767 24763 Try code did not succeed
# Retry:3745 24763 Try 1 of 10
# Retry:3751 24763 Try code failed: DBD::mysql::db do failed: Table '_____t1_old' already exists [for Statement "RENAME TABLE `test`.`t1` TO `test`.
# Retry:3767 24763 Try code did not succeed
# Retry:3745 24763 Try 1 of 10
# Retry:3751 24763 Try code failed: DBD::mysql::db do failed: Table '______t1_old' already exists [for Statement "RENAME TABLE `test`.`t1` TO `test`.
# Retry:3767 24763 Try code did not succeed
# Retry:3745 24763 Try 1 of 10
# Retry:3751 24763 Try code failed: DBD::mysql::db do failed: Table '_______t1_old' already exists [for Statement "RENAME TABLE `test`.`t1` TO `test`.
# Retry:3767 24763 Try code did not succeed
# Retry:3745 24763 Try 1 of 10
# Retry:3751 24763 Try code failed: DBD::mysql::db do failed: Table '________t1_old' already exists [for Statement "RENAME TABLE `test`.`t1` TO `test`.
# Retry:3767 24763 Try code did not succeed
# Retry:3745 24763 Try 1 of 10
# Retry:3751 24763 Try code failed: DBD::mysql::db do failed: Table '_________t1_old' already exists [for Statement "RENAME TABLE `test`.`t1` TO `test`.
# Retry:3767 24763 Try code did not succeed
# Retry:3745 24763 Try 1 of 10
# Retry:3751 24763 Try code failed: DBD::mysql::db do failed: Table '__________t1_old' already exists [for Statement "RENAME TABLE `test`.`t1` TO `test`.
# Retry:3767 24763 Try code did not succeed
# Retry:3745 24763 Try 1 of 10
# Retry:3762 24763 Try code succeeded
# Retry:3745 24763 Try 1 of 10
# Retry:3762 24763 Try code succeeded
# Retry:3745 24763 Try 1 of 10
# Retry:3762 24763 Try code succeeded