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
99395d5d
Commit
99395d5d
authored
Sep 19, 2006
by
lzhou/root@dev3-138.dev.cn.tlan
Browse files
Options
Browse Files
Download
Plain Diff
Merge lzhou@bk-internal.mysql.com:/home/bk/mysql-5.0-ndb-bj
into dev3-138.dev.cn.tlan:/home/zhl/mysql/mysql-5.0/bug21799
parents
636368ca
5bf03276
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
356 additions
and
143 deletions
+356
-143
ndb/include/mgmapi/mgmapi.h
ndb/include/mgmapi/mgmapi.h
+14
-0
ndb/include/util/File.hpp
ndb/include/util/File.hpp
+8
-0
ndb/src/common/logger/FileLogHandler.cpp
ndb/src/common/logger/FileLogHandler.cpp
+10
-1
ndb/src/common/util/File.cpp
ndb/src/common/util/File.cpp
+12
-0
ndb/src/kernel/blocks/dbdih/DbdihMain.cpp
ndb/src/kernel/blocks/dbdih/DbdihMain.cpp
+7
-1
ndb/src/mgmapi/mgmapi.cpp
ndb/src/mgmapi/mgmapi.cpp
+39
-0
ndb/src/mgmclient/CommandInterpreter.cpp
ndb/src/mgmclient/CommandInterpreter.cpp
+237
-141
ndb/src/mgmsrv/Services.cpp
ndb/src/mgmsrv/Services.cpp
+27
-0
ndb/src/mgmsrv/Services.hpp
ndb/src/mgmsrv/Services.hpp
+2
-0
No files found.
ndb/include/mgmapi/mgmapi.h
View file @
99395d5d
...
@@ -862,6 +862,15 @@ extern "C" {
...
@@ -862,6 +862,15 @@ extern "C" {
enum
ndb_mgm_event_category
category
,
enum
ndb_mgm_event_category
category
,
int
level
,
int
level
,
struct
ndb_mgm_reply
*
reply
);
struct
ndb_mgm_reply
*
reply
);
/**
* get log category and levels
*
* @param handle NDB management handle.
* @return A vector of twelve elements,
* where each element contains
* loglevel of corresponding category
*/
const
unsigned
int
*
ndb_mgm_get_clusterlog_loglevel
(
NdbMgmHandle
handle
);
/** @} *********************************************************************/
/** @} *********************************************************************/
/**
/**
...
@@ -1141,6 +1150,11 @@ extern "C" {
...
@@ -1141,6 +1150,11 @@ extern "C" {
enum
ndb_mgm_event_category
c
,
enum
ndb_mgm_event_category
c
,
int
l
,
struct
ndb_mgm_reply
*
r
)
int
l
,
struct
ndb_mgm_reply
*
r
)
{
return
ndb_mgm_set_clusterlog_loglevel
(
h
,
n
,
c
,
l
,
r
);
}
{
return
ndb_mgm_set_clusterlog_loglevel
(
h
,
n
,
c
,
l
,
r
);
}
inline
const
unsigned
int
*
ndb_mgm_get_loglevel_clusterlog
(
NdbMgmHandle
h
)
{
return
ndb_mgm_get_clusterlog_loglevel
(
h
);
}
#endif
#endif
#ifdef __cplusplus
#ifdef __cplusplus
...
...
ndb/include/util/File.hpp
View file @
99395d5d
...
@@ -28,6 +28,14 @@
...
@@ -28,6 +28,14 @@
class
File_class
class
File_class
{
{
public:
public:
/**
* Returns time for last contents modification of a file.
*
* @param aFileName a filename to check.
* @return the time for last contents modificaton of the file.
*/
static
time_t
mtime
(
const
char
*
aFileName
);
/**
/**
* Returns true if the file exist.
* Returns true if the file exist.
*
*
...
...
ndb/src/common/logger/FileLogHandler.cpp
View file @
99395d5d
...
@@ -147,6 +147,7 @@ FileLogHandler::createNewFile()
...
@@ -147,6 +147,7 @@ FileLogHandler::createNewFile()
bool
rc
=
true
;
bool
rc
=
true
;
int
fileNo
=
1
;
int
fileNo
=
1
;
char
newName
[
PATH_MAX
];
char
newName
[
PATH_MAX
];
time_t
newMtime
,
preMtime
=
0
;
do
do
{
{
...
@@ -159,7 +160,15 @@ FileLogHandler::createNewFile()
...
@@ -159,7 +160,15 @@ FileLogHandler::createNewFile()
}
}
BaseString
::
snprintf
(
newName
,
sizeof
(
newName
),
BaseString
::
snprintf
(
newName
,
sizeof
(
newName
),
"%s.%d"
,
m_pLogFile
->
getName
(),
fileNo
++
);
"%s.%d"
,
m_pLogFile
->
getName
(),
fileNo
++
);
newMtime
=
File_class
::
mtime
(
newName
);
if
(
newMtime
<
preMtime
)
{
break
;
}
else
{
preMtime
=
newMtime
;
}
}
while
(
File_class
::
exists
(
newName
));
}
while
(
File_class
::
exists
(
newName
));
m_pLogFile
->
close
();
m_pLogFile
->
close
();
...
...
ndb/src/common/util/File.cpp
View file @
99395d5d
...
@@ -24,6 +24,18 @@
...
@@ -24,6 +24,18 @@
//
//
// PUBLIC
// PUBLIC
//
//
time_t
File_class
::
mtime
(
const
char
*
aFileName
)
{
MY_STAT
stmp
;
time_t
rc
=
0
;
if
(
my_stat
(
aFileName
,
&
stmp
,
MYF
(
0
))
!=
NULL
)
{
rc
=
stmp
.
st_mtime
;
}
return
rc
;
}
bool
bool
File_class
::
exists
(
const
char
*
aFileName
)
File_class
::
exists
(
const
char
*
aFileName
)
...
...
ndb/src/kernel/blocks/dbdih/DbdihMain.cpp
View file @
99395d5d
...
@@ -6488,7 +6488,13 @@ void Dbdih::execCREATE_FRAGMENTATION_REQ(Signal * signal){
...
@@ -6488,7 +6488,13 @@ void Dbdih::execCREATE_FRAGMENTATION_REQ(Signal * signal){
}
//for
}
//for
}
}
}
}
ndbrequire
(
count
==
(
2
+
noOfReplicas
*
noOfFragments
));
if
(
count
!=
(
2
+
noOfReplicas
*
noOfFragments
)){
char
buf
[
255
];
BaseString
::
snprintf
(
buf
,
sizeof
(
buf
),
"Illegal configuration change: NoOfReplicas."
" Can't be applied online "
);
progError
(
__LINE__
,
NDBD_EXIT_INVALID_CONFIG
,
buf
);
}
CreateFragmentationConf
*
const
conf
=
CreateFragmentationConf
*
const
conf
=
(
CreateFragmentationConf
*
)
signal
->
getDataPtrSend
();
(
CreateFragmentationConf
*
)
signal
->
getDataPtrSend
();
...
...
ndb/src/mgmapi/mgmapi.cpp
View file @
99395d5d
...
@@ -1300,6 +1300,45 @@ ndb_mgm_get_event_category_string(enum ndb_mgm_event_category status)
...
@@ -1300,6 +1300,45 @@ ndb_mgm_get_event_category_string(enum ndb_mgm_event_category status)
return
0
;
return
0
;
}
}
static
const
char
*
clusterlog_names
[]
=
{
"startup"
,
"shutdown"
,
"statistics"
,
"checkpoint"
,
"noderestart"
,
"connection"
,
"info"
,
"warning"
,
"error"
,
"congestion"
,
"debug"
,
"backup"
};
extern
"C"
const
unsigned
int
*
ndb_mgm_get_clusterlog_loglevel
(
NdbMgmHandle
handle
)
{
SET_ERROR
(
handle
,
NDB_MGM_NO_ERROR
,
"Executing: ndb_mgm_get_clusterlog_loglevel"
);
int
loglevel_count
=
CFG_MAX_LOGLEVEL
-
CFG_MIN_LOGLEVEL
+
1
;
static
unsigned
int
loglevel
[
CFG_MAX_LOGLEVEL
-
CFG_MIN_LOGLEVEL
+
1
]
=
{
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
};
const
ParserRow
<
ParserDummy
>
getloglevel_reply
[]
=
{
MGM_CMD
(
"get cluster loglevel"
,
NULL
,
""
),
MGM_ARG
(
clusterlog_names
[
0
],
Int
,
Mandatory
,
""
),
MGM_ARG
(
clusterlog_names
[
1
],
Int
,
Mandatory
,
""
),
MGM_ARG
(
clusterlog_names
[
2
],
Int
,
Mandatory
,
""
),
MGM_ARG
(
clusterlog_names
[
3
],
Int
,
Mandatory
,
""
),
MGM_ARG
(
clusterlog_names
[
4
],
Int
,
Mandatory
,
""
),
MGM_ARG
(
clusterlog_names
[
5
],
Int
,
Mandatory
,
""
),
MGM_ARG
(
clusterlog_names
[
6
],
Int
,
Mandatory
,
""
),
MGM_ARG
(
clusterlog_names
[
7
],
Int
,
Mandatory
,
""
),
MGM_ARG
(
clusterlog_names
[
8
],
Int
,
Mandatory
,
""
),
MGM_ARG
(
clusterlog_names
[
9
],
Int
,
Mandatory
,
""
),
MGM_ARG
(
clusterlog_names
[
10
],
Int
,
Mandatory
,
""
),
MGM_ARG
(
clusterlog_names
[
11
],
Int
,
Mandatory
,
""
),
};
CHECK_HANDLE
(
handle
,
NULL
);
CHECK_CONNECTED
(
handle
,
NULL
);
Properties
args
;
const
Properties
*
reply
;
reply
=
ndb_mgm_call
(
handle
,
getloglevel_reply
,
"get cluster loglevel"
,
&
args
);
CHECK_REPLY
(
reply
,
NULL
);
for
(
int
i
=
0
;
i
<
loglevel_count
;
i
++
)
{
reply
->
get
(
clusterlog_names
[
i
],
&
loglevel
[
i
]);
}
return
loglevel
;
}
extern
"C"
extern
"C"
int
int
ndb_mgm_set_clusterlog_loglevel
(
NdbMgmHandle
handle
,
int
nodeId
,
ndb_mgm_set_clusterlog_loglevel
(
NdbMgmHandle
handle
,
int
nodeId
,
...
...
ndb/src/mgmclient/CommandInterpreter.cpp
View file @
99395d5d
...
@@ -68,10 +68,11 @@ private:
...
@@ -68,10 +68,11 @@ private:
* command will be sent to all DB processes.
* command will be sent to all DB processes.
* @param allAfterFirstToken: What the client gave after the
* @param allAfterFirstToken: What the client gave after the
* first token on the command line
* first token on the command line
* @return: 0 if analyseAfterFirstToken succeeds, otherwise -1
*/
*/
void
analyseAfterFirstToken
(
int
processId
,
char
*
allAfterFirstTokenCstr
);
int
analyseAfterFirstToken
(
int
processId
,
char
*
allAfterFirstTokenCstr
);
void
executeCommand
(
Vector
<
BaseString
>
&
command_list
,
int
executeCommand
(
Vector
<
BaseString
>
&
command_list
,
unsigned
command_pos
,
unsigned
command_pos
,
int
*
node_ids
,
int
no_of_nodes
);
int
*
node_ids
,
int
no_of_nodes
);
/**
/**
...
@@ -97,42 +98,42 @@ private:
...
@@ -97,42 +98,42 @@ private:
* this case "22". Each function is responsible to check the parameters
* this case "22". Each function is responsible to check the parameters
* argument.
* argument.
*/
*/
void
executeHelp
(
char
*
parameters
);
int
executeHelp
(
char
*
parameters
);
void
executeShow
(
char
*
parameters
);
int
executeShow
(
char
*
parameters
);
void
executeConnect
(
char
*
parameters
,
bool
interactive
);
int
executePurge
(
char
*
parameters
);
void
executePurge
(
char
*
parameters
);
int
executeConnect
(
char
*
parameters
,
bool
interactive
);
int
executeShutdown
(
char
*
parameters
);
int
executeShutdown
(
char
*
parameters
);
void
executeRun
(
char
*
parameters
);
void
executeRun
(
char
*
parameters
);
void
executeInfo
(
char
*
parameters
);
void
executeInfo
(
char
*
parameters
);
void
executeClusterLog
(
char
*
parameters
);
void
executeClusterLog
(
char
*
parameters
);
public:
public:
void
executeStop
(
int
processId
,
const
char
*
parameters
,
bool
all
);
int
executeStop
(
int
processId
,
const
char
*
parameters
,
bool
all
);
void
executeStop
(
Vector
<
BaseString
>
&
command_list
,
unsigned
command_pos
,
int
executeEnterSingleUser
(
char
*
parameters
);
int
executeExitSingleUser
(
char
*
parameters
);
int
executeStart
(
int
processId
,
const
char
*
parameters
,
bool
all
);
int
executeRestart
(
int
processId
,
const
char
*
parameters
,
bool
all
);
int
executeLogLevel
(
int
processId
,
const
char
*
parameters
,
bool
all
);
int
executeError
(
int
processId
,
const
char
*
parameters
,
bool
all
);
int
executeLog
(
int
processId
,
const
char
*
parameters
,
bool
all
);
int
executeLogIn
(
int
processId
,
const
char
*
parameters
,
bool
all
);
int
executeLogOut
(
int
processId
,
const
char
*
parameters
,
bool
all
);
int
executeLogOff
(
int
processId
,
const
char
*
parameters
,
bool
all
);
int
executeTestOn
(
int
processId
,
const
char
*
parameters
,
bool
all
);
int
executeTestOff
(
int
processId
,
const
char
*
parameters
,
bool
all
);
int
executeSet
(
int
processId
,
const
char
*
parameters
,
bool
all
);
int
executeGetStat
(
int
processId
,
const
char
*
parameters
,
bool
all
);
int
executeStatus
(
int
processId
,
const
char
*
parameters
,
bool
all
);
int
executeEventReporting
(
int
processId
,
const
char
*
parameters
,
bool
all
);
int
executeDumpState
(
int
processId
,
const
char
*
parameters
,
bool
all
);
int
executeStartBackup
(
char
*
parameters
);
int
executeAbortBackup
(
char
*
parameters
);
int
executeStop
(
Vector
<
BaseString
>
&
command_list
,
unsigned
command_pos
,
int
*
node_ids
,
int
no_of_nodes
);
int
*
node_ids
,
int
no_of_nodes
);
void
executeEnterSingleUser
(
char
*
parameters
);
int
executeRestart
(
Vector
<
BaseString
>
&
command_list
,
unsigned
command_pos
,
void
executeExitSingleUser
(
char
*
parameters
);
void
executeStart
(
int
processId
,
const
char
*
parameters
,
bool
all
);
void
executeRestart
(
int
processId
,
const
char
*
parameters
,
bool
all
);
void
executeRestart
(
Vector
<
BaseString
>
&
command_list
,
unsigned
command_pos
,
int
*
node_ids
,
int
no_of_nodes
);
int
*
node_ids
,
int
no_of_nodes
);
void
executeLogLevel
(
int
processId
,
const
char
*
parameters
,
bool
all
);
void
executeError
(
int
processId
,
const
char
*
parameters
,
bool
all
);
int
executeRep
(
char
*
parameters
);
void
executeLog
(
int
processId
,
const
char
*
parameters
,
bool
all
);
void
executeLogIn
(
int
processId
,
const
char
*
parameters
,
bool
all
);
void
executeLogOut
(
int
processId
,
const
char
*
parameters
,
bool
all
);
void
executeLogOff
(
int
processId
,
const
char
*
parameters
,
bool
all
);
void
executeTestOn
(
int
processId
,
const
char
*
parameters
,
bool
all
);
void
executeTestOff
(
int
processId
,
const
char
*
parameters
,
bool
all
);
void
executeSet
(
int
processId
,
const
char
*
parameters
,
bool
all
);
void
executeGetStat
(
int
processId
,
const
char
*
parameters
,
bool
all
);
void
executeStatus
(
int
processId
,
const
char
*
parameters
,
bool
all
);
void
executeEventReporting
(
int
processId
,
const
char
*
parameters
,
bool
all
);
void
executeDumpState
(
int
processId
,
const
char
*
parameters
,
bool
all
);
int
executeStartBackup
(
char
*
parameters
);
void
executeAbortBackup
(
char
*
parameters
);
void
executeRep
(
char
*
parameters
);
void
executeCpc
(
char
*
parameters
);
void
executeCpc
(
char
*
parameters
);
...
@@ -144,7 +145,7 @@ public:
...
@@ -144,7 +145,7 @@ public:
* A execute function definition
* A execute function definition
*/
*/
public:
public:
typedef
void
(
CommandInterpreter
::*
ExecuteFunction
)(
int
processId
,
typedef
int
(
CommandInterpreter
::*
ExecuteFunction
)(
int
processId
,
const
char
*
param
,
const
char
*
param
,
bool
all
);
bool
all
);
...
@@ -156,7 +157,7 @@ private:
...
@@ -156,7 +157,7 @@ private:
/**
/**
*
*
*/
*/
void
executeForAll
(
const
char
*
cmd
,
int
executeForAll
(
const
char
*
cmd
,
ExecuteFunction
fun
,
ExecuteFunction
fun
,
const
char
*
param
);
const
char
*
param
);
...
@@ -969,6 +970,7 @@ CommandInterpreter::execute_impl(const char *_line, bool interactive)
...
@@ -969,6 +970,7 @@ CommandInterpreter::execute_impl(const char *_line, bool interactive)
char
*
line
;
char
*
line
;
if
(
_line
==
NULL
)
{
if
(
_line
==
NULL
)
{
m_error
=
-
1
;
DBUG_RETURN
(
false
);
DBUG_RETURN
(
false
);
}
}
line
=
my_strdup
(
_line
,
MYF
(
MY_WME
));
line
=
my_strdup
(
_line
,
MYF
(
MY_WME
));
...
@@ -1006,16 +1008,17 @@ CommandInterpreter::execute_impl(const char *_line, bool interactive)
...
@@ -1006,16 +1008,17 @@ CommandInterpreter::execute_impl(const char *_line, bool interactive)
if
(
strcasecmp
(
firstToken
,
"HELP"
)
==
0
||
if
(
strcasecmp
(
firstToken
,
"HELP"
)
==
0
||
strcasecmp
(
firstToken
,
"?"
)
==
0
)
{
strcasecmp
(
firstToken
,
"?"
)
==
0
)
{
executeHelp
(
allAfterFirstToken
);
m_error
=
executeHelp
(
allAfterFirstToken
);
DBUG_RETURN
(
true
);
DBUG_RETURN
(
true
);
}
}
else
if
(
strcasecmp
(
firstToken
,
"CONNECT"
)
==
0
)
{
else
if
(
strcasecmp
(
firstToken
,
"CONNECT"
)
==
0
)
{
executeConnect
(
allAfterFirstToken
,
interactive
);
m_error
=
executeConnect
(
allAfterFirstToken
,
interactive
);
DBUG_RETURN
(
true
);
DBUG_RETURN
(
true
);
}
}
else
if
(
strcasecmp
(
firstToken
,
"SLEEP"
)
==
0
)
{
else
if
(
strcasecmp
(
firstToken
,
"SLEEP"
)
==
0
)
{
if
(
allAfterFirstToken
)
if
(
allAfterFirstToken
)
sleep
(
atoi
(
allAfterFirstToken
));
if
(
sleep
(
atoi
(
allAfterFirstToken
))
!=
0
)
m_error
=
-
1
;
DBUG_RETURN
(
true
);
DBUG_RETURN
(
true
);
}
}
else
if
((
strcasecmp
(
firstToken
,
"QUIT"
)
==
0
||
else
if
((
strcasecmp
(
firstToken
,
"QUIT"
)
==
0
||
...
@@ -1025,12 +1028,20 @@ CommandInterpreter::execute_impl(const char *_line, bool interactive)
...
@@ -1025,12 +1028,20 @@ CommandInterpreter::execute_impl(const char *_line, bool interactive)
DBUG_RETURN
(
false
);
DBUG_RETURN
(
false
);
}
}
if
(
!
connect
(
interactive
))
if
(
!
connect
(
interactive
)){
m_error
=
-
1
;
DBUG_RETURN
(
true
);
DBUG_RETURN
(
true
);
}
if
(
ndb_mgm_check_connection
(
m_mgmsrv
))
{
disconnect
();
connect
(
interactive
);
}
if
(
strcasecmp
(
firstToken
,
"SHOW"
)
==
0
)
{
if
(
strcasecmp
(
firstToken
,
"SHOW"
)
==
0
)
{
Guard
g
(
m_print_mutex
);
Guard
g
(
m_print_mutex
);
executeShow
(
allAfterFirstToken
);
m_error
=
executeShow
(
allAfterFirstToken
);
DBUG_RETURN
(
true
);
DBUG_RETURN
(
true
);
}
}
else
if
(
strcasecmp
(
firstToken
,
"SHUTDOWN"
)
==
0
)
{
else
if
(
strcasecmp
(
firstToken
,
"SHUTDOWN"
)
==
0
)
{
...
@@ -1050,17 +1061,17 @@ CommandInterpreter::execute_impl(const char *_line, bool interactive)
...
@@ -1050,17 +1061,17 @@ CommandInterpreter::execute_impl(const char *_line, bool interactive)
else
if
(
strcasecmp
(
firstToken
,
"ABORT"
)
==
0
&&
else
if
(
strcasecmp
(
firstToken
,
"ABORT"
)
==
0
&&
allAfterFirstToken
!=
NULL
&&
allAfterFirstToken
!=
NULL
&&
strncasecmp
(
allAfterFirstToken
,
"BACKUP"
,
sizeof
(
"BACKUP"
)
-
1
)
==
0
){
strncasecmp
(
allAfterFirstToken
,
"BACKUP"
,
sizeof
(
"BACKUP"
)
-
1
)
==
0
){
executeAbortBackup
(
allAfterFirstToken
);
m_error
=
executeAbortBackup
(
allAfterFirstToken
);
DBUG_RETURN
(
true
);
DBUG_RETURN
(
true
);
}
}
else
if
(
strcasecmp
(
firstToken
,
"PURGE"
)
==
0
)
{
else
if
(
strcasecmp
(
firstToken
,
"PURGE"
)
==
0
)
{
executePurge
(
allAfterFirstToken
);
m_error
=
executePurge
(
allAfterFirstToken
);
DBUG_RETURN
(
true
);
DBUG_RETURN
(
true
);
}
}
#ifdef HAVE_GLOBAL_REPLICATION
#ifdef HAVE_GLOBAL_REPLICATION
else
if
(
strcasecmp
(
firstToken
,
"REPLICATION"
)
==
0
||
else
if
(
strcasecmp
(
firstToken
,
"REPLICATION"
)
==
0
||
strcasecmp
(
firstToken
,
"REP"
)
==
0
)
{
strcasecmp
(
firstToken
,
"REP"
)
==
0
)
{
executeRep
(
allAfterFirstToken
);
m_error
=
executeRep
(
allAfterFirstToken
);
DBUG_RETURN
(
true
);
DBUG_RETURN
(
true
);
}
}
#endif // HAVE_GLOBAL_REPLICATION
#endif // HAVE_GLOBAL_REPLICATION
...
@@ -1068,18 +1079,18 @@ CommandInterpreter::execute_impl(const char *_line, bool interactive)
...
@@ -1068,18 +1079,18 @@ CommandInterpreter::execute_impl(const char *_line, bool interactive)
allAfterFirstToken
!=
NULL
&&
allAfterFirstToken
!=
NULL
&&
strncasecmp
(
allAfterFirstToken
,
"SINGLE USER MODE "
,
strncasecmp
(
allAfterFirstToken
,
"SINGLE USER MODE "
,
sizeof
(
"SINGLE USER MODE"
)
-
1
)
==
0
){
sizeof
(
"SINGLE USER MODE"
)
-
1
)
==
0
){
executeEnterSingleUser
(
allAfterFirstToken
);
m_error
=
executeEnterSingleUser
(
allAfterFirstToken
);
DBUG_RETURN
(
true
);
DBUG_RETURN
(
true
);
}
}
else
if
(
strcasecmp
(
firstToken
,
"EXIT"
)
==
0
&&
else
if
(
strcasecmp
(
firstToken
,
"EXIT"
)
==
0
&&
allAfterFirstToken
!=
NULL
&&
allAfterFirstToken
!=
NULL
&&
strncasecmp
(
allAfterFirstToken
,
"SINGLE USER MODE "
,
strncasecmp
(
allAfterFirstToken
,
"SINGLE USER MODE "
,
sizeof
(
"SINGLE USER MODE"
)
-
1
)
==
0
){
sizeof
(
"SINGLE USER MODE"
)
-
1
)
==
0
){
executeExitSingleUser
(
allAfterFirstToken
);
m_error
=
executeExitSingleUser
(
allAfterFirstToken
);
DBUG_RETURN
(
true
);
DBUG_RETURN
(
true
);
}
}
else
if
(
strcasecmp
(
firstToken
,
"ALL"
)
==
0
)
{
else
if
(
strcasecmp
(
firstToken
,
"ALL"
)
==
0
)
{
analyseAfterFirstToken
(
-
1
,
allAfterFirstToken
);
m_error
=
analyseAfterFirstToken
(
-
1
,
allAfterFirstToken
);
}
else
{
}
else
{
/**
/**
* First tokens should be digits, node ID's
* First tokens should be digits, node ID's
...
@@ -1106,20 +1117,22 @@ CommandInterpreter::execute_impl(const char *_line, bool interactive)
...
@@ -1106,20 +1117,22 @@ CommandInterpreter::execute_impl(const char *_line, bool interactive)
{
{
/* No digit found */
/* No digit found */
invalid_command
(
_line
);
invalid_command
(
_line
);
m_error
=
-
1
;
DBUG_RETURN
(
true
);
DBUG_RETURN
(
true
);
}
}
if
(
pos
==
command_list
.
size
())
if
(
pos
==
command_list
.
size
())
{
{
/* No command found */
/* No command found */
invalid_command
(
_line
);
invalid_command
(
_line
);
m_error
=
-
1
;
DBUG_RETURN
(
true
);
DBUG_RETURN
(
true
);
}
}
if
(
no_of_nodes
==
1
)
if
(
no_of_nodes
==
1
)
{
{
analyseAfterFirstToken
(
node_ids
[
0
],
allAfterFirstToken
);
m_error
=
analyseAfterFirstToken
(
node_ids
[
0
],
allAfterFirstToken
);
DBUG_RETURN
(
true
);
DBUG_RETURN
(
true
);
}
}
executeCommand
(
command_list
,
pos
,
node_ids
,
no_of_nodes
);
m_error
=
executeCommand
(
command_list
,
pos
,
node_ids
,
no_of_nodes
);
DBUG_RETURN
(
true
);
DBUG_RETURN
(
true
);
}
}
DBUG_RETURN
(
true
);
DBUG_RETURN
(
true
);
...
@@ -1153,14 +1166,15 @@ static const CommandInterpreter::CommandFunctionPair commands[] = {
...
@@ -1153,14 +1166,15 @@ static const CommandInterpreter::CommandFunctionPair commands[] = {
//*****************************************************************************
//*****************************************************************************
//*****************************************************************************
//*****************************************************************************
void
int
CommandInterpreter
::
analyseAfterFirstToken
(
int
processId
,
CommandInterpreter
::
analyseAfterFirstToken
(
int
processId
,
char
*
allAfterFirstToken
)
{
char
*
allAfterFirstToken
)
{
int
retval
=
0
;
if
(
emptyString
(
allAfterFirstToken
))
{
if
(
emptyString
(
allAfterFirstToken
))
{
ndbout
<<
"Expected a command after "
ndbout
<<
"Expected a command after "
<<
((
processId
==
-
1
)
?
"ALL."
:
"node ID."
)
<<
endl
;
<<
((
processId
==
-
1
)
?
"ALL."
:
"node ID."
)
<<
endl
;
return
;
return
-
1
;
}
}
char
*
secondToken
=
strtok
(
allAfterFirstToken
,
" "
);
char
*
secondToken
=
strtok
(
allAfterFirstToken
,
" "
);
...
@@ -1179,36 +1193,39 @@ CommandInterpreter::analyseAfterFirstToken(int processId,
...
@@ -1179,36 +1193,39 @@ CommandInterpreter::analyseAfterFirstToken(int processId,
if
(
fun
==
0
){
if
(
fun
==
0
){
invalid_command
(
secondToken
);
invalid_command
(
secondToken
);
return
;
return
-
1
;
}
}
if
(
processId
==
-
1
){
if
(
processId
==
-
1
){
executeForAll
(
command
,
fun
,
allAfterSecondToken
);
retval
=
executeForAll
(
command
,
fun
,
allAfterSecondToken
);
}
else
{
}
else
{
(
this
->*
fun
)(
processId
,
allAfterSecondToken
,
false
);
retval
=
(
this
->*
fun
)(
processId
,
allAfterSecondToken
,
false
);
}
}
ndbout
<<
endl
;
ndbout
<<
endl
;
return
retval
;
}
}
void
int
CommandInterpreter
::
executeCommand
(
Vector
<
BaseString
>
&
command_list
,
CommandInterpreter
::
executeCommand
(
Vector
<
BaseString
>
&
command_list
,
unsigned
command_pos
,
unsigned
command_pos
,
int
*
node_ids
,
int
no_of_nodes
)
int
*
node_ids
,
int
no_of_nodes
)
{
{
const
char
*
cmd
=
command_list
[
command_pos
].
c_str
();
const
char
*
cmd
=
command_list
[
command_pos
].
c_str
();
int
retval
=
0
;
if
(
strcasecmp
(
"STOP"
,
cmd
)
==
0
)
if
(
strcasecmp
(
"STOP"
,
cmd
)
==
0
)
{
{
executeStop
(
command_list
,
command_pos
+
1
,
node_ids
,
no_of_nodes
);
retval
=
executeStop
(
command_list
,
command_pos
+
1
,
node_ids
,
no_of_nodes
);
return
;
return
retval
;
}
}
if
(
strcasecmp
(
"RESTART"
,
cmd
)
==
0
)
if
(
strcasecmp
(
"RESTART"
,
cmd
)
==
0
)
{
{
executeRestart
(
command_list
,
command_pos
+
1
,
node_ids
,
no_of_nodes
);
retval
=
executeRestart
(
command_list
,
command_pos
+
1
,
node_ids
,
no_of_nodes
);
return
;
return
retval
;
}
}
ndbout_c
(
"Invalid command: '%s' after multi node id list. "
ndbout_c
(
"Invalid command: '%s' after multi node id list. "
"Expected STOP or RESTART."
,
cmd
);
"Expected STOP or RESTART."
,
cmd
);
return
;
return
-
1
;
}
}
/**
/**
...
@@ -1249,18 +1266,20 @@ get_next_nodeid(struct ndb_mgm_cluster_state *cl,
...
@@ -1249,18 +1266,20 @@ get_next_nodeid(struct ndb_mgm_cluster_state *cl,
return
0
;
return
0
;
}
}
void
int
CommandInterpreter
::
executeForAll
(
const
char
*
cmd
,
ExecuteFunction
fun
,
CommandInterpreter
::
executeForAll
(
const
char
*
cmd
,
ExecuteFunction
fun
,
const
char
*
allAfterSecondToken
)
const
char
*
allAfterSecondToken
)
{
{
int
nodeId
=
0
;
int
nodeId
=
0
;
int
retval
=
0
;
if
(
strcasecmp
(
cmd
,
"STOP"
)
==
0
)
{
if
(
strcasecmp
(
cmd
,
"STOP"
)
==
0
)
{
ndbout_c
(
"Executing STOP on all nodes."
);
ndbout_c
(
"Executing STOP on all nodes."
);
(
this
->*
fun
)(
nodeId
,
allAfterSecondToken
,
true
);
retval
=
(
this
->*
fun
)(
nodeId
,
allAfterSecondToken
,
true
);
}
else
if
(
strcasecmp
(
cmd
,
"RESTART"
)
==
0
)
{
}
else
if
(
strcasecmp
(
cmd
,
"RESTART"
)
==
0
)
{
ndbout_c
(
"Executing RESTART on all nodes."
);
ndbout_c
(
"Executing RESTART on all nodes."
);
ndbout_c
(
"Starting shutdown. This may take a while. Please wait..."
);
ndbout_c
(
"Starting shutdown. This may take a while. Please wait..."
);
(
this
->*
fun
)(
nodeId
,
allAfterSecondToken
,
true
);
retval
=
(
this
->*
fun
)(
nodeId
,
allAfterSecondToken
,
true
);
ndbout_c
(
"Trying to start all nodes of system."
);
ndbout_c
(
"Trying to start all nodes of system."
);
ndbout_c
(
"Use ALL STATUS to see the system start-up phases."
);
ndbout_c
(
"Use ALL STATUS to see the system start-up phases."
);
}
else
{
}
else
{
...
@@ -1269,12 +1288,13 @@ CommandInterpreter::executeForAll(const char * cmd, ExecuteFunction fun,
...
@@ -1269,12 +1288,13 @@ CommandInterpreter::executeForAll(const char * cmd, ExecuteFunction fun,
if
(
cl
==
0
){
if
(
cl
==
0
){
ndbout_c
(
"Unable get status from management server"
);
ndbout_c
(
"Unable get status from management server"
);
printError
();
printError
();
return
;
return
-
1
;
}
}
NdbAutoPtr
<
char
>
ap1
((
char
*
)
cl
);
NdbAutoPtr
<
char
>
ap1
((
char
*
)
cl
);
while
(
get_next_nodeid
(
cl
,
&
nodeId
,
NDB_MGM_NODE_TYPE_NDB
))
while
(
get_next_nodeid
(
cl
,
&
nodeId
,
NDB_MGM_NODE_TYPE_NDB
))
(
this
->*
fun
)(
nodeId
,
allAfterSecondToken
,
true
);
retval
=
(
this
->*
fun
)(
nodeId
,
allAfterSecondToken
,
true
);
}
}
return
retval
;
}
}
//*****************************************************************************
//*****************************************************************************
...
@@ -1344,7 +1364,7 @@ CommandInterpreter::parseBlockSpecification(const char* allAfterLog,
...
@@ -1344,7 +1364,7 @@ CommandInterpreter::parseBlockSpecification(const char* allAfterLog,
/*****************************************************************************
/*****************************************************************************
* HELP
* HELP
*****************************************************************************/
*****************************************************************************/
void
int
CommandInterpreter
::
executeHelp
(
char
*
parameters
)
CommandInterpreter
::
executeHelp
(
char
*
parameters
)
{
{
if
(
emptyString
(
parameters
))
{
if
(
emptyString
(
parameters
))
{
...
@@ -1380,9 +1400,12 @@ CommandInterpreter::executeHelp(char* parameters)
...
@@ -1380,9 +1400,12 @@ CommandInterpreter::executeHelp(char* parameters)
break
;
break
;
}
}
}
}
if
(
help_items
[
i
].
cmd
==
NULL
)
if
(
help_items
[
i
].
cmd
==
NULL
)
{
ndbout
<<
"No help for "
<<
parameters
<<
" available"
<<
endl
;
ndbout
<<
"No help for "
<<
parameters
<<
" available"
<<
endl
;
return
-
1
;
}
}
}
return
0
;
}
}
...
@@ -1505,7 +1528,7 @@ print_nodes(ndb_mgm_cluster_state *state, ndb_mgm_configuration_iterator *it,
...
@@ -1505,7 +1528,7 @@ print_nodes(ndb_mgm_cluster_state *state, ndb_mgm_configuration_iterator *it,
ndbout
<<
endl
;
ndbout
<<
endl
;
}
}
void
int
CommandInterpreter
::
executePurge
(
char
*
parameters
)
CommandInterpreter
::
executePurge
(
char
*
parameters
)
{
{
int
command_ok
=
0
;
int
command_ok
=
0
;
...
@@ -1524,7 +1547,7 @@ CommandInterpreter::executePurge(char* parameters)
...
@@ -1524,7 +1547,7 @@ CommandInterpreter::executePurge(char* parameters)
if
(
!
command_ok
)
{
if
(
!
command_ok
)
{
ndbout_c
(
"Unexpected command, expected: PURGE STALE SESSIONS"
);
ndbout_c
(
"Unexpected command, expected: PURGE STALE SESSIONS"
);
return
;
return
-
1
;
}
}
int
i
;
int
i
;
...
@@ -1532,7 +1555,7 @@ CommandInterpreter::executePurge(char* parameters)
...
@@ -1532,7 +1555,7 @@ CommandInterpreter::executePurge(char* parameters)
if
(
ndb_mgm_purge_stale_sessions
(
m_mgmsrv
,
&
str
))
{
if
(
ndb_mgm_purge_stale_sessions
(
m_mgmsrv
,
&
str
))
{
ndbout_c
(
"Command failed"
);
ndbout_c
(
"Command failed"
);
return
;
return
-
1
;
}
}
if
(
str
)
{
if
(
str
)
{
ndbout_c
(
"Purged sessions with node id's: %s"
,
str
);
ndbout_c
(
"Purged sessions with node id's: %s"
,
str
);
...
@@ -1542,9 +1565,10 @@ CommandInterpreter::executePurge(char* parameters)
...
@@ -1542,9 +1565,10 @@ CommandInterpreter::executePurge(char* parameters)
{
{
ndbout_c
(
"No sessions purged"
);
ndbout_c
(
"No sessions purged"
);
}
}
return
0
;
}
}
void
int
CommandInterpreter
::
executeShow
(
char
*
parameters
)
CommandInterpreter
::
executeShow
(
char
*
parameters
)
{
{
int
i
;
int
i
;
...
@@ -1553,7 +1577,7 @@ CommandInterpreter::executeShow(char* parameters)
...
@@ -1553,7 +1577,7 @@ CommandInterpreter::executeShow(char* parameters)
if
(
state
==
NULL
)
{
if
(
state
==
NULL
)
{
ndbout_c
(
"Could not get status"
);
ndbout_c
(
"Could not get status"
);
printError
();
printError
();
return
;
return
-
1
;
}
}
NdbAutoPtr
<
char
>
ap1
((
char
*
)
state
);
NdbAutoPtr
<
char
>
ap1
((
char
*
)
state
);
...
@@ -1561,7 +1585,7 @@ CommandInterpreter::executeShow(char* parameters)
...
@@ -1561,7 +1585,7 @@ CommandInterpreter::executeShow(char* parameters)
if
(
conf
==
0
){
if
(
conf
==
0
){
ndbout_c
(
"Could not get configuration"
);
ndbout_c
(
"Could not get configuration"
);
printError
();
printError
();
return
;
return
-
1
;
}
}
ndb_mgm_configuration_iterator
*
it
;
ndb_mgm_configuration_iterator
*
it
;
...
@@ -1570,7 +1594,7 @@ CommandInterpreter::executeShow(char* parameters)
...
@@ -1570,7 +1594,7 @@ CommandInterpreter::executeShow(char* parameters)
if
(
it
==
0
){
if
(
it
==
0
){
ndbout_c
(
"Unable to create config iterator"
);
ndbout_c
(
"Unable to create config iterator"
);
ndb_mgm_destroy_configuration
(
conf
);
ndb_mgm_destroy_configuration
(
conf
);
return
;
return
-
1
;
}
}
NdbAutoPtr
<
ndb_mgm_configuration_iterator
>
ptr
(
it
);
NdbAutoPtr
<
ndb_mgm_configuration_iterator
>
ptr
(
it
);
...
@@ -1604,7 +1628,7 @@ CommandInterpreter::executeShow(char* parameters)
...
@@ -1604,7 +1628,7 @@ CommandInterpreter::executeShow(char* parameters)
break
;
break
;
case
NDB_MGM_NODE_TYPE_UNKNOWN
:
case
NDB_MGM_NODE_TYPE_UNKNOWN
:
ndbout
<<
"Error: Unknown Node Type"
<<
endl
;
ndbout
<<
"Error: Unknown Node Type"
<<
endl
;
return
;
return
-
1
;
case
NDB_MGM_NODE_TYPE_REP
:
case
NDB_MGM_NODE_TYPE_REP
:
abort
();
abort
();
}
}
...
@@ -1617,7 +1641,7 @@ CommandInterpreter::executeShow(char* parameters)
...
@@ -1617,7 +1641,7 @@ CommandInterpreter::executeShow(char* parameters)
print_nodes
(
state
,
it
,
"mysqld"
,
api_nodes
,
NDB_MGM_NODE_TYPE_API
,
0
);
print_nodes
(
state
,
it
,
"mysqld"
,
api_nodes
,
NDB_MGM_NODE_TYPE_API
,
0
);
// ndbout << helpTextShow;
// ndbout << helpTextShow;
ndb_mgm_destroy_configuration
(
conf
);
ndb_mgm_destroy_configuration
(
conf
);
return
;
return
0
;
}
else
if
(
strcasecmp
(
parameters
,
"PROPERTIES"
)
==
0
||
}
else
if
(
strcasecmp
(
parameters
,
"PROPERTIES"
)
==
0
||
strcasecmp
(
parameters
,
"PROP"
)
==
0
)
{
strcasecmp
(
parameters
,
"PROP"
)
==
0
)
{
ndbout
<<
"SHOW PROPERTIES is not yet implemented."
<<
endl
;
ndbout
<<
"SHOW PROPERTIES is not yet implemented."
<<
endl
;
...
@@ -1634,17 +1658,29 @@ CommandInterpreter::executeShow(char* parameters)
...
@@ -1634,17 +1658,29 @@ CommandInterpreter::executeShow(char* parameters)
// << endl; /* XXX */
// << endl; /* XXX */
}
else
{
}
else
{
ndbout
<<
"Invalid argument."
<<
endl
;
ndbout
<<
"Invalid argument."
<<
endl
;
return
-
1
;
}
}
return
0
;
}
}
void
int
CommandInterpreter
::
executeConnect
(
char
*
parameters
,
bool
interactive
)
CommandInterpreter
::
executeConnect
(
char
*
parameters
,
bool
interactive
)
{
{
BaseString
*
basestring
=
NULL
;
int
retval
;
disconnect
();
disconnect
();
if
(
!
emptyString
(
parameters
))
{
if
(
!
emptyString
(
parameters
))
{
m_constr
=
BaseString
(
parameters
).
trim
().
c_str
();
basestring
=
new
BaseString
(
parameters
);
m_constr
=
basestring
->
trim
().
c_str
();
}
}
connect
(
interactive
);
if
(
connect
(
interactive
)
==
false
){
return
-
1
;
}
if
(
basestring
!=
NULL
)
delete
basestring
;
return
0
;
}
}
//*****************************************************************************
//*****************************************************************************
...
@@ -1657,6 +1693,7 @@ CommandInterpreter::executeClusterLog(char* parameters)
...
@@ -1657,6 +1693,7 @@ CommandInterpreter::executeClusterLog(char* parameters)
if
(
emptyString
(
parameters
))
if
(
emptyString
(
parameters
))
{
{
ndbout
<<
"Missing argument."
<<
endl
;
ndbout
<<
"Missing argument."
<<
endl
;
m_error
=
-
1
;
DBUG_VOID_RETURN
;
DBUG_VOID_RETURN
;
}
}
...
@@ -1672,6 +1709,7 @@ CommandInterpreter::executeClusterLog(char* parameters)
...
@@ -1672,6 +1709,7 @@ CommandInterpreter::executeClusterLog(char* parameters)
if
(
enabled
==
NULL
)
{
if
(
enabled
==
NULL
)
{
ndbout
<<
"Couldn't get status"
<<
endl
;
ndbout
<<
"Couldn't get status"
<<
endl
;
printError
();
printError
();
m_error
=
-
1
;
DBUG_VOID_RETURN
;
DBUG_VOID_RETURN
;
}
}
...
@@ -1683,6 +1721,7 @@ CommandInterpreter::executeClusterLog(char* parameters)
...
@@ -1683,6 +1721,7 @@ CommandInterpreter::executeClusterLog(char* parameters)
if
(
enabled
[
0
]
==
0
)
if
(
enabled
[
0
]
==
0
)
{
{
ndbout
<<
"Cluster logging is disabled."
<<
endl
;
ndbout
<<
"Cluster logging is disabled."
<<
endl
;
m_error
=
0
;
DBUG_VOID_RETURN
;
DBUG_VOID_RETURN
;
}
}
#if 0
#if 0
...
@@ -1701,6 +1740,7 @@ CommandInterpreter::executeClusterLog(char* parameters)
...
@@ -1701,6 +1740,7 @@ CommandInterpreter::executeClusterLog(char* parameters)
ndbout
<<
BaseString
(
str
).
ndb_toupper
()
<<
" "
;
ndbout
<<
BaseString
(
str
).
ndb_toupper
()
<<
" "
;
}
}
ndbout
<<
endl
;
ndbout
<<
endl
;
m_error
=
0
;
DBUG_VOID_RETURN
;
DBUG_VOID_RETURN
;
}
}
...
@@ -1719,6 +1759,7 @@ CommandInterpreter::executeClusterLog(char* parameters)
...
@@ -1719,6 +1759,7 @@ CommandInterpreter::executeClusterLog(char* parameters)
enable
=
1
;
enable
=
1
;
}
else
{
}
else
{
ndbout
<<
"Invalid argument."
<<
endl
;
ndbout
<<
"Invalid argument."
<<
endl
;
m_error
=
-
1
;
DBUG_VOID_RETURN
;
DBUG_VOID_RETURN
;
}
}
...
@@ -1733,9 +1774,11 @@ CommandInterpreter::executeClusterLog(char* parameters)
...
@@ -1733,9 +1774,11 @@ CommandInterpreter::executeClusterLog(char* parameters)
{
{
ndbout
<<
"Couldn't set filter"
<<
endl
;
ndbout
<<
"Couldn't set filter"
<<
endl
;
printError
();
printError
();
m_error
=
-
1
;
DBUG_VOID_RETURN
;
DBUG_VOID_RETURN
;
}
}
ndbout
<<
"Cluster logging is "
<<
(
res_enable
?
"enabled."
:
"disabled"
)
<<
endl
;
ndbout
<<
"Cluster logging is "
<<
(
res_enable
?
"enabled."
:
"disabled"
)
<<
endl
;
m_error
=
0
;
DBUG_VOID_RETURN
;
DBUG_VOID_RETURN
;
}
}
...
@@ -1762,6 +1805,7 @@ CommandInterpreter::executeClusterLog(char* parameters)
...
@@ -1762,6 +1805,7 @@ CommandInterpreter::executeClusterLog(char* parameters)
}
}
if
(
severity
==
NDB_MGM_ILLEGAL_EVENT_SEVERITY
)
{
if
(
severity
==
NDB_MGM_ILLEGAL_EVENT_SEVERITY
)
{
ndbout
<<
"Invalid severity level: "
<<
item
<<
endl
;
ndbout
<<
"Invalid severity level: "
<<
item
<<
endl
;
m_error
=
-
1
;
DBUG_VOID_RETURN
;
DBUG_VOID_RETURN
;
}
}
...
@@ -1771,23 +1815,27 @@ CommandInterpreter::executeClusterLog(char* parameters)
...
@@ -1771,23 +1815,27 @@ CommandInterpreter::executeClusterLog(char* parameters)
{
{
ndbout
<<
"Couldn't set filter"
<<
endl
;
ndbout
<<
"Couldn't set filter"
<<
endl
;
printError
();
printError
();
m_error
=
-
1
;
DBUG_VOID_RETURN
;
DBUG_VOID_RETURN
;
}
}
ndbout
<<
BaseString
(
item
).
ndb_toupper
().
c_str
()
<<
" "
<<
(
res_enable
?
"enabled"
:
"disabled"
)
<<
endl
;
ndbout
<<
BaseString
(
item
).
ndb_toupper
().
c_str
()
<<
" "
<<
(
res_enable
?
"enabled"
:
"disabled"
)
<<
endl
;
item
=
strtok_r
(
NULL
,
" "
,
&
tmpPtr
);
item
=
strtok_r
(
NULL
,
" "
,
&
tmpPtr
);
}
while
(
item
!=
NULL
);
}
while
(
item
!=
NULL
);
m_error
=
0
;
DBUG_VOID_RETURN
;
DBUG_VOID_RETURN
;
}
}
//*****************************************************************************
//*****************************************************************************
//*****************************************************************************
//*****************************************************************************
void
int
CommandInterpreter
::
executeStop
(
int
processId
,
const
char
*
parameters
,
CommandInterpreter
::
executeStop
(
int
processId
,
const
char
*
parameters
,
bool
all
)
bool
all
)
{
{
int
retval
=
0
;
Vector
<
BaseString
>
command_list
;
Vector
<
BaseString
>
command_list
;
if
(
parameters
)
if
(
parameters
)
{
{
...
@@ -1797,18 +1845,22 @@ CommandInterpreter::executeStop(int processId, const char *parameters,
...
@@ -1797,18 +1845,22 @@ CommandInterpreter::executeStop(int processId, const char *parameters,
command_list
[
i
].
c_str
()[
0
]
?
i
++
:
(
command_list
.
erase
(
i
),
0
);
command_list
[
i
].
c_str
()[
0
]
?
i
++
:
(
command_list
.
erase
(
i
),
0
);
}
}
if
(
all
)
if
(
all
)
executeStop
(
command_list
,
0
,
0
,
0
);
retval
=
executeStop
(
command_list
,
0
,
0
,
0
);
else
else
executeStop
(
command_list
,
0
,
&
processId
,
1
);
retval
=
executeStop
(
command_list
,
0
,
&
processId
,
1
);
return
retval
;
}
}
void
int
CommandInterpreter
::
executeStop
(
Vector
<
BaseString
>
&
command_list
,
CommandInterpreter
::
executeStop
(
Vector
<
BaseString
>
&
command_list
,
unsigned
command_pos
,
unsigned
command_pos
,
int
*
node_ids
,
int
no_of_nodes
)
int
*
node_ids
,
int
no_of_nodes
)
{
{
int
need_disconnect
;
int
need_disconnect
;
int
abort
=
0
;
int
abort
=
0
;
int
retval
=
0
;
for
(;
command_pos
<
command_list
.
size
();
command_pos
++
)
for
(;
command_pos
<
command_list
.
size
();
command_pos
++
)
{
{
const
char
*
item
=
command_list
[
command_pos
].
c_str
();
const
char
*
item
=
command_list
[
command_pos
].
c_str
();
...
@@ -1819,7 +1871,7 @@ CommandInterpreter::executeStop(Vector<BaseString> &command_list,
...
@@ -1819,7 +1871,7 @@ CommandInterpreter::executeStop(Vector<BaseString> &command_list,
}
}
ndbout_c
(
"Invalid option: %s. Expecting -A after STOP"
,
ndbout_c
(
"Invalid option: %s. Expecting -A after STOP"
,
item
);
item
);
return
;
return
-
1
;
}
}
int
result
=
ndb_mgm_stop3
(
m_mgmsrv
,
no_of_nodes
,
node_ids
,
abort
,
int
result
=
ndb_mgm_stop3
(
m_mgmsrv
,
no_of_nodes
,
node_ids
,
abort
,
...
@@ -1828,6 +1880,7 @@ CommandInterpreter::executeStop(Vector<BaseString> &command_list,
...
@@ -1828,6 +1880,7 @@ CommandInterpreter::executeStop(Vector<BaseString> &command_list,
{
{
ndbout_c
(
"Shutdown failed."
);
ndbout_c
(
"Shutdown failed."
);
printError
();
printError
();
retval
=
-
1
;
}
}
else
else
{
{
...
@@ -1848,9 +1901,10 @@ CommandInterpreter::executeStop(Vector<BaseString> &command_list,
...
@@ -1848,9 +1901,10 @@ CommandInterpreter::executeStop(Vector<BaseString> &command_list,
disconnect
();
disconnect
();
}
}
return
retval
;
}
}
void
int
CommandInterpreter
::
executeEnterSingleUser
(
char
*
parameters
)
CommandInterpreter
::
executeEnterSingleUser
(
char
*
parameters
)
{
{
strtok
(
parameters
,
" "
);
strtok
(
parameters
,
" "
);
...
@@ -1862,37 +1916,42 @@ CommandInterpreter::executeEnterSingleUser(char* parameters)
...
@@ -1862,37 +1916,42 @@ CommandInterpreter::executeEnterSingleUser(char* parameters)
if
(
id
==
0
||
sscanf
(
id
,
"%d"
,
&
nodeId
)
!=
1
){
if
(
id
==
0
||
sscanf
(
id
,
"%d"
,
&
nodeId
)
!=
1
){
ndbout_c
(
"Invalid arguments: expected <NodeId>"
);
ndbout_c
(
"Invalid arguments: expected <NodeId>"
);
ndbout_c
(
"Use SHOW to see what API nodes are configured"
);
ndbout_c
(
"Use SHOW to see what API nodes are configured"
);
return
;
return
-
1
;
}
}
int
result
=
ndb_mgm_enter_single_user
(
m_mgmsrv
,
nodeId
,
&
reply
);
int
result
=
ndb_mgm_enter_single_user
(
m_mgmsrv
,
nodeId
,
&
reply
);
if
(
result
!=
0
)
{
if
(
result
!=
0
)
{
ndbout_c
(
"Entering single user mode for node %d failed"
,
nodeId
);
ndbout_c
(
"Entering single user mode for node %d failed"
,
nodeId
);
printError
();
printError
();
return
-
1
;
}
else
{
}
else
{
ndbout_c
(
"Single user mode entered"
);
ndbout_c
(
"Single user mode entered"
);
ndbout_c
(
"Access is granted for API node %d only."
,
nodeId
);
ndbout_c
(
"Access is granted for API node %d only."
,
nodeId
);
}
}
return
0
;
}
}
void
int
CommandInterpreter
::
executeExitSingleUser
(
char
*
parameters
)
CommandInterpreter
::
executeExitSingleUser
(
char
*
parameters
)
{
{
int
result
=
ndb_mgm_exit_single_user
(
m_mgmsrv
,
0
);
int
result
=
ndb_mgm_exit_single_user
(
m_mgmsrv
,
0
);
if
(
result
!=
0
)
{
if
(
result
!=
0
)
{
ndbout_c
(
"Exiting single user mode failed."
);
ndbout_c
(
"Exiting single user mode failed."
);
printError
();
printError
();
return
-
1
;
}
else
{
}
else
{
ndbout_c
(
"Exiting single user mode in progress."
);
ndbout_c
(
"Exiting single user mode in progress."
);
ndbout_c
(
"Use ALL STATUS or SHOW to see when single user mode has been exited."
);
ndbout_c
(
"Use ALL STATUS or SHOW to see when single user mode has been exited."
);
return
0
;
}
}
}
}
void
int
CommandInterpreter
::
executeStart
(
int
processId
,
const
char
*
parameters
,
CommandInterpreter
::
executeStart
(
int
processId
,
const
char
*
parameters
,
bool
all
)
bool
all
)
{
{
int
result
;
int
result
;
int
retval
=
0
;
if
(
all
)
{
if
(
all
)
{
result
=
ndb_mgm_start
(
m_mgmsrv
,
0
,
0
);
result
=
ndb_mgm_start
(
m_mgmsrv
,
0
,
0
);
}
else
{
}
else
{
...
@@ -1902,6 +1961,7 @@ CommandInterpreter::executeStart(int processId, const char* parameters,
...
@@ -1902,6 +1961,7 @@ CommandInterpreter::executeStart(int processId, const char* parameters,
if
(
result
<=
0
)
{
if
(
result
<=
0
)
{
ndbout
<<
"Start failed."
<<
endl
;
ndbout
<<
"Start failed."
<<
endl
;
printError
();
printError
();
retval
=
-
1
;
}
else
}
else
{
{
if
(
all
)
if
(
all
)
...
@@ -1909,13 +1969,16 @@ CommandInterpreter::executeStart(int processId, const char* parameters,
...
@@ -1909,13 +1969,16 @@ CommandInterpreter::executeStart(int processId, const char* parameters,
else
else
ndbout_c
(
"Database node %d is being started."
,
processId
);
ndbout_c
(
"Database node %d is being started."
,
processId
);
}
}
return
retval
;
}
}
void
int
CommandInterpreter
::
executeRestart
(
int
processId
,
const
char
*
parameters
,
CommandInterpreter
::
executeRestart
(
int
processId
,
const
char
*
parameters
,
bool
all
)
bool
all
)
{
{
Vector
<
BaseString
>
command_list
;
Vector
<
BaseString
>
command_list
;
int
retval
=
0
;
if
(
parameters
)
if
(
parameters
)
{
{
BaseString
tmp
(
parameters
);
BaseString
tmp
(
parameters
);
...
@@ -1924,17 +1987,20 @@ CommandInterpreter::executeRestart(int processId, const char* parameters,
...
@@ -1924,17 +1987,20 @@ CommandInterpreter::executeRestart(int processId, const char* parameters,
command_list
[
i
].
c_str
()[
0
]
?
i
++
:
(
command_list
.
erase
(
i
),
0
);
command_list
[
i
].
c_str
()[
0
]
?
i
++
:
(
command_list
.
erase
(
i
),
0
);
}
}
if
(
all
)
if
(
all
)
executeRestart
(
command_list
,
0
,
0
,
0
);
retval
=
executeRestart
(
command_list
,
0
,
0
,
0
);
else
else
executeRestart
(
command_list
,
0
,
&
processId
,
1
);
retval
=
executeRestart
(
command_list
,
0
,
&
processId
,
1
);
return
retval
;
}
}
void
int
CommandInterpreter
::
executeRestart
(
Vector
<
BaseString
>
&
command_list
,
CommandInterpreter
::
executeRestart
(
Vector
<
BaseString
>
&
command_list
,
unsigned
command_pos
,
unsigned
command_pos
,
int
*
node_ids
,
int
no_of_nodes
)
int
*
node_ids
,
int
no_of_nodes
)
{
{
int
result
;
int
result
;
int
retval
=
0
;
int
nostart
=
0
;
int
nostart
=
0
;
int
initialstart
=
0
;
int
initialstart
=
0
;
int
abort
=
0
;
int
abort
=
0
;
...
@@ -1960,7 +2026,7 @@ CommandInterpreter::executeRestart(Vector<BaseString> &command_list,
...
@@ -1960,7 +2026,7 @@ CommandInterpreter::executeRestart(Vector<BaseString> &command_list,
}
}
ndbout_c
(
"Invalid option: %s. Expecting -A,-N or -I after RESTART"
,
ndbout_c
(
"Invalid option: %s. Expecting -A,-N or -I after RESTART"
,
item
);
item
);
return
;
return
-
1
;
}
}
result
=
ndb_mgm_restart3
(
m_mgmsrv
,
no_of_nodes
,
node_ids
,
result
=
ndb_mgm_restart3
(
m_mgmsrv
,
no_of_nodes
,
node_ids
,
...
@@ -1969,6 +2035,7 @@ CommandInterpreter::executeRestart(Vector<BaseString> &command_list,
...
@@ -1969,6 +2035,7 @@ CommandInterpreter::executeRestart(Vector<BaseString> &command_list,
if
(
result
<=
0
)
{
if
(
result
<=
0
)
{
ndbout_c
(
"Restart failed."
);
ndbout_c
(
"Restart failed."
);
printError
();
printError
();
retval
=
-
1
;
}
}
else
else
{
{
...
@@ -1984,15 +2051,16 @@ CommandInterpreter::executeRestart(Vector<BaseString> &command_list,
...
@@ -1984,15 +2051,16 @@ CommandInterpreter::executeRestart(Vector<BaseString> &command_list,
if
(
need_disconnect
)
if
(
need_disconnect
)
disconnect
();
disconnect
();
}
}
return
retval
;
}
}
void
int
CommandInterpreter
::
executeDumpState
(
int
processId
,
const
char
*
parameters
,
CommandInterpreter
::
executeDumpState
(
int
processId
,
const
char
*
parameters
,
bool
all
)
bool
all
)
{
{
if
(
emptyString
(
parameters
)){
if
(
emptyString
(
parameters
)){
ndbout
<<
"Expected argument"
<<
endl
;
ndbout
<<
"Expected argument"
<<
endl
;
return
;
return
-
1
;
}
}
Uint32
no
=
0
;
Uint32
no
=
0
;
...
@@ -2009,7 +2077,7 @@ CommandInterpreter::executeDumpState(int processId, const char* parameters,
...
@@ -2009,7 +2077,7 @@ CommandInterpreter::executeDumpState(int processId, const char* parameters,
ndbout
<<
"Illegal value in argument to signal."
<<
endl
ndbout
<<
"Illegal value in argument to signal."
<<
endl
<<
"(Value must be between 0 and 0xffffffff.)"
<<
"(Value must be between 0 and 0xffffffff.)"
<<
endl
;
<<
endl
;
return
;
return
-
1
;
}
}
no
++
;
no
++
;
item
=
strtok_r
(
NULL
,
" "
,
&
tmpPtr
);
item
=
strtok_r
(
NULL
,
" "
,
&
tmpPtr
);
...
@@ -2021,16 +2089,16 @@ CommandInterpreter::executeDumpState(int processId, const char* parameters,
...
@@ -2021,16 +2089,16 @@ CommandInterpreter::executeDumpState(int processId, const char* parameters,
}
}
struct
ndb_mgm_reply
reply
;
struct
ndb_mgm_reply
reply
;
ndb_mgm_dump_state
(
m_mgmsrv
,
processId
,
pars
,
no
,
&
reply
);
return
ndb_mgm_dump_state
(
m_mgmsrv
,
processId
,
pars
,
no
,
&
reply
);
}
}
void
int
CommandInterpreter
::
executeStatus
(
int
processId
,
CommandInterpreter
::
executeStatus
(
int
processId
,
const
char
*
parameters
,
bool
all
)
const
char
*
parameters
,
bool
all
)
{
{
if
(
!
emptyString
(
parameters
))
{
if
(
!
emptyString
(
parameters
))
{
ndbout_c
(
"No parameters expected to this command."
);
ndbout_c
(
"No parameters expected to this command."
);
return
;
return
-
1
;
}
}
ndb_mgm_node_status
status
;
ndb_mgm_node_status
status
;
...
@@ -2042,7 +2110,7 @@ CommandInterpreter::executeStatus(int processId,
...
@@ -2042,7 +2110,7 @@ CommandInterpreter::executeStatus(int processId,
if
(
cl
==
NULL
)
{
if
(
cl
==
NULL
)
{
ndbout_c
(
"Cannot get status of node %d."
,
processId
);
ndbout_c
(
"Cannot get status of node %d."
,
processId
);
printError
();
printError
();
return
;
return
-
1
;
}
}
NdbAutoPtr
<
char
>
ap1
((
char
*
)
cl
);
NdbAutoPtr
<
char
>
ap1
((
char
*
)
cl
);
...
@@ -2051,7 +2119,7 @@ CommandInterpreter::executeStatus(int processId,
...
@@ -2051,7 +2119,7 @@ CommandInterpreter::executeStatus(int processId,
i
++
;
i
++
;
if
(
cl
->
node_states
[
i
].
node_id
!=
processId
)
{
if
(
cl
->
node_states
[
i
].
node_id
!=
processId
)
{
ndbout
<<
processId
<<
": Node not found"
<<
endl
;
ndbout
<<
processId
<<
": Node not found"
<<
endl
;
return
;
return
-
1
;
}
}
status
=
cl
->
node_states
[
i
].
node_status
;
status
=
cl
->
node_states
[
i
].
node_status
;
startPhase
=
cl
->
node_states
[
i
].
start_phase
;
startPhase
=
cl
->
node_states
[
i
].
start_phase
;
...
@@ -2075,27 +2143,29 @@ CommandInterpreter::executeStatus(int processId,
...
@@ -2075,27 +2143,29 @@ CommandInterpreter::executeStatus(int processId,
getBuild
(
version
));
getBuild
(
version
));
else
else
ndbout
<<
endl
;
ndbout
<<
endl
;
return
0
;
}
}
//*****************************************************************************
//*****************************************************************************
//*****************************************************************************
//*****************************************************************************
void
int
CommandInterpreter
::
executeLogLevel
(
int
processId
,
const
char
*
parameters
,
CommandInterpreter
::
executeLogLevel
(
int
processId
,
const
char
*
parameters
,
bool
all
)
bool
all
)
{
{
(
void
)
all
;
(
void
)
all
;
if
(
emptyString
(
parameters
))
{
if
(
emptyString
(
parameters
))
{
ndbout
<<
"Expected argument"
<<
endl
;
ndbout
<<
"Expected argument"
<<
endl
;
return
;
return
-
1
;
}
}
BaseString
tmp
(
parameters
);
BaseString
tmp
(
parameters
);
Vector
<
BaseString
>
spec
;
Vector
<
BaseString
>
spec
;
tmp
.
split
(
spec
,
"="
);
tmp
.
split
(
spec
,
"="
);
if
(
spec
.
size
()
!=
2
){
if
(
spec
.
size
()
!=
2
){
ndbout
<<
"Invalid loglevel specification: "
<<
parameters
<<
endl
;
ndbout
<<
"Invalid loglevel specification: "
<<
parameters
<<
endl
;
return
;
return
-
1
;
}
}
spec
[
0
].
trim
().
ndb_toupper
();
spec
[
0
].
trim
().
ndb_toupper
();
...
@@ -2105,14 +2175,14 @@ CommandInterpreter::executeLogLevel(int processId, const char* parameters,
...
@@ -2105,14 +2175,14 @@ CommandInterpreter::executeLogLevel(int processId, const char* parameters,
if
(
category
<
NDB_MGM_MIN_EVENT_CATEGORY
||
if
(
category
<
NDB_MGM_MIN_EVENT_CATEGORY
||
category
>
NDB_MGM_MAX_EVENT_CATEGORY
){
category
>
NDB_MGM_MAX_EVENT_CATEGORY
){
ndbout
<<
"Unknown category:
\"
"
<<
spec
[
0
].
c_str
()
<<
"
\"
"
<<
endl
;
ndbout
<<
"Unknown category:
\"
"
<<
spec
[
0
].
c_str
()
<<
"
\"
"
<<
endl
;
return
;
return
-
1
;
}
}
}
}
int
level
=
atoi
(
spec
[
1
].
c_str
());
int
level
=
atoi
(
spec
[
1
].
c_str
());
if
(
level
<
0
||
level
>
15
){
if
(
level
<
0
||
level
>
15
){
ndbout
<<
"Invalid level: "
<<
spec
[
1
].
c_str
()
<<
endl
;
ndbout
<<
"Invalid level: "
<<
spec
[
1
].
c_str
()
<<
endl
;
return
;
return
-
1
;
}
}
ndbout
<<
"Executing LOGLEVEL on node "
<<
processId
<<
flush
;
ndbout
<<
"Executing LOGLEVEL on node "
<<
processId
<<
flush
;
...
@@ -2128,20 +2198,22 @@ CommandInterpreter::executeLogLevel(int processId, const char* parameters,
...
@@ -2128,20 +2198,22 @@ CommandInterpreter::executeLogLevel(int processId, const char* parameters,
if
(
result
<
0
)
{
if
(
result
<
0
)
{
ndbout_c
(
" failed."
);
ndbout_c
(
" failed."
);
printError
();
printError
();
return
-
1
;
}
else
{
}
else
{
ndbout_c
(
" OK!"
);
ndbout_c
(
" OK!"
);
}
}
return
0
;
}
}
//*****************************************************************************
//*****************************************************************************
//*****************************************************************************
//*****************************************************************************
void
CommandInterpreter
::
executeError
(
int
processId
,
int
CommandInterpreter
::
executeError
(
int
processId
,
const
char
*
parameters
,
bool
/* all */
)
const
char
*
parameters
,
bool
/* all */
)
{
{
int
retval
=
0
;
if
(
emptyString
(
parameters
))
{
if
(
emptyString
(
parameters
))
{
ndbout
<<
"Missing error number."
<<
endl
;
ndbout
<<
"Missing error number."
<<
endl
;
return
;
return
-
1
;
}
}
// Copy parameters since strtok will modify it
// Copy parameters since strtok will modify it
...
@@ -2152,29 +2224,30 @@ void CommandInterpreter::executeError(int processId,
...
@@ -2152,29 +2224,30 @@ void CommandInterpreter::executeError(int processId,
int
errorNo
;
int
errorNo
;
if
(
!
convert
(
firstParameter
,
errorNo
))
{
if
(
!
convert
(
firstParameter
,
errorNo
))
{
ndbout
<<
"Expected an integer."
<<
endl
;
ndbout
<<
"Expected an integer."
<<
endl
;
return
;
return
-
1
;
}
}
char
*
allAfterFirstParameter
=
strtok
(
NULL
,
"
\0
"
);
char
*
allAfterFirstParameter
=
strtok
(
NULL
,
"
\0
"
);
if
(
!
emptyString
(
allAfterFirstParameter
))
{
if
(
!
emptyString
(
allAfterFirstParameter
))
{
ndbout
<<
"Nothing expected after error number."
<<
endl
;
ndbout
<<
"Nothing expected after error number."
<<
endl
;
return
;
return
-
1
;
}
}
ndb_mgm_insert_error
(
m_mgmsrv
,
processId
,
errorNo
,
NULL
);
retval
=
ndb_mgm_insert_error
(
m_mgmsrv
,
processId
,
errorNo
,
NULL
);
return
retval
;
}
}
//*****************************************************************************
//*****************************************************************************
//*****************************************************************************
//*****************************************************************************
void
int
CommandInterpreter
::
executeLog
(
int
processId
,
CommandInterpreter
::
executeLog
(
int
processId
,
const
char
*
parameters
,
bool
all
)
const
char
*
parameters
,
bool
all
)
{
{
struct
ndb_mgm_reply
reply
;
struct
ndb_mgm_reply
reply
;
Vector
<
const
char
*>
blocks
;
Vector
<
const
char
*>
blocks
;
if
(
!
parseBlockSpecification
(
parameters
,
blocks
))
{
if
(
!
parseBlockSpecification
(
parameters
,
blocks
))
{
return
;
return
-
1
;
}
}
int
len
=
1
;
int
len
=
1
;
Uint32
i
;
Uint32
i
;
...
@@ -2198,82 +2271,91 @@ CommandInterpreter::executeLog(int processId,
...
@@ -2198,82 +2271,91 @@ CommandInterpreter::executeLog(int processId,
if
(
result
!=
0
)
{
if
(
result
!=
0
)
{
ndbout_c
(
"Execute LOG on node %d failed."
,
processId
);
ndbout_c
(
"Execute LOG on node %d failed."
,
processId
);
printError
();
printError
();
return
-
1
;
}
}
return
0
;
}
}
//*****************************************************************************
//*****************************************************************************
//*****************************************************************************
//*****************************************************************************
void
int
CommandInterpreter
::
executeLogIn
(
int
/* processId */
,
CommandInterpreter
::
executeLogIn
(
int
/* processId */
,
const
char
*
parameters
,
bool
/* all */
)
const
char
*
parameters
,
bool
/* all */
)
{
{
ndbout
<<
"Command LOGIN not implemented."
<<
endl
;
ndbout
<<
"Command LOGIN not implemented."
<<
endl
;
return
0
;
}
}
//*****************************************************************************
//*****************************************************************************
//*****************************************************************************
//*****************************************************************************
void
int
CommandInterpreter
::
executeLogOut
(
int
/*processId*/
,
CommandInterpreter
::
executeLogOut
(
int
/*processId*/
,
const
char
*
parameters
,
bool
/*all*/
)
const
char
*
parameters
,
bool
/*all*/
)
{
{
ndbout
<<
"Command LOGOUT not implemented."
<<
endl
;
ndbout
<<
"Command LOGOUT not implemented."
<<
endl
;
return
0
;
}
}
//*****************************************************************************
//*****************************************************************************
//*****************************************************************************
//*****************************************************************************
void
int
CommandInterpreter
::
executeLogOff
(
int
/*processId*/
,
CommandInterpreter
::
executeLogOff
(
int
/*processId*/
,
const
char
*
parameters
,
bool
/*all*/
)
const
char
*
parameters
,
bool
/*all*/
)
{
{
ndbout
<<
"Command LOGOFF not implemented."
<<
endl
;
ndbout
<<
"Command LOGOFF not implemented."
<<
endl
;
return
0
;
}
}
//*****************************************************************************
//*****************************************************************************
//*****************************************************************************
//*****************************************************************************
void
int
CommandInterpreter
::
executeTestOn
(
int
processId
,
CommandInterpreter
::
executeTestOn
(
int
processId
,
const
char
*
parameters
,
bool
/*all*/
)
const
char
*
parameters
,
bool
/*all*/
)
{
{
if
(
!
emptyString
(
parameters
))
{
if
(
!
emptyString
(
parameters
))
{
ndbout
<<
"No parameters expected to this command."
<<
endl
;
ndbout
<<
"No parameters expected to this command."
<<
endl
;
return
;
return
-
1
;
}
}
struct
ndb_mgm_reply
reply
;
struct
ndb_mgm_reply
reply
;
int
result
=
ndb_mgm_start_signallog
(
m_mgmsrv
,
processId
,
&
reply
);
int
result
=
ndb_mgm_start_signallog
(
m_mgmsrv
,
processId
,
&
reply
);
if
(
result
!=
0
)
{
if
(
result
!=
0
)
{
ndbout_c
(
"Execute TESTON failed."
);
ndbout_c
(
"Execute TESTON failed."
);
printError
();
printError
();
return
-
1
;
}
}
return
0
;
}
}
//*****************************************************************************
//*****************************************************************************
//*****************************************************************************
//*****************************************************************************
void
int
CommandInterpreter
::
executeTestOff
(
int
processId
,
CommandInterpreter
::
executeTestOff
(
int
processId
,
const
char
*
parameters
,
bool
/*all*/
)
const
char
*
parameters
,
bool
/*all*/
)
{
{
if
(
!
emptyString
(
parameters
))
{
if
(
!
emptyString
(
parameters
))
{
ndbout
<<
"No parameters expected to this command."
<<
endl
;
ndbout
<<
"No parameters expected to this command."
<<
endl
;
return
;
return
-
1
;
}
}
struct
ndb_mgm_reply
reply
;
struct
ndb_mgm_reply
reply
;
int
result
=
ndb_mgm_stop_signallog
(
m_mgmsrv
,
processId
,
&
reply
);
int
result
=
ndb_mgm_stop_signallog
(
m_mgmsrv
,
processId
,
&
reply
);
if
(
result
!=
0
)
{
if
(
result
!=
0
)
{
ndbout_c
(
"Execute TESTOFF failed."
);
ndbout_c
(
"Execute TESTOFF failed."
);
printError
();
printError
();
return
-
1
;
}
}
return
0
;
}
}
//*****************************************************************************
//*****************************************************************************
//*****************************************************************************
//*****************************************************************************
void
int
CommandInterpreter
::
executeSet
(
int
/*processId*/
,
CommandInterpreter
::
executeSet
(
int
/*processId*/
,
const
char
*
parameters
,
bool
/*all*/
)
const
char
*
parameters
,
bool
/*all*/
)
{
{
if
(
emptyString
(
parameters
))
{
if
(
emptyString
(
parameters
))
{
ndbout
<<
"Missing parameter name."
<<
endl
;
ndbout
<<
"Missing parameter name."
<<
endl
;
return
;
return
-
1
;
}
}
#if 0
#if 0
// Copy parameters since strtok will modify it
// Copy parameters since strtok will modify it
...
@@ -2337,17 +2419,18 @@ CommandInterpreter::executeSet(int /*processId*/,
...
@@ -2337,17 +2419,18 @@ CommandInterpreter::executeSet(int /*processId*/,
abort();
abort();
}
}
}
}
#endif
#endif
return
0
;
}
}
//*****************************************************************************
//*****************************************************************************
//*****************************************************************************
//*****************************************************************************
void
CommandInterpreter
::
executeGetStat
(
int
/*processId*/
,
int
CommandInterpreter
::
executeGetStat
(
int
/*processId*/
,
const
char
*
parameters
,
bool
/*all*/
)
const
char
*
parameters
,
bool
/*all*/
)
{
{
if
(
!
emptyString
(
parameters
))
{
if
(
!
emptyString
(
parameters
))
{
ndbout
<<
"No parameters expected to this command."
<<
endl
;
ndbout
<<
"No parameters expected to this command."
<<
endl
;
return
;
return
-
1
;
}
}
#if 0
#if 0
...
@@ -2363,19 +2446,21 @@ void CommandInterpreter::executeGetStat(int /*processId*/,
...
@@ -2363,19 +2446,21 @@ void CommandInterpreter::executeGetStat(int /*processId*/,
ndbout << "Number of GETSTAT commands: "
ndbout << "Number of GETSTAT commands: "
<< statistics._test1 << endl;
<< statistics._test1 << endl;
*/
*/
return
0
;
}
}
//*****************************************************************************
//*****************************************************************************
//*****************************************************************************
//*****************************************************************************
void
int
CommandInterpreter
::
executeEventReporting
(
int
processId
,
CommandInterpreter
::
executeEventReporting
(
int
processId
,
const
char
*
parameters
,
const
char
*
parameters
,
bool
all
)
bool
all
)
{
{
int
retval
=
0
;
if
(
emptyString
(
parameters
))
{
if
(
emptyString
(
parameters
))
{
ndbout
<<
"Expected argument"
<<
endl
;
ndbout
<<
"Expected argument"
<<
endl
;
return
;
return
-
1
;
}
}
BaseString
tmp
(
parameters
);
BaseString
tmp
(
parameters
);
Vector
<
BaseString
>
specs
;
Vector
<
BaseString
>
specs
;
...
@@ -2422,10 +2507,12 @@ CommandInterpreter::executeEventReporting(int processId,
...
@@ -2422,10 +2507,12 @@ CommandInterpreter::executeEventReporting(int processId,
if
(
result
!=
0
)
{
if
(
result
!=
0
)
{
ndbout_c
(
" failed."
);
ndbout_c
(
" failed."
);
printError
();
printError
();
retval
=
-
1
;
}
else
{
}
else
{
ndbout_c
(
" OK!"
);
ndbout_c
(
" OK!"
);
}
}
}
}
return
retval
;
}
}
/*****************************************************************************
/*****************************************************************************
...
@@ -2526,7 +2613,7 @@ CommandInterpreter::executeStartBackup(char* parameters)
...
@@ -2526,7 +2613,7 @@ CommandInterpreter::executeStartBackup(char* parameters)
return
0
;
return
0
;
}
}
void
int
CommandInterpreter
::
executeAbortBackup
(
char
*
parameters
)
CommandInterpreter
::
executeAbortBackup
(
char
*
parameters
)
{
{
int
bid
=
-
1
;
int
bid
=
-
1
;
...
@@ -2545,14 +2632,15 @@ CommandInterpreter::executeAbortBackup(char* parameters)
...
@@ -2545,14 +2632,15 @@ CommandInterpreter::executeAbortBackup(char* parameters)
if
(
result
!=
0
)
{
if
(
result
!=
0
)
{
ndbout
<<
"Abort of backup "
<<
bid
<<
" failed"
<<
endl
;
ndbout
<<
"Abort of backup "
<<
bid
<<
" failed"
<<
endl
;
printError
();
printError
();
return
-
1
;
}
else
{
}
else
{
ndbout
<<
"Abort of backup "
<<
bid
<<
" ordered"
<<
endl
;
ndbout
<<
"Abort of backup "
<<
bid
<<
" ordered"
<<
endl
;
}
}
}
}
return
;
return
0
;
executeAbortBackupError1:
executeAbortBackupError1:
ndbout
<<
"Invalid arguments: expected <BackupId>"
<<
endl
;
ndbout
<<
"Invalid arguments: expected <BackupId>"
<<
endl
;
return
;
return
-
1
;
}
}
#ifdef HAVE_GLOBAL_REPLICATION
#ifdef HAVE_GLOBAL_REPLICATION
...
@@ -2583,12 +2671,12 @@ CommandInterpreter::executeAbortBackup(char* parameters)
...
@@ -2583,12 +2671,12 @@ CommandInterpreter::executeAbortBackup(char* parameters)
*****************************************************************************/
*****************************************************************************/
void
int
CommandInterpreter
::
executeRep
(
char
*
parameters
)
CommandInterpreter
::
executeRep
(
char
*
parameters
)
{
{
if
(
emptyString
(
parameters
))
{
if
(
emptyString
(
parameters
))
{
ndbout
<<
helpTextRep
;
ndbout
<<
helpTextRep
;
return
;
return
0
;
}
}
char
*
line
=
my_strdup
(
parameters
,
MYF
(
MY_WME
));
char
*
line
=
my_strdup
(
parameters
,
MYF
(
MY_WME
));
...
@@ -2608,7 +2696,7 @@ CommandInterpreter::executeRep(char* parameters)
...
@@ -2608,7 +2696,7 @@ CommandInterpreter::executeRep(char* parameters)
if
(
host
==
NULL
)
if
(
host
==
NULL
)
{
{
ndbout_c
(
"host:port must be specified."
);
ndbout_c
(
"host:port must be specified."
);
return
;
return
-
1
;
}
}
if
(
rep_connected
)
{
if
(
rep_connected
)
{
...
@@ -2620,14 +2708,17 @@ CommandInterpreter::executeRep(char* parameters)
...
@@ -2620,14 +2708,17 @@ CommandInterpreter::executeRep(char* parameters)
if
(
m_repserver
==
NULL
)
if
(
m_repserver
==
NULL
)
m_repserver
=
ndb_rep_create_handle
();
m_repserver
=
ndb_rep_create_handle
();
if
(
ndb_rep_connect
(
m_repserver
,
host
)
<
0
)
if
(
ndb_rep_connect
(
m_repserver
,
host
)
<
0
){
ndbout_c
(
"Failed to connect to %s"
,
host
);
ndbout_c
(
"Failed to connect to %s"
,
host
);
return
-
1
;
}
else
else
rep_connected
=
true
;
rep_connected
=
true
;
return
;
return
0
;
if
(
!
rep_connected
)
{
if
(
!
rep_connected
)
{
ndbout_c
(
"Not connected to REP server"
);
ndbout_c
(
"Not connected to REP server"
);
return
-
1
;
}
}
}
}
...
@@ -2661,17 +2752,18 @@ CommandInterpreter::executeRep(char* parameters)
...
@@ -2661,17 +2752,18 @@ CommandInterpreter::executeRep(char* parameters)
req
=
GrepReq
::
START_DELETE
;
req
=
GrepReq
::
START_DELETE
;
}
else
{
}
else
{
ndbout_c
(
"Illegal argument to command 'REPLICATION START'"
);
ndbout_c
(
"Illegal argument to command 'REPLICATION START'"
);
return
;
return
-
1
;
}
}
int
result
=
ndb_rep_command
(
m_repserver
,
req
,
&
repId
,
&
reply
);
int
result
=
ndb_rep_command
(
m_repserver
,
req
,
&
repId
,
&
reply
);
if
(
result
!=
0
)
{
if
(
result
!=
0
)
{
ndbout
<<
"Start of Global Replication failed"
<<
endl
;
ndbout
<<
"Start of Global Replication failed"
<<
endl
;
return
-
1
;
}
else
{
}
else
{
ndbout
<<
"Start of Global Replication ordered"
<<
endl
;
ndbout
<<
"Start of Global Replication ordered"
<<
endl
;
}
}
return
;
return
0
;
}
}
/********
/********
...
@@ -2691,7 +2783,7 @@ CommandInterpreter::executeRep(char* parameters)
...
@@ -2691,7 +2783,7 @@ CommandInterpreter::executeRep(char* parameters)
char
*
strEpoch
=
strtok
(
NULL
,
"
\0
"
);
char
*
strEpoch
=
strtok
(
NULL
,
"
\0
"
);
if
(
strEpoch
==
NULL
)
{
if
(
strEpoch
==
NULL
)
{
ndbout_c
(
"Epoch expected!"
);
ndbout_c
(
"Epoch expected!"
);
return
;
return
-
1
;
}
}
req
=
GrepReq
::
STOP
;
req
=
GrepReq
::
STOP
;
epoch
=
atoi
(
strEpoch
);
epoch
=
atoi
(
strEpoch
);
...
@@ -2715,16 +2807,17 @@ CommandInterpreter::executeRep(char* parameters)
...
@@ -2715,16 +2807,17 @@ CommandInterpreter::executeRep(char* parameters)
req
=
GrepReq
::
STOP_DELETE
;
req
=
GrepReq
::
STOP_DELETE
;
}
else
{
}
else
{
ndbout_c
(
"Illegal argument to command 'REPLICATION STOP'"
);
ndbout_c
(
"Illegal argument to command 'REPLICATION STOP'"
);
return
;
return
-
1
;
}
}
int
result
=
ndb_rep_command
(
m_repserver
,
req
,
&
repId
,
&
reply
,
epoch
);
int
result
=
ndb_rep_command
(
m_repserver
,
req
,
&
repId
,
&
reply
,
epoch
);
if
(
result
!=
0
)
{
if
(
result
!=
0
)
{
ndbout
<<
"Stop command failed"
<<
endl
;
ndbout
<<
"Stop command failed"
<<
endl
;
return
-
1
;
}
else
{
}
else
{
ndbout
<<
"Stop ordered"
<<
endl
;
ndbout
<<
"Stop ordered"
<<
endl
;
}
}
return
;
return
0
;
}
}
/*********
/*********
...
@@ -2737,6 +2830,7 @@ CommandInterpreter::executeRep(char* parameters)
...
@@ -2737,6 +2830,7 @@ CommandInterpreter::executeRep(char* parameters)
if
(
result
!=
0
)
{
if
(
result
!=
0
)
{
ndbout
<<
"Status request of Global Replication failed"
<<
endl
;
ndbout
<<
"Status request of Global Replication failed"
<<
endl
;
return
-
1
;
}
else
{
}
else
{
ndbout
<<
"Status request of Global Replication ordered"
<<
endl
;
ndbout
<<
"Status request of Global Replication ordered"
<<
endl
;
ndbout
<<
"See printout at one of the DB nodes"
<<
endl
;
ndbout
<<
"See printout at one of the DB nodes"
<<
endl
;
...
@@ -2744,7 +2838,7 @@ CommandInterpreter::executeRep(char* parameters)
...
@@ -2744,7 +2838,7 @@ CommandInterpreter::executeRep(char* parameters)
ndbout
<<
" SubscriptionId "
<<
repstate
.
subid
ndbout
<<
" SubscriptionId "
<<
repstate
.
subid
<<
" SubscriptionKey "
<<
repstate
.
subkey
<<
endl
;
<<
" SubscriptionKey "
<<
repstate
.
subkey
<<
endl
;
}
}
return
;
return
0
;
}
}
/*********
/*********
...
@@ -2763,6 +2857,7 @@ CommandInterpreter::executeRep(char* parameters)
...
@@ -2763,6 +2857,7 @@ CommandInterpreter::executeRep(char* parameters)
if
(
result
!=
0
)
{
if
(
result
!=
0
)
{
ndbout
<<
"Query repserver failed"
<<
endl
;
ndbout
<<
"Query repserver failed"
<<
endl
;
return
-
1
;
}
else
{
}
else
{
ndbout
<<
"Query repserver sucessful"
<<
endl
;
ndbout
<<
"Query repserver sucessful"
<<
endl
;
ndbout_c
(
"repstate : QueryCounter %d, f=%d l=%d"
ndbout_c
(
"repstate : QueryCounter %d, f=%d l=%d"
...
@@ -2771,8 +2866,9 @@ CommandInterpreter::executeRep(char* parameters)
...
@@ -2771,8 +2866,9 @@ CommandInterpreter::executeRep(char* parameters)
repstate
.
first
[
0
],
repstate
.
last
[
0
],
repstate
.
first
[
0
],
repstate
.
last
[
0
],
repstate
.
no_of_nodegroups
);
repstate
.
no_of_nodegroups
);
}
}
return
;
return
0
;
}
}
return
0
;
}
}
#endif // HAVE_GLOBAL_REPLICATION
#endif // HAVE_GLOBAL_REPLICATION
...
...
ndb/src/mgmsrv/Services.cpp
View file @
99395d5d
...
@@ -147,6 +147,7 @@ ParserRow<MgmApiSession> commands[] = {
...
@@ -147,6 +147,7 @@ ParserRow<MgmApiSession> commands[] = {
MGM_CMD
(
"get status"
,
&
MgmApiSession
::
getStatus
,
""
),
MGM_CMD
(
"get status"
,
&
MgmApiSession
::
getStatus
,
""
),
MGM_CMD
(
"get info clusterlog"
,
&
MgmApiSession
::
getInfoClusterLog
,
""
),
MGM_CMD
(
"get info clusterlog"
,
&
MgmApiSession
::
getInfoClusterLog
,
""
),
MGM_CMD
(
"get cluster loglevel"
,
&
MgmApiSession
::
getClusterLogLevel
,
""
),
MGM_CMD
(
"restart node"
,
&
MgmApiSession
::
restart_v1
,
""
),
MGM_CMD
(
"restart node"
,
&
MgmApiSession
::
restart_v1
,
""
),
MGM_ARG
(
"node"
,
String
,
Mandatory
,
"Nodes to restart"
),
MGM_ARG
(
"node"
,
String
,
Mandatory
,
"Nodes to restart"
),
...
@@ -803,6 +804,32 @@ MgmApiSession::endSession(Parser<MgmApiSession>::Context &,
...
@@ -803,6 +804,32 @@ MgmApiSession::endSession(Parser<MgmApiSession>::Context &,
m_output
->
println
(
"end session reply"
);
m_output
->
println
(
"end session reply"
);
}
}
void
MgmApiSession
::
getClusterLogLevel
(
Parser
<
MgmApiSession
>::
Context
&
,
Properties
const
&
)
{
const
char
*
names
[]
=
{
"startup"
,
"shutdown"
,
"statistics"
,
"checkpoint"
,
"noderestart"
,
"connection"
,
"info"
,
"warning"
,
"error"
,
"congestion"
,
"debug"
,
"backup"
};
int
loglevel_count
=
(
CFG_MAX_LOGLEVEL
-
CFG_MIN_LOGLEVEL
+
1
)
;
LogLevel
::
EventCategory
category
;
m_output
->
println
(
"get cluster loglevel"
);
for
(
int
i
=
0
;
i
<
loglevel_count
;
i
++
)
{
category
=
(
LogLevel
::
EventCategory
)
i
;
m_output
->
println
(
"%s: %d"
,
names
[
i
],
m_mgmsrv
.
m_event_listner
[
0
].
m_logLevel
.
getLogLevel
(
category
));
}
m_output
->
println
(
""
);
}
void
void
MgmApiSession
::
setClusterLogLevel
(
Parser
<
MgmApiSession
>::
Context
&
,
MgmApiSession
::
setClusterLogLevel
(
Parser
<
MgmApiSession
>::
Context
&
,
Properties
const
&
args
)
{
Properties
const
&
args
)
{
...
...
ndb/src/mgmsrv/Services.hpp
View file @
99395d5d
...
@@ -87,6 +87,8 @@ public:
...
@@ -87,6 +87,8 @@ public:
void
bye
(
Parser_t
::
Context
&
ctx
,
const
class
Properties
&
args
);
void
bye
(
Parser_t
::
Context
&
ctx
,
const
class
Properties
&
args
);
void
endSession
(
Parser_t
::
Context
&
ctx
,
const
class
Properties
&
args
);
void
endSession
(
Parser_t
::
Context
&
ctx
,
const
class
Properties
&
args
);
void
setLogLevel
(
Parser_t
::
Context
&
ctx
,
const
class
Properties
&
args
);
void
setLogLevel
(
Parser_t
::
Context
&
ctx
,
const
class
Properties
&
args
);
void
getClusterLogLevel
(
Parser_t
::
Context
&
ctx
,
const
class
Properties
&
args
);
void
setClusterLogLevel
(
Parser_t
::
Context
&
ctx
,
void
setClusterLogLevel
(
Parser_t
::
Context
&
ctx
,
const
class
Properties
&
args
);
const
class
Properties
&
args
);
void
setLogFilter
(
Parser_t
::
Context
&
ctx
,
const
class
Properties
&
args
);
void
setLogFilter
(
Parser_t
::
Context
&
ctx
,
const
class
Properties
&
args
);
...
...
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