summaryrefslogtreecommitdiff
path: root/ndb/src
diff options
context:
space:
mode:
authorunknown <tomas@poseidon.ndb.mysql.com>2004-11-26 09:44:57 +0000
committerunknown <tomas@poseidon.ndb.mysql.com>2004-11-26 09:44:57 +0000
commit33d654d7e1dce86bf2dbbea6dda4979c4f2ff497 (patch)
treeae96bebd34dbedfbf3466bc905c3b6f27eaea0a1 /ndb/src
parentbf39ae6a5c453395bddc6a9535975dc2e951e675 (diff)
downloadmariadb-git-33d654d7e1dce86bf2dbbea6dda4979c4f2ff497.tar.gz
cleaned up code a bit
added command CONNECT in management client added some verbose printouts removed prompt printout on !isatty(0) ndb/src/mgmapi/mgmapi.cpp: improved verbose printouts on connecting to management server ndb/src/mgmclient/CommandInterpreter.cpp: cleaned up code a bit added command CONNECT in management client added some verbose printouts ndb/src/mgmclient/main.cpp: removed prompt printout on !isatty(0) ndb/src/mgmclient/ndb_mgmclient.hpp: added verbose opotion
Diffstat (limited to 'ndb/src')
-rw-r--r--ndb/src/mgmapi/mgmapi.cpp22
-rw-r--r--ndb/src/mgmclient/CommandInterpreter.cpp97
-rw-r--r--ndb/src/mgmclient/main.cpp19
-rw-r--r--ndb/src/mgmclient/ndb_mgmclient.hpp2
4 files changed, 81 insertions, 59 deletions
diff --git a/ndb/src/mgmapi/mgmapi.cpp b/ndb/src/mgmapi/mgmapi.cpp
index ca3a2a2186d..831d14eac52 100644
--- a/ndb/src/mgmapi/mgmapi.cpp
+++ b/ndb/src/mgmapi/mgmapi.cpp
@@ -379,18 +379,30 @@ ndb_mgm_connect(NdbMgmHandle handle, int no_retries,
setError(handle, NDB_MGM_COULD_NOT_CONNECT_TO_SOCKET, __LINE__,
"Unable to connect with connect string: %s",
cfg.makeConnectString(buf,sizeof(buf)));
+ if (verbose == -2)
+ ndbout << ", failed." << endl;
return -1;
}
if (verbose == -1) {
- ndbout << "retrying every " << retry_delay_in_seconds << " seconds:";
+ ndbout << "Retrying every " << retry_delay_in_seconds << " seconds";
+ if (no_retries > 0)
+ ndbout << ". Attempts left:";
+ else
+ ndbout << ", until connected.";;
+ ndbout << flush;
verbose= -2;
}
- NdbSleep_SecSleep(retry_delay_in_seconds);
- if (verbose == -2) {
- ndbout << " " << no_retries;
+ if (no_retries > 0) {
+ if (verbose == -2) {
+ ndbout << " " << no_retries;
+ ndbout << flush;
+ }
+ no_retries--;
}
- no_retries--;
+ NdbSleep_SecSleep(retry_delay_in_seconds);
}
+ if (verbose == -2)
+ ndbout << endl;
handle->cfg_i = i;
diff --git a/ndb/src/mgmclient/CommandInterpreter.cpp b/ndb/src/mgmclient/CommandInterpreter.cpp
index 54beaa49d3f..bfe8b6786b4 100644
--- a/ndb/src/mgmclient/CommandInterpreter.cpp
+++ b/ndb/src/mgmclient/CommandInterpreter.cpp
@@ -44,7 +44,7 @@ public:
* Constructor
* @param mgmtSrvr: Management server to use when executing commands
*/
- CommandInterpreter(const char *);
+ CommandInterpreter(const char *, int verbose);
~CommandInterpreter();
/**
@@ -94,6 +94,7 @@ private:
*/
void executeHelp(char* parameters);
void executeShow(char* parameters);
+ void executeConnect(char* parameters);
void executePurge(char* parameters);
void executeShutdown(char* parameters);
void executeRun(char* parameters);
@@ -153,6 +154,7 @@ private:
NdbMgmHandle m_mgmsrv;
bool connected;
+ int m_verbose;
int try_reconnect;
#ifdef HAVE_GLOBAL_REPLICATION
NdbRepHandle m_repserver;
@@ -169,9 +171,9 @@ private:
#include "ndb_mgmclient.hpp"
#include "ndb_mgmclient.h"
-Ndb_mgmclient::Ndb_mgmclient(const char *host)
+Ndb_mgmclient::Ndb_mgmclient(const char *host,int verbose)
{
- m_cmd= new CommandInterpreter(host);
+ m_cmd= new CommandInterpreter(host,verbose);
}
Ndb_mgmclient::~Ndb_mgmclient()
{
@@ -275,6 +277,7 @@ static const char* helpText =
"REP CONNECT <host:port> Connect to REP server on host:port\n"
#endif
"PURGE STALE SESSIONS Reset reserved nodeid's in the mgmt server\n"
+"CONNECT Connect to management server (reconnect if already connected)\n"
"QUIT Quit management client\n"
;
@@ -373,7 +376,8 @@ convert(const char* s, int& val) {
/*
* Constructor
*/
-CommandInterpreter::CommandInterpreter(const char *_host)
+CommandInterpreter::CommandInterpreter(const char *_host,int verbose)
+ : m_verbose(verbose)
{
m_mgmsrv = ndb_mgm_create_handle();
if(m_mgmsrv == NULL) {
@@ -437,7 +441,15 @@ CommandInterpreter::connect()
{
if(!connected) {
if(!ndb_mgm_connect(m_mgmsrv, try_reconnect-1, 5, 1))
+ {
connected = true;
+ if (m_verbose)
+ {
+ printf("Connected to Management Server at: %s:%d\n",
+ ndb_mgm_get_connected_host(m_mgmsrv),
+ ndb_mgm_get_connected_port(m_mgmsrv));
+ }
+ }
}
return connected;
}
@@ -445,7 +457,7 @@ CommandInterpreter::connect()
bool
CommandInterpreter::disconnect()
{
- if (ndb_mgm_disconnect(m_mgmsrv) == -1) {
+ if (connected && (ndb_mgm_disconnect(m_mgmsrv) == -1)) {
ndbout_c("Could not disconnect from management server");
printError();
}
@@ -459,18 +471,21 @@ CommandInterpreter::disconnect()
int
CommandInterpreter::execute(const char *_line, int _try_reconnect)
{
+ DBUG_ENTER("CommandInterpreter::execute");
+ DBUG_PRINT("info",("line=\"%s\"",_line));
+
if (_try_reconnect >= 0)
try_reconnect=_try_reconnect;
char * line;
if(_line == NULL) {
// ndbout << endl;
- return false;
+ DBUG_RETURN(false);
}
line = my_strdup(_line,MYF(MY_WME));
My_auto_ptr<char> ptr(line);
if (emptyString(line)) {
- return true;
+ DBUG_RETURN(true);
}
for (unsigned int i = 0; i < strlen(line); ++i) {
@@ -484,41 +499,49 @@ CommandInterpreter::execute(const char *_line, int _try_reconnect)
if (strcmp(firstToken, "HELP") == 0 ||
strcmp(firstToken, "?") == 0) {
executeHelp(allAfterFirstToken);
- return true;
+ DBUG_RETURN(true);
+ }
+ else if (strcmp(firstToken, "CONNECT") == 0) {
+ executeConnect(allAfterFirstToken);
+ DBUG_RETURN(true);
}
- else if (strcmp(firstToken, "SHOW") == 0) {
+
+ if (!connect())
+ DBUG_RETURN(true);
+
+ if (strcmp(firstToken, "SHOW") == 0) {
executeShow(allAfterFirstToken);
- return true;
+ DBUG_RETURN(true);
}
else if (strcmp(firstToken, "SHUTDOWN") == 0) {
executeShutdown(allAfterFirstToken);
- return true;
+ DBUG_RETURN(true);
}
else if (strcmp(firstToken, "CLUSTERLOG") == 0){
executeClusterLog(allAfterFirstToken);
- return true;
+ DBUG_RETURN(true);
}
else if(strcmp(firstToken, "START") == 0 &&
allAfterFirstToken != NULL &&
strncmp(allAfterFirstToken, "BACKUP", sizeof("BACKUP") - 1) == 0){
executeStartBackup(allAfterFirstToken);
- return true;
+ DBUG_RETURN(true);
}
else if(strcmp(firstToken, "ABORT") == 0 &&
allAfterFirstToken != NULL &&
strncmp(allAfterFirstToken, "BACKUP", sizeof("BACKUP") - 1) == 0){
executeAbortBackup(allAfterFirstToken);
- return true;
+ DBUG_RETURN(true);
}
else if (strcmp(firstToken, "PURGE") == 0) {
executePurge(allAfterFirstToken);
- return true;
+ DBUG_RETURN(true);
}
#ifdef HAVE_GLOBAL_REPLICATION
else if(strcmp(firstToken, "REPLICATION") == 0 ||
strcmp(firstToken, "REP") == 0) {
executeRep(allAfterFirstToken);
- return true;
+ DBUG_RETURN(true);
}
#endif // HAVE_GLOBAL_REPLICATION
else if(strcmp(firstToken, "ENTER") == 0 &&
@@ -526,14 +549,14 @@ CommandInterpreter::execute(const char *_line, int _try_reconnect)
strncmp(allAfterFirstToken, "SINGLE USER MODE ",
sizeof("SINGLE USER MODE") - 1) == 0){
executeEnterSingleUser(allAfterFirstToken);
- return true;
+ DBUG_RETURN(true);
}
else if(strcmp(firstToken, "EXIT") == 0 &&
allAfterFirstToken != NULL &&
strncmp(allAfterFirstToken, "SINGLE USER MODE ",
sizeof("SINGLE USER MODE") - 1) == 0){
executeExitSingleUser(allAfterFirstToken);
- return true;
+ DBUG_RETURN(true);
}
else if (strcmp(firstToken, "ALL") == 0) {
analyseAfterFirstToken(-1, allAfterFirstToken);
@@ -542,7 +565,7 @@ CommandInterpreter::execute(const char *_line, int _try_reconnect)
strcmp(firstToken, "EXIT") == 0 ||
strcmp(firstToken, "BYE") == 0) &&
allAfterFirstToken == NULL){
- return false;
+ DBUG_RETURN(false);
} else {
/**
* First token should be a digit, node ID
@@ -552,18 +575,18 @@ CommandInterpreter::execute(const char *_line, int _try_reconnect)
if (! convert(firstToken, nodeId)) {
ndbout << "Invalid command: " << line << endl;
ndbout << "Type HELP for help." << endl << endl;
- return true;
+ DBUG_RETURN(true);
}
if (nodeId < 0) {
ndbout << "Invalid node ID: " << firstToken << "." << endl;
- return true;
+ DBUG_RETURN(true);
}
analyseAfterFirstToken(nodeId, allAfterFirstToken);
}
- return true;
+ DBUG_RETURN(true);
}
@@ -692,7 +715,6 @@ CommandInterpreter::executeForAll(const char * cmd, ExecuteFunction fun,
ndbout_c("Trying to start all nodes of system.");
ndbout_c("Use ALL STATUS to see the system start-up phases.");
} else {
- connect();
struct ndb_mgm_cluster_state *cl= ndb_mgm_get_status(m_mgmsrv);
if(cl == 0){
ndbout_c("Unable get status from management server");
@@ -826,8 +848,6 @@ CommandInterpreter::executeHelp(char* parameters)
void
CommandInterpreter::executeShutdown(char* parameters)
{
- connect();
-
ndb_mgm_cluster_state *state = ndb_mgm_get_status(m_mgmsrv);
if(state == NULL) {
ndbout_c("Could not get status");
@@ -979,7 +999,6 @@ CommandInterpreter::executePurge(char* parameters)
int i;
char *str;
- connect();
if (ndb_mgm_purge_stale_sessions(m_mgmsrv, &str)) {
ndbout_c("Command failed");
@@ -999,7 +1018,6 @@ void
CommandInterpreter::executeShow(char* parameters)
{
int i;
- connect();
if (emptyString(parameters)) {
ndbout << "Cluster Configuration" << endl
<< "---------------------" << endl;
@@ -1087,6 +1105,12 @@ CommandInterpreter::executeShow(char* parameters)
}
}
+void
+CommandInterpreter::executeConnect(char* parameters)
+{
+ disconnect();
+ connect();
+}
//*****************************************************************************
//*****************************************************************************
@@ -1094,7 +1118,6 @@ void
CommandInterpreter::executeClusterLog(char* parameters)
{
int i;
- connect();
if (parameters != 0 && strlen(parameters) != 0) {
enum ndb_mgm_clusterlog_level severity = NDB_MGM_CLUSTERLOG_ALL;
int isOk = true;
@@ -1240,7 +1263,6 @@ CommandInterpreter::executeClusterLog(char* parameters)
void
CommandInterpreter::executeStop(int processId, const char *, bool all)
{
- connect();
int result = 0;
if(all) {
result = ndb_mgm_stop(m_mgmsrv, 0, 0);
@@ -1262,7 +1284,6 @@ CommandInterpreter::executeStop(int processId, const char *, bool all)
void
CommandInterpreter::executeEnterSingleUser(char* parameters)
{
- connect();
strtok(parameters, " ");
struct ndb_mgm_reply reply;
char* id = strtok(NULL, " ");
@@ -1289,7 +1310,6 @@ CommandInterpreter::executeEnterSingleUser(char* parameters)
void
CommandInterpreter::executeExitSingleUser(char* parameters)
{
- connect();
int result = ndb_mgm_exit_single_user(m_mgmsrv, 0);
if (result != 0) {
ndbout_c("Exiting single user mode failed.");
@@ -1304,7 +1324,6 @@ void
CommandInterpreter::executeStart(int processId, const char* parameters,
bool all)
{
- connect();
int result;
if(all) {
result = ndb_mgm_start(m_mgmsrv, 0, 0);
@@ -1328,7 +1347,6 @@ void
CommandInterpreter::executeRestart(int processId, const char* parameters,
bool all)
{
- connect();
int result;
int nostart = 0;
int initialstart = 0;
@@ -1378,7 +1396,6 @@ CommandInterpreter::executeDumpState(int processId, const char* parameters,
ndbout << "Expected argument" << endl;
return;
}
- connect();
Uint32 no = 0;
int pars[25];
@@ -1418,7 +1435,6 @@ CommandInterpreter::executeStatus(int processId,
return;
}
- connect();
ndb_mgm_node_status status;
Uint32 startPhase, version;
bool system;
@@ -1469,7 +1485,6 @@ void
CommandInterpreter::executeLogLevel(int processId, const char* parameters,
bool all)
{
- connect();
(void) all;
BaseString tmp(parameters);
@@ -1525,7 +1540,6 @@ void CommandInterpreter::executeError(int processId,
return;
}
- connect();
// Copy parameters since strtok will modify it
char* newpar = my_strdup(parameters,MYF(MY_WME));
My_auto_ptr<char> ap1(newpar);
@@ -1589,7 +1603,6 @@ void
CommandInterpreter::executeLog(int processId,
const char* parameters, bool all)
{
- connect();
struct ndb_mgm_reply reply;
Vector<const char *> blocks;
if (! parseBlockSpecification(parameters, blocks)) {
@@ -1657,7 +1670,6 @@ CommandInterpreter::executeTestOn(int processId,
ndbout << "No parameters expected to this command." << endl;
return;
}
- connect();
struct ndb_mgm_reply reply;
int result = ndb_mgm_start_signallog(m_mgmsrv, processId, &reply);
if (result != 0) {
@@ -1676,7 +1688,6 @@ CommandInterpreter::executeTestOff(int processId,
ndbout << "No parameters expected to this command." << endl;
return;
}
- connect();
struct ndb_mgm_reply reply;
int result = ndb_mgm_stop_signallog(m_mgmsrv, processId, &reply);
if (result != 0) {
@@ -1798,8 +1809,6 @@ CommandInterpreter::executeEventReporting(int processId,
ndbout << "Expected argument" << endl;
return;
}
- connect();
-
BaseString tmp(parameters);
Vector<BaseString> spec;
tmp.split(spec, "=");
@@ -1850,7 +1859,6 @@ CommandInterpreter::executeEventReporting(int processId,
void
CommandInterpreter::executeStartBackup(char* /*parameters*/)
{
- connect();
struct ndb_mgm_reply reply;
unsigned int backupId;
@@ -1897,8 +1905,6 @@ CommandInterpreter::executeStartBackup(char* /*parameters*/)
void
CommandInterpreter::executeAbortBackup(char* parameters)
{
- connect();
-
strtok(parameters, " ");
struct ndb_mgm_reply reply;
char* id = strtok(NULL, "\0");
@@ -1952,7 +1958,6 @@ CommandInterpreter::executeRep(char* parameters)
return;
}
- connect();
char * line = my_strdup(parameters,MYF(MY_WME));
My_auto_ptr<char> ap1((char*)line);
char * firstToken = strtok(line, " ");
diff --git a/ndb/src/mgmclient/main.cpp b/ndb/src/mgmclient/main.cpp
index f32cc683296..08d5d60cfab 100644
--- a/ndb/src/mgmclient/main.cpp
+++ b/ndb/src/mgmclient/main.cpp
@@ -56,17 +56,18 @@ handler(int sig){
}
}
-
+static const char default_prompt[]= "ndb_mgm> ";
static unsigned _try_reconnect;
static char *opt_connect_str= 0;
+static const char *prompt= default_prompt;
static struct my_option my_long_options[] =
{
NDB_STD_OPTS("ndb_mgm"),
{ "try-reconnect", 't',
- "Specify number of retries for connecting to ndb_mgmd, default infinite",
+ "Specify number of tries for connecting to ndb_mgmd (0 = infinite)",
(gptr*) &_try_reconnect, (gptr*) &_try_reconnect, 0,
- GET_UINT, REQUIRED_ARG, 0, 0, 0, 0, 0, 0 },
+ GET_UINT, REQUIRED_ARG, 3, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}
};
static void short_usage_sub(void)
@@ -116,13 +117,13 @@ read_and_execute(int _try_reconnect)
}
#ifdef HAVE_READLINE
/* Get a line from the user. */
- line_read = readline ("ndb_mgm> ");
+ line_read = readline (prompt);
/* If the line has any text in it, save it on the history. */
if (line_read && *line_read)
add_history (line_read);
#else
static char linebuffer[254];
- fputs("ndb_mgm> ", stdout);
+ fputs(prompt, stdout);
linebuffer[sizeof(linebuffer)-1]=0;
line_read = fgets(linebuffer, sizeof(linebuffer)-1, stdin);
if (line_read == linebuffer) {
@@ -155,12 +156,16 @@ int main(int argc, char** argv){
opt_connect_str= buf;
}
+ if (!isatty(0))
+ {
+ prompt= 0;
+ }
+
ndbout << "-- NDB Cluster -- Management Client --" << endl;
- printf("Connecting to Management Server: %s\n", opt_connect_str ? opt_connect_str : "default");
signal(SIGPIPE, handler);
- com = new Ndb_mgmclient(opt_connect_str);
+ com = new Ndb_mgmclient(opt_connect_str,1);
while(read_and_execute(_try_reconnect));
delete com;
diff --git a/ndb/src/mgmclient/ndb_mgmclient.hpp b/ndb/src/mgmclient/ndb_mgmclient.hpp
index f6bcebc3896..ea592dfdf4e 100644
--- a/ndb/src/mgmclient/ndb_mgmclient.hpp
+++ b/ndb/src/mgmclient/ndb_mgmclient.hpp
@@ -21,7 +21,7 @@ class CommandInterpreter;
class Ndb_mgmclient
{
public:
- Ndb_mgmclient(const char*);
+ Ndb_mgmclient(const char*,int verbose=0);
~Ndb_mgmclient();
int execute(const char *_line, int _try_reconnect=-1);
int execute(int argc, char** argv, int _try_reconnect=-1);