Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
mariadb
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
mariadb
Commits
98e57576
Commit
98e57576
authored
Apr 03, 2007
by
gni/root@dev3-221.dev.cn.tlan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
BUG#18676 when cluster storage engine is down, misleading error message on create table with 4009.
parent
eecdb3ba
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
29 additions
and
17 deletions
+29
-17
mysql-test/r/ndb_autodiscover.result
mysql-test/r/ndb_autodiscover.result
+1
-1
sql/ha_ndbcluster.cc
sql/ha_ndbcluster.cc
+5
-6
sql/handler.cc
sql/handler.cc
+4
-4
sql/sql_table.cc
sql/sql_table.cc
+19
-6
No files found.
mysql-test/r/ndb_autodiscover.result
View file @
98e57576
...
...
@@ -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 (
...
...
sql/ha_ndbcluster.cc
View file @
98e57576
...
...
@@ -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
();
...
...
sql/handler.cc
View file @
98e57576
...
...
@@ -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
# Error code
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
...
...
sql/sql_table.cc
View file @
98e57576
...
...
@@ -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
;
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
;
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment