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
8f21b31d
Commit
8f21b31d
authored
Apr 05, 2007
by
unknown
Browse files
Options
Browse Files
Download
Plain Diff
Merge tulin@bk-internal.mysql.com:/home/bk/mysql-5.0-maint
into whalegate.ndb.mysql.com:/home/tomas/mysql-5.0-ndb
parents
1895cdb3
f6a9b254
Changes
17
Hide whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
96 additions
and
33 deletions
+96
-33
mysql-test/r/ndb_autodiscover.result
mysql-test/r/ndb_autodiscover.result
+1
-1
mysql-test/t/ndb_autodiscover3.test
mysql-test/t/ndb_autodiscover3.test
+9
-3
ndb/src/common/transporter/TCP_Transporter.cpp
ndb/src/common/transporter/TCP_Transporter.cpp
+7
-0
ndb/src/kernel/blocks/dbtup/DbtupPageMap.cpp
ndb/src/kernel/blocks/dbtup/DbtupPageMap.cpp
+7
-0
ndb/src/mgmclient/CommandInterpreter.cpp
ndb/src/mgmclient/CommandInterpreter.cpp
+3
-0
ndb/src/mgmsrv/InitConfigFileParser.cpp
ndb/src/mgmsrv/InitConfigFileParser.cpp
+1
-1
ndb/src/ndbapi/NdbScanFilter.cpp
ndb/src/ndbapi/NdbScanFilter.cpp
+8
-2
ndb/tools/delete_all.cpp
ndb/tools/delete_all.cpp
+1
-0
ndb/tools/desc.cpp
ndb/tools/desc.cpp
+1
-0
ndb/tools/drop_index.cpp
ndb/tools/drop_index.cpp
+1
-0
ndb/tools/drop_tab.cpp
ndb/tools/drop_tab.cpp
+1
-0
ndb/tools/listTables.cpp
ndb/tools/listTables.cpp
+1
-0
ndb/tools/select_all.cpp
ndb/tools/select_all.cpp
+1
-0
ndb/tools/select_count.cpp
ndb/tools/select_count.cpp
+1
-0
sql/ha_ndbcluster.cc
sql/ha_ndbcluster.cc
+30
-16
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 @
8f21b31d
...
@@ -382,7 +382,7 @@ create table t1 (a int primary key) engine=ndb;
...
@@ -382,7 +382,7 @@ create table t1 (a int primary key) engine=ndb;
select * from t1;
select * from t1;
a
a
select * from t1;
select * from t1;
ERROR HY000: Can't lock file (errno:
4009
)
ERROR HY000: Can't lock file (errno:
157
)
use test;
use test;
drop database test_only_ndb_tables;
drop database test_only_ndb_tables;
CREATE TABLE t9 (
CREATE TABLE t9 (
...
...
mysql-test/t/ndb_autodiscover3.test
View file @
8f21b31d
--
source
include
/
have_ndb
.
inc
--
source
include
/
have_ndb
.
inc
--
source
include
/
have_multi_ndb
.
inc
--
source
include
/
have_multi_ndb
.
inc
--
source
include
/
ndb_default_cluster
.
inc
--
source
include
/
not_embedded
.
inc
--
source
include
/
not_embedded
.
inc
...
@@ -7,6 +8,11 @@
...
@@ -7,6 +8,11 @@
drop
table
if
exists
t1
,
t2
;
drop
table
if
exists
t1
,
t2
;
--
enable_warnings
--
enable_warnings
# Workaround for Bug#27644
# ndb: connecting api node/mysqld may "steal" node_id from running mysqld
# - let ndb_waiter use a fixed node id so "steal" cannot happen
--
let
connect_str
=
"nodeid=6;
$NDB_CONNECTSTRING
"
#
#
# Transaction ongoing while cluster is restarted
# Transaction ongoing while cluster is restarted
#
#
...
@@ -17,7 +23,7 @@ begin;
...
@@ -17,7 +23,7 @@ begin;
insert
into
t1
values
(
1
);
insert
into
t1
values
(
1
);
--
exec
$NDB_MGM
--
no
-
defaults
-
e
"all restart"
>>
$NDB_TOOLS_OUTPUT
--
exec
$NDB_MGM
--
no
-
defaults
-
e
"all restart"
>>
$NDB_TOOLS_OUTPUT
--
exec
$NDB_TOOLS_DIR
/
ndb_waiter
--
no
-
defaults
>>
$NDB_TOOLS_OUTPUT
--
exec
$NDB_TOOLS_DIR
/
ndb_waiter
--
no
-
defaults
-
c
$connect_str
>>
$NDB_TOOLS_OUTPUT
--
error
1297
--
error
1297
insert
into
t1
values
(
2
);
insert
into
t1
values
(
2
);
...
@@ -35,7 +41,7 @@ insert into t2 values (1,1),(2,1),(3,1),(4,1),(5,1),(6,1),(7,1),(8,1),(9,1),(10,
...
@@ -35,7 +41,7 @@ insert into t2 values (1,1),(2,1),(3,1),(4,1),(5,1),(6,1),(7,1),(8,1),(9,1),(10,
select
*
from
t2
order
by
a
limit
3
;
select
*
from
t2
order
by
a
limit
3
;
--
exec
$NDB_MGM
--
no
-
defaults
-
e
"all restart -i"
>>
$NDB_TOOLS_OUTPUT
--
exec
$NDB_MGM
--
no
-
defaults
-
e
"all restart -i"
>>
$NDB_TOOLS_OUTPUT
--
exec
$NDB_TOOLS_DIR
/
ndb_waiter
--
no
-
defaults
>>
$NDB_TOOLS_OUTPUT
--
exec
$NDB_TOOLS_DIR
/
ndb_waiter
--
no
-
defaults
-
c
$connect_str
>>
$NDB_TOOLS_OUTPUT
--
connection
server2
--
connection
server2
create
table
t2
(
a
int
key
)
engine
=
ndbcluster
;
create
table
t2
(
a
int
key
)
engine
=
ndbcluster
;
...
@@ -49,7 +55,7 @@ select * from t2 order by a limit 3;
...
@@ -49,7 +55,7 @@ select * from t2 order by a limit 3;
select
*
from
t2
order
by
a
limit
3
;
select
*
from
t2
order
by
a
limit
3
;
--
exec
$NDB_MGM
--
no
-
defaults
-
e
"all restart -i"
>>
$NDB_TOOLS_OUTPUT
--
exec
$NDB_MGM
--
no
-
defaults
-
e
"all restart -i"
>>
$NDB_TOOLS_OUTPUT
--
exec
$NDB_TOOLS_DIR
/
ndb_waiter
--
no
-
defaults
>>
$NDB_TOOLS_OUTPUT
--
exec
$NDB_TOOLS_DIR
/
ndb_waiter
--
no
-
defaults
-
c
$connect_str
>>
$NDB_TOOLS_OUTPUT
--
connection
server1
--
connection
server1
show
tables
;
show
tables
;
...
...
ndb/src/common/transporter/TCP_Transporter.cpp
View file @
8f21b31d
...
@@ -155,6 +155,8 @@ TCP_Transporter::initTransporter() {
...
@@ -155,6 +155,8 @@ TCP_Transporter::initTransporter() {
void
void
TCP_Transporter
::
setSocketOptions
(){
TCP_Transporter
::
setSocketOptions
(){
int
sockOptKeepAlive
=
1
;
if
(
setsockopt
(
theSocket
,
SOL_SOCKET
,
SO_RCVBUF
,
if
(
setsockopt
(
theSocket
,
SOL_SOCKET
,
SO_RCVBUF
,
(
char
*
)
&
sockOptRcvBufSize
,
sizeof
(
sockOptRcvBufSize
))
<
0
)
{
(
char
*
)
&
sockOptRcvBufSize
,
sizeof
(
sockOptRcvBufSize
))
<
0
)
{
#ifdef DEBUG_TRANSPORTER
#ifdef DEBUG_TRANSPORTER
...
@@ -169,6 +171,11 @@ TCP_Transporter::setSocketOptions(){
...
@@ -169,6 +171,11 @@ TCP_Transporter::setSocketOptions(){
#endif
#endif
}
//if
}
//if
if
(
setsockopt
(
theSocket
,
SOL_SOCKET
,
SO_KEEPALIVE
,
(
char
*
)
&
sockOptKeepAlive
,
sizeof
(
sockOptKeepAlive
))
<
0
)
{
ndbout_c
(
"The setsockopt SO_KEEPALIVE error code = %d"
,
InetErrno
);
}
//if
//-----------------------------------------------
//-----------------------------------------------
// Set the TCP_NODELAY option so also small packets are sent
// Set the TCP_NODELAY option so also small packets are sent
// as soon as possible
// as soon as possible
...
...
ndb/src/kernel/blocks/dbtup/DbtupPageMap.cpp
View file @
8f21b31d
...
@@ -452,6 +452,13 @@ Uint32 Dbtup::leafPageRangeFull(Fragrecord* const regFragPtr, PageRangePtr curr
...
@@ -452,6 +452,13 @@ Uint32 Dbtup::leafPageRangeFull(Fragrecord* const regFragPtr, PageRangePtr curr
ptrCheckGuard
(
parentPageRangePtr
,
cnoOfPageRangeRec
,
pageRange
);
ptrCheckGuard
(
parentPageRangePtr
,
cnoOfPageRangeRec
,
pageRange
);
if
(
parentPageRangePtr
.
p
->
currentIndexPos
<
3
)
{
if
(
parentPageRangePtr
.
p
->
currentIndexPos
<
3
)
{
ljam
();
ljam
();
if
(
c_noOfFreePageRanges
<
tiprNoLevels
)
{
ljam
();
return
RNIL
;
}
//if
/* ---------------------------------------------------------------- */
/* ---------------------------------------------------------------- */
/* WE HAVE FOUND AN EMPTY ENTRY IN A PAGE RANGE RECORD. */
/* WE HAVE FOUND AN EMPTY ENTRY IN A PAGE RANGE RECORD. */
/* ALLOCATE A NEW PAGE RANGE RECORD, FILL IN THE START RANGE, */
/* ALLOCATE A NEW PAGE RANGE RECORD, FILL IN THE START RANGE, */
...
...
ndb/src/mgmclient/CommandInterpreter.cpp
View file @
8f21b31d
...
@@ -2026,6 +2026,9 @@ CommandInterpreter::executeRestart(Vector<BaseString> &command_list,
...
@@ -2026,6 +2026,9 @@ CommandInterpreter::executeRestart(Vector<BaseString> &command_list,
return
-
1
;
return
-
1
;
}
}
if
(
!
nostart
)
ndbout_c
(
"Shutting down nodes with
\"
-n, no start
\"
option, to subsequently start the nodes."
);
result
=
ndb_mgm_restart3
(
m_mgmsrv
,
no_of_nodes
,
node_ids
,
result
=
ndb_mgm_restart3
(
m_mgmsrv
,
no_of_nodes
,
node_ids
,
initialstart
,
nostart
,
abort
,
&
need_disconnect
);
initialstart
,
nostart
,
abort
,
&
need_disconnect
);
...
...
ndb/src/mgmsrv/InitConfigFileParser.cpp
View file @
8f21b31d
...
@@ -657,7 +657,7 @@ InitConfigFileParser::store_in_properties(Vector<struct my_option>& options,
...
@@ -657,7 +657,7 @@ InitConfigFileParser::store_in_properties(Vector<struct my_option>& options,
if
(
options
[
i
].
var_type
==
GET_INT
)
if
(
options
[
i
].
var_type
==
GET_INT
)
ctx
.
m_currentSection
->
put
(
options
[
i
].
name
,
(
Uint32
)
value_int
);
ctx
.
m_currentSection
->
put
(
options
[
i
].
name
,
(
Uint32
)
value_int
);
else
else
ctx
.
m_currentSection
->
put
(
options
[
i
].
name
,
value_int
);
ctx
.
m_currentSection
->
put
64
(
options
[
i
].
name
,
value_int
);
}
}
}
}
return
true
;
return
true
;
...
...
ndb/src/ndbapi/NdbScanFilter.cpp
View file @
8f21b31d
...
@@ -328,12 +328,18 @@ NdbScanFilterImpl::cond_col(Interpreter::UnaryCondition op, Uint32 AttrId){
...
@@ -328,12 +328,18 @@ NdbScanFilterImpl::cond_col(Interpreter::UnaryCondition op, Uint32 AttrId){
int
int
NdbScanFilter
::
isnull
(
int
AttrId
){
NdbScanFilter
::
isnull
(
int
AttrId
){
return
m_impl
.
cond_col
(
Interpreter
::
IS_NULL
,
AttrId
);
if
(
m_impl
.
m_negative
==
1
)
return
m_impl
.
cond_col
(
Interpreter
::
IS_NOT_NULL
,
AttrId
);
else
return
m_impl
.
cond_col
(
Interpreter
::
IS_NULL
,
AttrId
);
}
}
int
int
NdbScanFilter
::
isnotnull
(
int
AttrId
){
NdbScanFilter
::
isnotnull
(
int
AttrId
){
return
m_impl
.
cond_col
(
Interpreter
::
IS_NOT_NULL
,
AttrId
);
if
(
m_impl
.
m_negative
==
1
)
return
m_impl
.
cond_col
(
Interpreter
::
IS_NULL
,
AttrId
);
else
return
m_impl
.
cond_col
(
Interpreter
::
IS_NOT_NULL
,
AttrId
);
}
}
struct
tab3
{
struct
tab3
{
...
...
ndb/tools/delete_all.cpp
View file @
8f21b31d
...
@@ -67,6 +67,7 @@ int main(int argc, char** argv){
...
@@ -67,6 +67,7 @@ int main(int argc, char** argv){
return
NDBT_ProgramExit
(
NDBT_WRONGARGS
);
return
NDBT_ProgramExit
(
NDBT_WRONGARGS
);
Ndb_cluster_connection
con
(
opt_connect_str
);
Ndb_cluster_connection
con
(
opt_connect_str
);
con
.
set_name
(
"ndb_delete_all"
);
if
(
con
.
connect
(
12
,
5
,
1
)
!=
0
)
if
(
con
.
connect
(
12
,
5
,
1
)
!=
0
)
{
{
ndbout
<<
"Unable to connect to management server."
<<
endl
;
ndbout
<<
"Unable to connect to management server."
<<
endl
;
...
...
ndb/tools/desc.cpp
View file @
8f21b31d
...
@@ -69,6 +69,7 @@ int main(int argc, char** argv){
...
@@ -69,6 +69,7 @@ int main(int argc, char** argv){
return
NDBT_ProgramExit
(
NDBT_WRONGARGS
);
return
NDBT_ProgramExit
(
NDBT_WRONGARGS
);
Ndb_cluster_connection
con
(
opt_connect_str
);
Ndb_cluster_connection
con
(
opt_connect_str
);
con
.
set_name
(
"ndb_desc"
);
if
(
con
.
connect
(
12
,
5
,
1
)
!=
0
)
if
(
con
.
connect
(
12
,
5
,
1
)
!=
0
)
{
{
ndbout
<<
"Unable to connect to management server."
<<
endl
;
ndbout
<<
"Unable to connect to management server."
<<
endl
;
...
...
ndb/tools/drop_index.cpp
View file @
8f21b31d
...
@@ -61,6 +61,7 @@ int main(int argc, char** argv){
...
@@ -61,6 +61,7 @@ int main(int argc, char** argv){
}
}
Ndb_cluster_connection
con
(
opt_connect_str
);
Ndb_cluster_connection
con
(
opt_connect_str
);
con
.
set_name
(
"ndb_drop_index"
);
if
(
con
.
connect
(
12
,
5
,
1
)
!=
0
)
if
(
con
.
connect
(
12
,
5
,
1
)
!=
0
)
{
{
return
NDBT_ProgramExit
(
NDBT_FAILED
);
return
NDBT_ProgramExit
(
NDBT_FAILED
);
...
...
ndb/tools/drop_tab.cpp
View file @
8f21b31d
...
@@ -61,6 +61,7 @@ int main(int argc, char** argv){
...
@@ -61,6 +61,7 @@ int main(int argc, char** argv){
}
}
Ndb_cluster_connection
con
(
opt_connect_str
);
Ndb_cluster_connection
con
(
opt_connect_str
);
con
.
set_name
(
"ndb_drop_table"
);
if
(
con
.
connect
(
12
,
5
,
1
)
!=
0
)
if
(
con
.
connect
(
12
,
5
,
1
)
!=
0
)
{
{
ndbout
<<
"Unable to connect to management server."
<<
endl
;
ndbout
<<
"Unable to connect to management server."
<<
endl
;
...
...
ndb/tools/listTables.cpp
View file @
8f21b31d
...
@@ -219,6 +219,7 @@ int main(int argc, char** argv){
...
@@ -219,6 +219,7 @@ int main(int argc, char** argv){
_tabname
=
argv
[
0
];
_tabname
=
argv
[
0
];
ndb_cluster_connection
=
new
Ndb_cluster_connection
(
opt_connect_str
);
ndb_cluster_connection
=
new
Ndb_cluster_connection
(
opt_connect_str
);
ndb_cluster_connection
->
set_name
(
"ndb_show_tables"
);
if
(
ndb_cluster_connection
->
connect
(
12
,
5
,
1
))
if
(
ndb_cluster_connection
->
connect
(
12
,
5
,
1
))
fatal
(
"Unable to connect to management server."
);
fatal
(
"Unable to connect to management server."
);
if
(
ndb_cluster_connection
->
wait_until_ready
(
30
,
0
)
<
0
)
if
(
ndb_cluster_connection
->
wait_until_ready
(
30
,
0
)
<
0
)
...
...
ndb/tools/select_all.cpp
View file @
8f21b31d
...
@@ -108,6 +108,7 @@ int main(int argc, char** argv){
...
@@ -108,6 +108,7 @@ int main(int argc, char** argv){
}
}
Ndb_cluster_connection
con
(
opt_connect_str
);
Ndb_cluster_connection
con
(
opt_connect_str
);
con
.
set_name
(
"ndb_select_all"
);
if
(
con
.
connect
(
12
,
5
,
1
)
!=
0
)
if
(
con
.
connect
(
12
,
5
,
1
)
!=
0
)
{
{
ndbout
<<
"Unable to connect to management server."
<<
endl
;
ndbout
<<
"Unable to connect to management server."
<<
endl
;
...
...
ndb/tools/select_count.cpp
View file @
8f21b31d
...
@@ -83,6 +83,7 @@ int main(int argc, char** argv){
...
@@ -83,6 +83,7 @@ int main(int argc, char** argv){
}
}
Ndb_cluster_connection
con
(
opt_connect_str
);
Ndb_cluster_connection
con
(
opt_connect_str
);
con
.
set_name
(
"ndb_select_count"
);
if
(
con
.
connect
(
12
,
5
,
1
)
!=
0
)
if
(
con
.
connect
(
12
,
5
,
1
)
!=
0
)
{
{
ndbout
<<
"Unable to connect to management server."
<<
endl
;
ndbout
<<
"Unable to connect to management server."
<<
endl
;
...
...
sql/ha_ndbcluster.cc
View file @
8f21b31d
...
@@ -203,6 +203,8 @@ static const err_code_mapping err_map[]=
...
@@ -203,6 +203,8 @@ static const err_code_mapping err_map[]=
{
284
,
HA_ERR_TABLE_DEF_CHANGED
,
0
},
{
284
,
HA_ERR_TABLE_DEF_CHANGED
,
0
},
{
4009
,
HA_ERR_NO_CONNECTION
,
1
},
{
0
,
1
,
0
},
{
0
,
1
,
0
},
{
-
1
,
-
1
,
1
}
{
-
1
,
-
1
,
1
}
...
@@ -5068,14 +5070,11 @@ int ndbcluster_table_exists_in_engine(THD* thd, const char *db, const char *name
...
@@ -5068,14 +5070,11 @@ int ndbcluster_table_exists_in_engine(THD* thd, const char *db, const char *name
dict
->
invalidateTable
(
name
);
dict
->
invalidateTable
(
name
);
if
(
!
(
tab
=
dict
->
getTable
(
name
)))
if
(
!
(
tab
=
dict
->
getTable
(
name
)))
{
{
const
NdbError
err
=
dict
->
getNdbError
();
ERR_RETURN
(
dict
->
getNdbError
());
if
(
err
.
code
==
709
)
DBUG_RETURN
(
0
);
ERR_RETURN
(
err
);
}
}
DBUG_PRINT
(
"info"
,
(
"Found table %s"
,
tab
->
getName
()));
DBUG_PRINT
(
"info"
,
(
"Found table %s"
,
tab
->
getName
()));
DBUG_RETURN
(
1
);
DBUG_RETURN
(
HA_ERR_TABLE_EXIST
);
}
}
...
@@ -5260,7 +5259,7 @@ int ndbcluster_find_files(THD *thd,const char *db,const char *path,
...
@@ -5260,7 +5259,7 @@ int ndbcluster_find_files(THD *thd,const char *db,const char *path,
DBUG_PRINT
(
"info"
,
(
"%s existed on disk"
,
name
));
DBUG_PRINT
(
"info"
,
(
"%s existed on disk"
,
name
));
// The .ndb file exists on disk, but it's not in list of tables in ndb
// The .ndb file exists on disk, but it's not in list of tables in ndb
// Verify that handler agrees table is gone.
// 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
));
DBUG_PRINT
(
"info"
,
(
"NDB says %s does not exists"
,
file_name
));
it
.
remove
();
it
.
remove
();
...
@@ -6695,7 +6694,8 @@ pthread_handler_t ndb_util_thread_func(void *arg __attribute__((unused)))
...
@@ -6695,7 +6694,8 @@ pthread_handler_t ndb_util_thread_func(void *arg __attribute__((unused)))
DBUG_RETURN
(
NULL
);
DBUG_RETURN
(
NULL
);
}
}
List
<
NDB_SHARE
>
util_open_tables
;
uint
share_list_size
=
0
;
NDB_SHARE
**
share_list
=
NULL
;
set_timespec
(
abstime
,
0
);
set_timespec
(
abstime
,
0
);
for
(;;)
for
(;;)
{
{
...
@@ -6725,7 +6725,22 @@ pthread_handler_t ndb_util_thread_func(void *arg __attribute__((unused)))
...
@@ -6725,7 +6725,22 @@ pthread_handler_t ndb_util_thread_func(void *arg __attribute__((unused)))
/* Lock mutex and fill list with pointers to all open tables */
/* Lock mutex and fill list with pointers to all open tables */
NDB_SHARE
*
share
;
NDB_SHARE
*
share
;
pthread_mutex_lock
(
&
ndbcluster_mutex
);
pthread_mutex_lock
(
&
ndbcluster_mutex
);
for
(
uint
i
=
0
;
i
<
ndbcluster_open_tables
.
records
;
i
++
)
uint
i
,
record_count
=
ndbcluster_open_tables
.
records
;
if
(
share_list_size
<
record_count
)
{
NDB_SHARE
**
new_share_list
=
new
NDB_SHARE
*
[
record_count
];
if
(
!
new_share_list
)
{
sql_print_warning
(
"ndb util thread: malloc failure, "
"query cache not maintained properly"
);
pthread_mutex_unlock
(
&
ndbcluster_mutex
);
goto
next
;
// At least do not crash
}
delete
[]
share_list
;
share_list_size
=
record_count
;
share_list
=
new_share_list
;
}
for
(
i
=
0
;
i
<
record_count
;
i
++
)
{
{
share
=
(
NDB_SHARE
*
)
hash_element
(
&
ndbcluster_open_tables
,
i
);
share
=
(
NDB_SHARE
*
)
hash_element
(
&
ndbcluster_open_tables
,
i
);
share
->
use_count
++
;
/* Make sure the table can't be closed */
share
->
use_count
++
;
/* Make sure the table can't be closed */
...
@@ -6734,14 +6749,14 @@ pthread_handler_t ndb_util_thread_func(void *arg __attribute__((unused)))
...
@@ -6734,14 +6749,14 @@ pthread_handler_t ndb_util_thread_func(void *arg __attribute__((unused)))
i
,
share
->
table_name
,
share
->
use_count
));
i
,
share
->
table_name
,
share
->
use_count
));
/* Store pointer to table */
/* Store pointer to table */
util_open_tables
.
push_back
(
share
)
;
share_list
[
i
]
=
share
;
}
}
pthread_mutex_unlock
(
&
ndbcluster_mutex
);
pthread_mutex_unlock
(
&
ndbcluster_mutex
);
/* Iterate through the open files list */
/* Iterate through the open files list */
List_iterator_fast
<
NDB_SHARE
>
it
(
util_open_tables
);
for
(
i
=
0
;
i
<
record_count
;
i
++
)
while
((
share
=
it
++
))
{
{
share
=
share_list
[
i
];
/* Split tab- and dbname */
/* Split tab- and dbname */
char
buf
[
FN_REFLEN
];
char
buf
[
FN_REFLEN
];
char
*
tabname
,
*
db
;
char
*
tabname
,
*
db
;
...
@@ -6790,10 +6805,7 @@ pthread_handler_t ndb_util_thread_func(void *arg __attribute__((unused)))
...
@@ -6790,10 +6805,7 @@ pthread_handler_t ndb_util_thread_func(void *arg __attribute__((unused)))
/* Decrease the use count and possibly free share */
/* Decrease the use count and possibly free share */
free_share
(
share
);
free_share
(
share
);
}
}
next:
/* Clear the list of open tables */
util_open_tables
.
empty
();
/* Calculate new time to wake up */
/* Calculate new time to wake up */
int
secs
=
0
;
int
secs
=
0
;
int
msecs
=
ndb_cache_check_time
;
int
msecs
=
ndb_cache_check_time
;
...
@@ -6816,6 +6828,8 @@ pthread_handler_t ndb_util_thread_func(void *arg __attribute__((unused)))
...
@@ -6816,6 +6828,8 @@ pthread_handler_t ndb_util_thread_func(void *arg __attribute__((unused)))
}
}
}
}
if
(
share_list
)
delete
[]
share_list
;
thd
->
cleanup
();
thd
->
cleanup
();
delete
thd
;
delete
thd
;
delete
ndb
;
delete
ndb
;
...
...
sql/handler.cc
View file @
8f21b31d
...
@@ -2438,14 +2438,14 @@ ha_find_files(THD *thd,const char *db,const char *path,
...
@@ -2438,14 +2438,14 @@ ha_find_files(THD *thd,const char *db,const char *path,
Ask handler if the table exists in engine
Ask handler if the table exists in engine
RETURN
RETURN
0
Table does not exist
HA_ERR_NO_SUCH_TABLE
Table does not exist
1
Table exists
HA_ERR_TABLE_EXIST
Table exists
# Error code
#
Error code
*/
*/
int
ha_table_exists_in_engine
(
THD
*
thd
,
const
char
*
db
,
const
char
*
name
)
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_ENTER
(
"ha_table_exists_in_engine"
);
DBUG_PRINT
(
"enter"
,
(
"db: %s, name: %s"
,
db
,
name
));
DBUG_PRINT
(
"enter"
,
(
"db: %s, name: %s"
,
db
,
name
));
#ifdef HAVE_NDBCLUSTER_DB
#ifdef HAVE_NDBCLUSTER_DB
...
...
sql/sql_table.cc
View file @
8f21b31d
...
@@ -1697,6 +1697,7 @@ bool mysql_create_table(THD *thd,const char *db, const char *table_name,
...
@@ -1697,6 +1697,7 @@ bool mysql_create_table(THD *thd,const char *db, const char *table_name,
alias
);
alias
);
DBUG_RETURN
(
FALSE
);
DBUG_RETURN
(
FALSE
);
}
}
DBUG_PRINT
(
"info"
,(
"1"
));
my_error
(
ER_TABLE_EXISTS_ERROR
,
MYF
(
0
),
alias
);
my_error
(
ER_TABLE_EXISTS_ERROR
,
MYF
(
0
),
alias
);
DBUG_RETURN
(
TRUE
);
DBUG_RETURN
(
TRUE
);
}
}
...
@@ -1707,6 +1708,7 @@ bool mysql_create_table(THD *thd,const char *db, const char *table_name,
...
@@ -1707,6 +1708,7 @@ bool mysql_create_table(THD *thd,const char *db, const char *table_name,
{
{
if
(
create_info
->
options
&
HA_LEX_CREATE_IF_NOT_EXISTS
)
if
(
create_info
->
options
&
HA_LEX_CREATE_IF_NOT_EXISTS
)
goto
warn
;
goto
warn
;
DBUG_PRINT
(
"info"
,(
"2"
));
my_error
(
ER_TABLE_EXISTS_ERROR
,
MYF
(
0
),
table_name
);
my_error
(
ER_TABLE_EXISTS_ERROR
,
MYF
(
0
),
table_name
);
goto
end
;
goto
end
;
}
}
...
@@ -1725,14 +1727,25 @@ bool mysql_create_table(THD *thd,const char *db, const char *table_name,
...
@@ -1725,14 +1727,25 @@ bool mysql_create_table(THD *thd,const char *db, const char *table_name,
{
{
bool
create_if_not_exists
=
bool
create_if_not_exists
=
create_info
->
options
&
HA_LEX_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
)
if
(
create_if_not_exists
)
goto
warn
;
goto
warn
;
my_error
(
ER_TABLE_EXISTS_ERROR
,
MYF
(
0
),
table_name
);
my_error
(
ER_TABLE_EXISTS_ERROR
,
MYF
(
0
),
table_name
);
goto
end
;
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