added check connection mgmapi method

added ndb_mgm_check_connection when error is printed
parent d209371a
...@@ -746,6 +746,7 @@ extern "C" { ...@@ -746,6 +746,7 @@ extern "C" {
int ndb_mgm_get_string_parameter(const ndb_mgm_configuration_iterator*, int ndb_mgm_get_string_parameter(const ndb_mgm_configuration_iterator*,
int param, const char ** value); int param, const char ** value);
int ndb_mgm_purge_stale_sessions(NdbMgmHandle handle, char **); int ndb_mgm_purge_stale_sessions(NdbMgmHandle handle, char **);
int ndb_mgm_check_connection(NdbMgmHandle handle);
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
......
...@@ -1934,4 +1934,38 @@ ndb_mgm_purge_stale_sessions(NdbMgmHandle handle, char **purged){ ...@@ -1934,4 +1934,38 @@ ndb_mgm_purge_stale_sessions(NdbMgmHandle handle, char **purged){
return res; return res;
} }
extern "C"
int
ndb_mgm_check_connection(NdbMgmHandle handle){
CHECK_HANDLE(handle, 0);
CHECK_CONNECTED(handle, 0);
SocketOutputStream out(handle->socket);
SocketInputStream in(handle->socket, handle->read_timeout);
char buf[32];
if (out.println("check connection"))
goto ndb_mgm_check_connection_error;
if (out.println(""))
goto ndb_mgm_check_connection_error;
in.gets(buf, sizeof(buf));
if(strcmp("check connection reply\n", buf))
goto ndb_mgm_check_connection_error;
in.gets(buf, sizeof(buf));
if(strcmp("result: Ok\n", buf))
goto ndb_mgm_check_connection_error;
in.gets(buf, sizeof(buf));
if(strcmp("\n", buf))
goto ndb_mgm_check_connection_error;
return 0;
ndb_mgm_check_connection_error:
ndb_mgm_disconnect(handle);
return -1;
}
template class Vector<const ParserRow<ParserDummy>*>; template class Vector<const ParserRow<ParserDummy>*>;
...@@ -429,6 +429,8 @@ emptyString(const char* s) ...@@ -429,6 +429,8 @@ emptyString(const char* s)
void void
CommandInterpreter::printError() CommandInterpreter::printError()
{ {
if (ndb_mgm_check_connection(m_mgmsrv))
connected= false;
ndbout_c("* %5d: %s", ndbout_c("* %5d: %s",
ndb_mgm_get_latest_error(m_mgmsrv), ndb_mgm_get_latest_error(m_mgmsrv),
ndb_mgm_get_latest_error_msg(m_mgmsrv)); ndb_mgm_get_latest_error_msg(m_mgmsrv));
...@@ -1030,9 +1032,6 @@ CommandInterpreter::executeShow(char* parameters) ...@@ -1030,9 +1032,6 @@ CommandInterpreter::executeShow(char* parameters)
{ {
int i; int i;
if (emptyString(parameters)) { if (emptyString(parameters)) {
ndbout << "Cluster Configuration" << endl
<< "---------------------" << endl;
ndb_mgm_cluster_state *state = ndb_mgm_get_status(m_mgmsrv); ndb_mgm_cluster_state *state = ndb_mgm_get_status(m_mgmsrv);
if(state == NULL) { if(state == NULL) {
ndbout_c("Could not get status"); ndbout_c("Could not get status");
...@@ -1092,6 +1091,8 @@ CommandInterpreter::executeShow(char* parameters) ...@@ -1092,6 +1091,8 @@ CommandInterpreter::executeShow(char* parameters)
} }
} }
ndbout << "Cluster Configuration" << endl
<< "---------------------" << endl;
print_nodes(state, it, "ndbd", ndb_nodes, NDB_MGM_NODE_TYPE_NDB, master_id); print_nodes(state, it, "ndbd", ndb_nodes, NDB_MGM_NODE_TYPE_NDB, master_id);
print_nodes(state, it, "ndb_mgmd", mgm_nodes, NDB_MGM_NODE_TYPE_MGM, 0); print_nodes(state, it, "ndb_mgmd", mgm_nodes, NDB_MGM_NODE_TYPE_MGM, 0);
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);
......
...@@ -244,6 +244,8 @@ ParserRow<MgmApiSession> commands[] = { ...@@ -244,6 +244,8 @@ ParserRow<MgmApiSession> commands[] = {
MGM_CMD("purge stale sessions", &MgmApiSession::purge_stale_sessions, ""), MGM_CMD("purge stale sessions", &MgmApiSession::purge_stale_sessions, ""),
MGM_CMD("check connection", &MgmApiSession::check_connection, ""),
MGM_END() MGM_END()
}; };
...@@ -1454,6 +1456,15 @@ MgmApiSession::purge_stale_sessions(Parser_t::Context &ctx, ...@@ -1454,6 +1456,15 @@ MgmApiSession::purge_stale_sessions(Parser_t::Context &ctx,
m_output->println(""); m_output->println("");
} }
void
MgmApiSession::check_connection(Parser_t::Context &ctx,
const class Properties &args)
{
m_output->println("check connection reply");
m_output->println("result: Ok");
m_output->println("");
}
template class MutexVector<int>; template class MutexVector<int>;
template class Vector<ParserRow<MgmApiSession> const*>; template class Vector<ParserRow<MgmApiSession> const*>;
template class Vector<unsigned short>; template class Vector<unsigned short>;
...@@ -91,6 +91,7 @@ public: ...@@ -91,6 +91,7 @@ public:
void listen_event(Parser_t::Context &ctx, const class Properties &args); void listen_event(Parser_t::Context &ctx, const class Properties &args);
void purge_stale_sessions(Parser_t::Context &ctx, const class Properties &args); void purge_stale_sessions(Parser_t::Context &ctx, const class Properties &args);
void check_connection(Parser_t::Context &ctx, const class Properties &args);
void repCommand(Parser_t::Context &ctx, const class Properties &args); void repCommand(Parser_t::Context &ctx, const class Properties &args);
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment