mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
BUG#18676 when cluster storage engine is down, misleading error message on create table with 4009.
This commit is contained in:
@ -382,7 +382,7 @@ create table t1 (a int primary key) engine=ndb;
|
||||
select * from t1;
|
||||
a
|
||||
select * from t1;
|
||||
ERROR HY000: Can't lock file (errno: 4009)
|
||||
ERROR HY000: Can't lock file (errno: 157)
|
||||
use test;
|
||||
drop database test_only_ndb_tables;
|
||||
CREATE TABLE t9 (
|
||||
|
@ -203,6 +203,8 @@ static const err_code_mapping err_map[]=
|
||||
|
||||
{ 284, HA_ERR_TABLE_DEF_CHANGED, 0 },
|
||||
|
||||
{4009, HA_ERR_NO_CONNECTION, 1 },
|
||||
|
||||
{ 0, 1, 0 },
|
||||
|
||||
{ -1, -1, 1 }
|
||||
@ -5042,14 +5044,11 @@ int ndbcluster_table_exists_in_engine(THD* thd, const char *db, const char *name
|
||||
dict->invalidateTable(name);
|
||||
if (!(tab= dict->getTable(name)))
|
||||
{
|
||||
const NdbError err= dict->getNdbError();
|
||||
if (err.code == 709)
|
||||
DBUG_RETURN(0);
|
||||
ERR_RETURN(err);
|
||||
ERR_RETURN(dict->getNdbError());
|
||||
}
|
||||
|
||||
DBUG_PRINT("info", ("Found table %s", tab->getName()));
|
||||
DBUG_RETURN(1);
|
||||
DBUG_RETURN(HA_ERR_TABLE_EXIST);
|
||||
}
|
||||
|
||||
|
||||
@ -5234,7 +5233,7 @@ int ndbcluster_find_files(THD *thd,const char *db,const char *path,
|
||||
DBUG_PRINT("info", ("%s existed on disk", name));
|
||||
// The .ndb file exists on disk, but it's not in list of tables in ndb
|
||||
// Verify that handler agrees table is gone.
|
||||
if (ndbcluster_table_exists_in_engine(thd, db, file_name) == 0)
|
||||
if (ndbcluster_table_exists_in_engine(thd, db, file_name) == HA_ERR_NO_SUCH_TABLE)
|
||||
{
|
||||
DBUG_PRINT("info", ("NDB says %s does not exists", file_name));
|
||||
it.remove();
|
||||
|
@ -2442,14 +2442,14 @@ ha_find_files(THD *thd,const char *db,const char *path,
|
||||
Ask handler if the table exists in engine
|
||||
|
||||
RETURN
|
||||
0 Table does not exist
|
||||
1 Table exists
|
||||
HA_ERR_NO_SUCH_TABLE Table does not exist
|
||||
HA_ERR_TABLE_EXIST Table exists
|
||||
# Error code
|
||||
|
||||
*/
|
||||
int ha_table_exists_in_engine(THD* thd, const char* db, const char* name)
|
||||
{
|
||||
int error= 0;
|
||||
int error= HA_ERR_NO_SUCH_TABLE;
|
||||
DBUG_ENTER("ha_table_exists_in_engine");
|
||||
DBUG_PRINT("enter", ("db: %s, name: %s", db, name));
|
||||
#ifdef HAVE_NDBCLUSTER_DB
|
||||
|
@ -1696,6 +1696,7 @@ bool mysql_create_table(THD *thd,const char *db, const char *table_name,
|
||||
alias);
|
||||
DBUG_RETURN(FALSE);
|
||||
}
|
||||
DBUG_PRINT("info",("1"));
|
||||
my_error(ER_TABLE_EXISTS_ERROR, MYF(0), alias);
|
||||
DBUG_RETURN(TRUE);
|
||||
}
|
||||
@ -1706,6 +1707,7 @@ bool mysql_create_table(THD *thd,const char *db, const char *table_name,
|
||||
{
|
||||
if (create_info->options & HA_LEX_CREATE_IF_NOT_EXISTS)
|
||||
goto warn;
|
||||
DBUG_PRINT("info",("2"));
|
||||
my_error(ER_TABLE_EXISTS_ERROR,MYF(0),table_name);
|
||||
goto end;
|
||||
}
|
||||
@ -1724,14 +1726,25 @@ bool mysql_create_table(THD *thd,const char *db, const char *table_name,
|
||||
{
|
||||
bool create_if_not_exists =
|
||||
create_info->options & HA_LEX_CREATE_IF_NOT_EXISTS;
|
||||
if (ha_table_exists_in_engine(thd, db, table_name))
|
||||
int retcode = ha_table_exists_in_engine(thd, db, table_name);
|
||||
DBUG_PRINT("info", ("exists_in_engine: %u",retcode));
|
||||
switch (retcode)
|
||||
{
|
||||
DBUG_PRINT("info", ("Table with same name already existed in handler"));
|
||||
case HA_ERR_NO_SUCH_TABLE:
|
||||
/* Normal case, no table exists. we can go and create it */
|
||||
break;
|
||||
case HA_ERR_TABLE_EXIST:
|
||||
DBUG_PRINT("info", ("Table existed in handler"));
|
||||
|
||||
if (create_if_not_exists)
|
||||
goto warn;
|
||||
my_error(ER_TABLE_EXISTS_ERROR,MYF(0),table_name);
|
||||
goto end;
|
||||
break;
|
||||
default:
|
||||
DBUG_PRINT("info", ("error: %u from storage engine", retcode));
|
||||
my_error(retcode, MYF(0),table_name);
|
||||
goto end;
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user