summaryrefslogtreecommitdiff
path: root/ndb/src
diff options
context:
space:
mode:
authorunknown <tulin@build.mysql.com>2004-09-09 16:22:47 +0200
committerunknown <tulin@build.mysql.com>2004-09-09 16:22:47 +0200
commit647d895acc1eae944e058dea715333962afaf4d0 (patch)
tree2710298e120fdcf9e65c08c39273be3c13fbc270 /ndb/src
parent2aa69734505bfaa79fea79fe071ae09a8c14cc96 (diff)
parent10ce6d0b2698544fb4e79facd3d161c66c6d8db8 (diff)
downloadmariadb-git-647d895acc1eae944e058dea715333962afaf4d0.tar.gz
Merge tulin@bk-internal.mysql.com:/home/bk/mysql-4.1-ndb
into build.mysql.com:/users/tulin/mysql-4.1-ndb-merge ndb/include/mgmapi/mgmapi.h: Auto merged ndb/src/mgmapi/mgmapi.cpp: Auto merged ndb/src/mgmsrv/MgmtSrvr.cpp: Auto merged ndb/src/mgmsrv/MgmtSrvr.hpp: Auto merged ndb/src/mgmsrv/Services.cpp: Auto merged
Diffstat (limited to 'ndb/src')
-rw-r--r--ndb/src/mgmapi/mgmapi.cpp24
-rw-r--r--ndb/src/mgmclient/CommandInterpreter.cpp184
-rw-r--r--ndb/src/mgmsrv/MgmtSrvr.cpp9
-rw-r--r--ndb/src/mgmsrv/MgmtSrvr.hpp2
-rw-r--r--ndb/src/mgmsrv/Services.cpp1
-rw-r--r--ndb/src/ndbapi/NdbDictionaryImpl.cpp3
-rw-r--r--ndb/src/ndbapi/Ndbinit.cpp20
-rw-r--r--ndb/src/ndbapi/TransporterFacade.cpp18
-rw-r--r--ndb/src/ndbapi/TransporterFacade.hpp1
-rw-r--r--ndb/src/ndbapi/ndb_cluster_connection.cpp1
10 files changed, 144 insertions, 119 deletions
diff --git a/ndb/src/mgmapi/mgmapi.cpp b/ndb/src/mgmapi/mgmapi.cpp
index 498b1973339..08b83a8d750 100644
--- a/ndb/src/mgmapi/mgmapi.cpp
+++ b/ndb/src/mgmapi/mgmapi.cpp
@@ -524,6 +524,9 @@ status_ackumulate(struct ndb_mgm_node_state * state,
state->version = atoi(value);
} else if(strcmp("connect_count", field) == 0){
state->connect_count = atoi(value);
+ } else if(strcmp("address", field) == 0){
+ strncpy(state->connect_address, value, sizeof(state->connect_address));
+ state->connect_address[sizeof(state->connect_address)-1]= 0;
} else {
ndbout_c("Unknown field: %s", field);
}
@@ -590,22 +593,27 @@ ndb_mgm_get_status(NdbMgmHandle handle)
ndb_mgm_cluster_state *state = (ndb_mgm_cluster_state*)
malloc(sizeof(ndb_mgm_cluster_state)+
- noOfNodes*sizeof(ndb_mgm_node_state));
+ noOfNodes*(sizeof(ndb_mgm_node_state)+sizeof("000.000.000.000#")));
- state->no_of_nodes = noOfNodes;
+ state->hostname= 0;
+ state->no_of_nodes= noOfNodes;
ndb_mgm_node_state * ptr = &state->node_states[0];
int nodeId = 0;
- int i = -1; ptr--;
+ int i;
+ for (i= 0; i < noOfNodes; i++) {
+ state->node_states[i].connect_address[0]= 0;
+ }
+ i = -1; ptr--;
for(; i<noOfNodes; ){
in.gets(buf, sizeof(buf));
tmp.assign(buf);
-
+
if(tmp.trim() == ""){
break;
}
Vector<BaseString> split;
- tmp.split(split, ":.");
+ tmp.split(split, ":.", 4);
if(split.size() != 4)
break;
@@ -1527,8 +1535,10 @@ extern "C"
void
ndb_mgm_destroy_configuration(struct ndb_mgm_configuration *cfg)
{
- if (cfg)
- delete (ConfigValues *)cfg;
+ if (cfg) {
+ ((ConfigValues *)cfg)->~ConfigValues();
+ free((void *)cfg);
+ }
}
extern "C"
diff --git a/ndb/src/mgmclient/CommandInterpreter.cpp b/ndb/src/mgmclient/CommandInterpreter.cpp
index 5496f18bd2a..f07fe44dd2d 100644
--- a/ndb/src/mgmclient/CommandInterpreter.cpp
+++ b/ndb/src/mgmclient/CommandInterpreter.cpp
@@ -19,6 +19,7 @@
#include <mgmapi.h>
#include <mgmapi_debug.h>
#include <version.h>
+#include <NdbAutoPtr.hpp>
#include <NdbOut.hpp>
#include <NdbSleep.h>
#include <EventLogger.hpp>
@@ -692,6 +693,79 @@ CommandInterpreter::executeShutdown(char* parameters)
* SHOW
*****************************************************************************/
+
+static
+const char *status_string(ndb_mgm_node_status status)
+{
+ switch(status){
+ case NDB_MGM_NODE_STATUS_NO_CONTACT:
+ return "not connected";
+ case NDB_MGM_NODE_STATUS_NOT_STARTED:
+ return "not started";
+ case NDB_MGM_NODE_STATUS_STARTING:
+ return "starting";
+ case NDB_MGM_NODE_STATUS_STARTED:
+ return "started";
+ case NDB_MGM_NODE_STATUS_SHUTTING_DOWN:
+ return "shutting down";
+ case NDB_MGM_NODE_STATUS_RESTARTING:
+ return "restarting";
+ case NDB_MGM_NODE_STATUS_SINGLEUSER:
+ return "single user mode";
+ default:
+ return "unknown state";
+ }
+}
+
+static void
+print_nodes(ndb_mgm_cluster_state *state, ndb_mgm_configuration_iterator *it,
+ const char *proc_name, int no_proc, ndb_mgm_node_type type, int master_id)
+{
+ int i;
+ ndbout << "[" << proc_name
+ << "(" << ndb_mgm_get_node_type_string(type) << ")]\t" << no_proc << " node(s)" << endl;
+ for(i=0; i < state->no_of_nodes; i++) {
+ struct ndb_mgm_node_state *node_state= &(state->node_states[i]);
+ if(node_state->node_type == type) {
+ int node_id= node_state->node_id;
+ ndbout << "id=" << node_id;
+ if(node_state->version != 0) {
+ const char *hostname= node_state->connect_address;
+ if (hostname == 0 || strlen(hostname) == 0 || strcmp(hostname,"0.0.0.0") == 0)
+ ndbout << " ";
+ else
+ ndbout << "\t@" << hostname;
+ ndbout << " (Version: "
+ << getMajor(node_state->version) << "."
+ << getMinor(node_state->version) << "."
+ << getBuild(node_state->version);
+ if (type == NDB_MGM_NODE_TYPE_NDB) {
+ if (node_state->node_status != NDB_MGM_NODE_STATUS_STARTED) {
+ ndbout << ", " << status_string(node_state->node_status);
+ }
+ if (node_state->node_group >= 0) {
+ ndbout << ", Nodegroup: " << node_state->node_group;
+ if (node_state->dynamic_id == master_id)
+ ndbout << ", Master";
+ }
+ }
+ ndbout << ")" << endl;
+ } else {
+ if(ndb_mgm_find(it, CFG_NODE_ID, node_id) != 0){
+ ndbout_c("Unable to find node with id: %d", node_id);
+ return;
+ }
+ const char *config_hostname= 0;
+ ndb_mgm_get_string_parameter(it, CFG_NODE_HOST, &config_hostname);
+ if (config_hostname == 0 || config_hostname[0] == 0)
+ config_hostname= "any host";
+ ndbout << " (not connected, accepting connect from " << config_hostname << ")" << endl;
+ }
+ }
+ }
+ ndbout << endl;
+}
+
void
CommandInterpreter::executeShow(char* parameters)
{
@@ -708,6 +782,22 @@ CommandInterpreter::executeShow(char* parameters)
return;
}
+ ndb_mgm_configuration * conf = ndb_mgm_get_configuration(m_mgmsrv,0);
+ if(conf == 0){
+ ndbout_c("Could not get configuration");
+ printError();
+ return;
+ }
+
+ ndb_mgm_configuration_iterator * it;
+ it = ndb_mgm_create_configuration_iterator((struct ndb_mgm_configuration *)conf, CFG_SECTION_NODE);
+
+ if(it == 0){
+ ndbout_c("Unable to create config iterator");
+ return;
+ }
+ NdbAutoPtr<ndb_mgm_configuration_iterator> ptr(it);
+
int
master_id= 0,
ndb_nodes= 0,
@@ -741,73 +831,9 @@ CommandInterpreter::executeShow(char* parameters)
}
}
- ndbout << ndb_nodes
- << " [ndbd] node(s)"
- << endl;
-
- for(i=0; i < state->no_of_nodes; i++) {
- if(state->node_states[i].node_type == NDB_MGM_NODE_TYPE_NDB) {
- ndbout << "[ndbd]\t\tid=" << state->node_states[i].node_id;
- if(state->node_states[i].version != 0) {
- ndbout << " (Version: "
- << getMajor(state->node_states[i].version) << "."
- << getMinor(state->node_states[i].version) << "."
- << getBuild(state->node_states[i].version) << ","
- << " Nodegroup: " << state->node_states[i].node_group;
- if (state->node_states[i].dynamic_id == master_id)
- ndbout << ", Master";
- ndbout << ")" << endl;
- } else
- {
- ndbout << " (not connected) " << endl;
- }
-
- }
- }
- ndbout << endl;
-
- ndbout << mgm_nodes
- << " [ndb_mgmd] node(s)"
- << endl;
-
- for(i=0; i < state->no_of_nodes; i++) {
- if(state->node_states[i].node_type == NDB_MGM_NODE_TYPE_MGM) {
- ndbout << "[ndb_mgmd]\tid=" << state->node_states[i].node_id;
- if(state->node_states[i].version != 0) {
- ndbout << " (Version: "
- << getMajor(state->node_states[i].version) << "."
- << getMinor(state->node_states[i].version) << "."
- << getBuild(state->node_states[i].version) << ")" << endl;
-
- } else
- {
- ndbout << " (no version information available) " << endl;
- }
- }
- }
- ndbout << endl;
-
- ndbout << api_nodes
- << " [mysqld] node(s)"
- << endl;
-
- for(i=0; i < state->no_of_nodes; i++) {
- if(state->node_states[i].node_type == NDB_MGM_NODE_TYPE_API) {
- ndbout << "[mysqld]\tid=" << state->node_states[i].node_id;
- if(state->node_states[i].version != 0) {
- ndbout << " (Version: "
- << getMajor(state->node_states[i].version) << "."
- << getMinor(state->node_states[i].version) << "."
- << getBuild(state->node_states[i].version) << ")" << endl;
-
- } else
- {
- ndbout << " (not connected) " << endl;
- }
- }
- }
- ndbout << endl;
-
+ 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, "mysqld", api_nodes, NDB_MGM_NODE_TYPE_API, 0);
// ndbout << helpTextShow;
return;
} else if (strcmp(parameters, "PROPERTIES") == 0 ||
@@ -1184,33 +1210,15 @@ CommandInterpreter::executeStatus(int processId,
startPhase = cl->node_states[i].start_phase;
version = cl->node_states[i].version;
- ndbout << "Node " << processId << ": ";
+ ndbout << "Node " << processId << ": " << status_string(status);
switch(status){
- case NDB_MGM_NODE_STATUS_NO_CONTACT:
- ndbout << "No contact" << endl;
- break;
- case NDB_MGM_NODE_STATUS_NOT_STARTED:
- ndbout << "Not started" ;
- break;
case NDB_MGM_NODE_STATUS_STARTING:
- ndbout << "Starting (Start phase " << startPhase << ")" ;
- break;
- case NDB_MGM_NODE_STATUS_STARTED:
- ndbout << "Started" ;
+ ndbout << " (Phase " << startPhase << ")" ;
break;
case NDB_MGM_NODE_STATUS_SHUTTING_DOWN:
- ndbout << "Shutting down " << (system == false ? "node" : "system")
- << " (Phase " << startPhase << ")"
- ;
- break;
- case NDB_MGM_NODE_STATUS_RESTARTING:
- ndbout << "Restarting" ;
- break;
- case NDB_MGM_NODE_STATUS_SINGLEUSER:
- ndbout << "Single user mode" ;
+ ndbout << " (Phase " << startPhase << ")";
break;
default:
- ndbout << "Unknown state" ;
break;
}
if(status != NDB_MGM_NODE_STATUS_NO_CONTACT)
diff --git a/ndb/src/mgmsrv/MgmtSrvr.cpp b/ndb/src/mgmsrv/MgmtSrvr.cpp
index 3ba93f5f229..db4a1685b12 100644
--- a/ndb/src/mgmsrv/MgmtSrvr.cpp
+++ b/ndb/src/mgmsrv/MgmtSrvr.cpp
@@ -543,9 +543,10 @@ MgmtSrvr::MgmtSrvr(NodeId nodeId,
/**
* Fill the nodeTypes array
*/
- for(Uint32 i = 0; i<MAX_NODES; i++)
+ for(Uint32 i = 0; i<MAX_NODES; i++) {
nodeTypes[i] = (enum ndb_mgm_node_type)-1;
-
+ m_connect_address[i].s_addr= 0;
+ }
{
ndb_mgm_configuration_iterator * iter = ndb_mgm_create_configuration_iterator
(config->m_configValues, CFG_SECTION_NODE);
@@ -2403,6 +2404,10 @@ MgmtSrvr::alloc_node_id(NodeId * nodeId,
}
}
*nodeId= tmp;
+ if (client_addr)
+ m_connect_address[tmp]= ((struct sockaddr_in *)client_addr)->sin_addr;
+ else
+ Ndb_getInAddr(&(m_connect_address[tmp]), "localhost");
m_reserved_nodes.set(tmp);
#if 0
ndbout << "MgmtSrvr::getFreeNodeId found type=" << type
diff --git a/ndb/src/mgmsrv/MgmtSrvr.hpp b/ndb/src/mgmsrv/MgmtSrvr.hpp
index 2ed0d4d4874..d7f9f7a1af3 100644
--- a/ndb/src/mgmsrv/MgmtSrvr.hpp
+++ b/ndb/src/mgmsrv/MgmtSrvr.hpp
@@ -521,6 +521,7 @@ public:
int setDbParameter(int node, int parameter, const char * value, BaseString&);
+ const char *get_connect_address(Uint32 node_id) { return inet_ntoa(m_connect_address[node_id]); }
//**************************************************************************
private:
//**************************************************************************
@@ -560,6 +561,7 @@ private:
NodeBitmask m_reserved_nodes;
Allocated_resources m_allocated_resources;
+ struct in_addr m_connect_address[MAX_NODES];
int _setVarReqResult; // The result of the SET_VAR_REQ response
Statistics _statistics; // handleSTATISTICS_CONF store the result here,
diff --git a/ndb/src/mgmsrv/Services.cpp b/ndb/src/mgmsrv/Services.cpp
index 26120e1b82b..c529e277e0e 100644
--- a/ndb/src/mgmsrv/Services.cpp
+++ b/ndb/src/mgmsrv/Services.cpp
@@ -946,6 +946,7 @@ printNodeStatus(OutputStream *output,
output->println("node.%d.dynamic_id: %d", nodeId, dynamicId);
output->println("node.%d.node_group: %d", nodeId, nodeGroup);
output->println("node.%d.connect_count: %d", nodeId, connectCount);
+ output->println("node.%d.address: %s", nodeId, mgmsrv.get_connect_address(nodeId));
}
}
diff --git a/ndb/src/ndbapi/NdbDictionaryImpl.cpp b/ndb/src/ndbapi/NdbDictionaryImpl.cpp
index 566ebdfb141..d7fccb3bd37 100644
--- a/ndb/src/ndbapi/NdbDictionaryImpl.cpp
+++ b/ndb/src/ndbapi/NdbDictionaryImpl.cpp
@@ -1773,7 +1773,7 @@ NdbDictionaryImpl::removeCachedObject(NdbTableImpl & impl)
*/
NdbIndexImpl*
NdbDictionaryImpl::getIndexImpl(const char * externalName,
- const char * internalName)
+ const char * internalName)
{
NdbTableImpl* tab = getTableImpl(internalName);
if(tab == 0){
@@ -1799,6 +1799,7 @@ NdbDictionaryImpl::getIndexImpl(const char * externalName,
NdbIndexImpl* idx;
if(NdbDictInterface::create_index_obj_from_table(&idx, tab, prim) == 0){
idx->m_table = tab;
+ idx->m_externalName.assign(externalName);
idx->m_internalName.assign(internalName);
// TODO Assign idx to tab->m_index
// Don't do it right now since assign can't asign a table with index
diff --git a/ndb/src/ndbapi/Ndbinit.cpp b/ndb/src/ndbapi/Ndbinit.cpp
index 9ec500b2a46..2a00bc67c21 100644
--- a/ndb/src/ndbapi/Ndbinit.cpp
+++ b/ndb/src/ndbapi/Ndbinit.cpp
@@ -20,8 +20,6 @@
#include "NdbApiSignal.hpp"
#include "NdbImpl.hpp"
-//#include "NdbSchemaOp.hpp"
-//#include "NdbSchemaCon.hpp"
#include "NdbOperation.hpp"
#include "NdbConnection.hpp"
#include "NdbRecAttr.hpp"
@@ -59,13 +57,16 @@ Parameters: aDataBase : Name of the database.
Remark: Connect to the database.
***************************************************************************/
Ndb::Ndb( const char* aDataBase , const char* aSchema) {
+ NdbMutex_Lock(&createNdbMutex);
+ if (theNoOfNdbObjects < 0)
+ abort(); // old and new Ndb constructor used mixed
+ theNoOfNdbObjects++;
if (global_ndb_cluster_connection == 0) {
- if (theNoOfNdbObjects > 0)
- abort(); // old and new Ndb constructor used mixed
my_init();
global_ndb_cluster_connection= new Ndb_cluster_connection(ndbConnectString);
global_ndb_cluster_connection->connect();
}
+ NdbMutex_Unlock(&createNdbMutex);
setup(global_ndb_cluster_connection, aDataBase, aSchema);
}
@@ -75,6 +76,7 @@ Ndb::Ndb( Ndb_cluster_connection *ndb_cluster_connection,
if (global_ndb_cluster_connection != 0 &&
global_ndb_cluster_connection != ndb_cluster_connection)
abort(); // old and new Ndb constructor used mixed
+ theNoOfNdbObjects= -1;
setup(ndb_cluster_connection, aDataBase, aSchema);
}
@@ -168,9 +170,6 @@ void Ndb::setup(Ndb_cluster_connection *ndb_cluster_connection,
theWaiter.m_mutex = TransporterFacade::instance()->theMutexPtr;
- // For keeping track of how many Ndb objects that exists.
- theNoOfNdbObjects += 1;
-
// Signal that the constructor has finished OK
if (theInitState == NotConstructed)
theInitState = NotInitialised;
@@ -229,10 +228,9 @@ Ndb::~Ndb()
NdbMutex_Lock(&createNdbMutex);
- theNoOfNdbObjects -= 1;
- if(theNoOfNdbObjects == 0){
- TransporterFacade::stop_instance();
- if (global_ndb_cluster_connection != 0) {
+ if (global_ndb_cluster_connection != 0) {
+ theNoOfNdbObjects--;
+ if(theNoOfNdbObjects == 0){
delete global_ndb_cluster_connection;
global_ndb_cluster_connection= 0;
}
diff --git a/ndb/src/ndbapi/TransporterFacade.cpp b/ndb/src/ndbapi/TransporterFacade.cpp
index 4a7ad8a6872..f0b0bfe2de4 100644
--- a/ndb/src/ndbapi/TransporterFacade.cpp
+++ b/ndb/src/ndbapi/TransporterFacade.cpp
@@ -413,20 +413,13 @@ runSendRequest_C(void * me)
void TransporterFacade::threadMainSend(void)
{
- SocketServer socket_server;
-
theTransporterRegistry->startSending();
- if (!theTransporterRegistry->start_service(socket_server)){
- ndbout_c("Unable to start theTransporterRegistry->start_service");
- exit(0);
- }
-
if (!theTransporterRegistry->start_clients()){
ndbout_c("Unable to start theTransporterRegistry->start_clients");
exit(0);
}
- socket_server.startServer();
+ m_socket_server.startServer();
while(!theStopReceive) {
NdbSleep_MilliSleep(10);
@@ -439,8 +432,8 @@ void TransporterFacade::threadMainSend(void)
}
theTransporterRegistry->stopSending();
- socket_server.stopServer();
- socket_server.stopSessions();
+ m_socket_server.stopServer();
+ m_socket_server.stopSessions();
theTransporterRegistry->stop_clients();
}
@@ -558,6 +551,11 @@ TransporterFacade::init(Uint32 nodeId, const ndb_mgm_configuration* props)
}
#endif
+ if (!theTransporterRegistry->start_service(m_socket_server)){
+ ndbout_c("Unable to start theTransporterRegistry->start_service");
+ return false;
+ }
+
theReceiveThread = NdbThread_Create(runReceiveResponse_C,
(void**)this,
32768,
diff --git a/ndb/src/ndbapi/TransporterFacade.hpp b/ndb/src/ndbapi/TransporterFacade.hpp
index 130a24345b7..76beaa708f1 100644
--- a/ndb/src/ndbapi/TransporterFacade.hpp
+++ b/ndb/src/ndbapi/TransporterFacade.hpp
@@ -138,6 +138,7 @@ private:
void doStop();
TransporterRegistry* theTransporterRegistry;
+ SocketServer m_socket_server;
int sendPerformedLastInterval;
int theOwnId;
diff --git a/ndb/src/ndbapi/ndb_cluster_connection.cpp b/ndb/src/ndbapi/ndb_cluster_connection.cpp
index bd0ea246a04..27695cec187 100644
--- a/ndb/src/ndbapi/ndb_cluster_connection.cpp
+++ b/ndb/src/ndbapi/ndb_cluster_connection.cpp
@@ -145,6 +145,7 @@ int Ndb_cluster_connection::connect(int reconnect)
Ndb_cluster_connection::~Ndb_cluster_connection()
{
+ TransporterFacade::stop_instance();
if (m_connect_thread)
{
void *status;