mirror of
https://github.com/MariaDB/server.git
synced 2025-01-18 04:53:01 +01:00
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
This commit is contained in:
commit
647d895acc
11 changed files with 146 additions and 119 deletions
|
@ -204,6 +204,7 @@ extern "C" {
|
|||
int version; ///< Internal version number
|
||||
int connect_count; ///< No of times node has connected
|
||||
///< or disconnected to the mgm srv
|
||||
char connect_address[sizeof("000.000.000.000")+1];
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -214,6 +215,7 @@ extern "C" {
|
|||
///< node_states array
|
||||
struct ndb_mgm_node_state ///< An array with node_states
|
||||
node_states[1];
|
||||
const char *hostname;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -138,6 +138,7 @@ private:
|
|||
void doStop();
|
||||
|
||||
TransporterRegistry* theTransporterRegistry;
|
||||
SocketServer m_socket_server;
|
||||
int sendPerformedLastInterval;
|
||||
int theOwnId;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue