|
|
|
@ -3790,7 +3790,6 @@ ha_innobase::open( |
|
|
|
dict_table_t* ib_table; |
|
|
|
char norm_name[1000]; |
|
|
|
THD* thd; |
|
|
|
ulint retries = 0; |
|
|
|
char* is_part = NULL; |
|
|
|
ibool par_case_name_set = FALSE; |
|
|
|
char par_case_name[MAX_FULL_NAME_LEN + 1]; |
|
|
|
@ -3823,22 +3822,18 @@ ha_innobase::open( |
|
|
|
upd_buf_size = 0; |
|
|
|
|
|
|
|
/* We look for pattern #P# to see if the table is partitioned
|
|
|
|
MySQL table. The retry logic for partitioned tables is a |
|
|
|
workaround for http://bugs.mysql.com/bug.php?id=33349. Look
|
|
|
|
at support issue https://support.mysql.com/view.php?id=21080
|
|
|
|
for more details. */ |
|
|
|
MySQL table. */ |
|
|
|
#ifdef __WIN__
|
|
|
|
is_part = strstr(norm_name, "#p#"); |
|
|
|
#else
|
|
|
|
is_part = strstr(norm_name, "#P#"); |
|
|
|
#endif /* __WIN__ */
|
|
|
|
|
|
|
|
retry: |
|
|
|
/* Get pointer to a table object in InnoDB dictionary cache */ |
|
|
|
ib_table = dict_table_get(norm_name, TRUE); |
|
|
|
|
|
|
|
if (NULL == ib_table) { |
|
|
|
if (is_part && retries < 10) { |
|
|
|
if (is_part) { |
|
|
|
/* MySQL partition engine hard codes the file name
|
|
|
|
separator as "#P#". The text case is fixed even if |
|
|
|
lower_case_table_names is set to 1 or 2. This is true |
|
|
|
@ -3881,11 +3876,7 @@ retry: |
|
|
|
ib_table = dict_table_get( |
|
|
|
par_case_name, FALSE); |
|
|
|
} |
|
|
|
if (!ib_table) { |
|
|
|
++retries; |
|
|
|
os_thread_sleep(100000); |
|
|
|
goto retry; |
|
|
|
} else { |
|
|
|
if (ib_table) { |
|
|
|
#ifndef __WIN__
|
|
|
|
sql_print_warning("Partition table %s opened " |
|
|
|
"after converting to lower " |
|
|
|
@ -3911,9 +3902,8 @@ retry: |
|
|
|
} |
|
|
|
|
|
|
|
if (is_part) { |
|
|
|
sql_print_error("Failed to open table %s after " |
|
|
|
"%lu attempts.\n", norm_name, |
|
|
|
retries); |
|
|
|
sql_print_error("Failed to open table %s.\n", |
|
|
|
norm_name); |
|
|
|
} |
|
|
|
|
|
|
|
sql_print_error("Cannot find or open table %s from\n" |
|
|
|
|