diff options
Diffstat (limited to 'ndb/src/common/mgmcommon/IPCConfig.cpp')
-rw-r--r-- | ndb/src/common/mgmcommon/IPCConfig.cpp | 388 |
1 files changed, 0 insertions, 388 deletions
diff --git a/ndb/src/common/mgmcommon/IPCConfig.cpp b/ndb/src/common/mgmcommon/IPCConfig.cpp deleted file mode 100644 index f188a433f1b..00000000000 --- a/ndb/src/common/mgmcommon/IPCConfig.cpp +++ /dev/null @@ -1,388 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#include <ndb_global.h> -#include <ndb_opt_defaults.h> -#include <IPCConfig.hpp> -#include <NdbOut.hpp> -#include <NdbHost.h> - -#include <TransporterDefinitions.hpp> -#include <TransporterRegistry.hpp> -#include <Properties.hpp> - -#include <mgmapi_configuration.hpp> -#include <mgmapi_config_parameters.h> - -#if defined DEBUG_TRANSPORTER -#define DEBUG(t) ndbout << __FILE__ << ":" << __LINE__ << ":" << t << endl; -#else -#define DEBUG(t) -#endif - -IPCConfig::IPCConfig(Properties * p) -{ - theNoOfRemoteNodes = 0; - the_ownId = 0; - if(p != 0) - props = new Properties(* p); - else - props = 0; -} - - -IPCConfig::~IPCConfig() -{ - if(props != 0){ - delete props; - } -} - -int -IPCConfig::init(){ - Uint32 nodeId; - - if(props == 0) return -1; - if(!props->get("LocalNodeId", &nodeId)) { - DEBUG( "Did not find local node id." ); - return -1; - } - the_ownId = nodeId; - - Uint32 noOfConnections; - if(!props->get("NoOfConnections", &noOfConnections)) { - DEBUG( "Did not find noOfConnections." ); - return -1; - } - - for(Uint32 i = 0; i<noOfConnections; i++){ - const Properties * tmp; - Uint32 node1, node2; - - if(!props->get("Connection", i, &tmp)) { - DEBUG( "Did not find Connection." ); - return -1; - } - if(!tmp->get("NodeId1", &node1)) { - DEBUG( "Did not find NodeId1." ); - return -1; - } - if(!tmp->get("NodeId2", &node2)) { - DEBUG( "Did not find NodeId2." ); - return -1; - } - - if(node1 == the_ownId && node2 != the_ownId) - if(!addRemoteNodeId(node2)) { - DEBUG( "addRemoteNodeId(node2) failed." ); - return -1; - } - - if(node1 != the_ownId && node2 == the_ownId) - if(!addRemoteNodeId(node1)) { - DEBUG( "addRemoteNodeId(node2) failed." ); - return -1; - } - } - return 0; -} - -bool -IPCConfig::addRemoteNodeId(NodeId nodeId){ - for(int i = 0; i<theNoOfRemoteNodes; i++) - if(theRemoteNodeIds[i] == nodeId) - return false; - theRemoteNodeIds[theNoOfRemoteNodes] = nodeId; - theNoOfRemoteNodes++; - return true; -} - -/** - * Supply a nodeId, - * and get next higher node id - * Returns false if none found - */ -bool -IPCConfig::getNextRemoteNodeId(NodeId & nodeId) const { - NodeId returnNode = MAX_NODES + 1; - for(int i = 0; i<theNoOfRemoteNodes; i++) - if(theRemoteNodeIds[i] > nodeId){ - if(theRemoteNodeIds[i] < returnNode){ - returnNode = theRemoteNodeIds[i]; - } - } - if(returnNode == (MAX_NODES + 1)) - return false; - nodeId = returnNode; - return true; -} - - -Uint32 -IPCConfig::getREPHBFrequency(NodeId id) const { - const Properties * tmp; - Uint32 out; - - /** - * Todo: Fix correct heartbeat - */ - if (!props->get("Node", id, &tmp) || - !tmp->get("HeartbeatIntervalRepRep", &out)) { - DEBUG("Illegal Node or HeartbeatIntervalRepRep in config."); - out = 10000; - } - - return out; -} - -const char* -IPCConfig::getNodeType(NodeId id) const { - const char * out; - const Properties * tmp; - - if (!props->get("Node", id, &tmp) || !tmp->get("Type", &out)) { - DEBUG("Illegal Node or NodeType in config."); - out = "Unknown"; - } - - return out; -} - -#include <mgmapi.h> -Uint32 -IPCConfig::configureTransporters(Uint32 nodeId, - const class ndb_mgm_configuration & config, - class TransporterRegistry & tr){ - TransporterConfiguration conf; - - DBUG_ENTER("IPCConfig::configureTransporters"); - - /** - * Iterate over all MGM's an construct a connectstring - * create mgm_handle and give it to the Transporter Registry - */ - { - const char *separator= ""; - BaseString connect_string; - ndb_mgm_configuration_iterator iter(config, CFG_SECTION_NODE); - for(iter.first(); iter.valid(); iter.next()) - { - Uint32 type; - if(iter.get(CFG_TYPE_OF_SECTION, &type)) continue; - if(type != NODE_TYPE_MGM) continue; - const char* hostname; - Uint32 port; - if(iter.get(CFG_NODE_HOST, &hostname)) continue; - if( strlen(hostname) == 0 ) continue; - if(iter.get(CFG_MGM_PORT, &port)) continue; - connect_string.appfmt("%s%s:port",separator,hostname,port); - separator= ","; - } - NdbMgmHandle h= ndb_mgm_create_handle(); - if ( h && connect_string.length() > 0 ) - { - ndb_mgm_set_connectstring(h,connect_string.c_str()); - tr.set_mgm_handle(h); - } - } - - Uint32 noOfTransportersCreated= 0; - ndb_mgm_configuration_iterator iter(config, CFG_SECTION_CONNECTION); - - for(iter.first(); iter.valid(); iter.next()){ - - Uint32 nodeId1, nodeId2, remoteNodeId; - const char * remoteHostName= 0, * localHostName= 0; - if(iter.get(CFG_CONNECTION_NODE_1, &nodeId1)) continue; - if(iter.get(CFG_CONNECTION_NODE_2, &nodeId2)) continue; - - if(nodeId1 != nodeId && nodeId2 != nodeId) continue; - remoteNodeId = (nodeId == nodeId1 ? nodeId2 : nodeId1); - - { - const char * host1= 0, * host2= 0; - iter.get(CFG_CONNECTION_HOSTNAME_1, &host1); - iter.get(CFG_CONNECTION_HOSTNAME_2, &host2); - localHostName = (nodeId == nodeId1 ? host1 : host2); - remoteHostName = (nodeId == nodeId1 ? host2 : host1); - } - - Uint32 sendSignalId = 1; - Uint32 checksum = 1; - if(iter.get(CFG_CONNECTION_SEND_SIGNAL_ID, &sendSignalId)) continue; - if(iter.get(CFG_CONNECTION_CHECKSUM, &checksum)) continue; - - Uint32 type = ~0; - if(iter.get(CFG_TYPE_OF_SECTION, &type)) continue; - - Uint32 server_port= 0; - if(iter.get(CFG_CONNECTION_SERVER_PORT, &server_port)) break; - - /* - We check the node type. MGM node becomes server. - */ - Uint32 node1type, node2type; - ndb_mgm_configuration_iterator node1iter(config, CFG_SECTION_NODE); - ndb_mgm_configuration_iterator node2iter(config, CFG_SECTION_NODE); - node1iter.find(CFG_NODE_ID,nodeId1); - node2iter.find(CFG_NODE_ID,nodeId2); - node1iter.get(CFG_TYPE_OF_SECTION,&node1type); - node2iter.get(CFG_TYPE_OF_SECTION,&node2type); - - conf.serverNodeId= (nodeId1 < nodeId2)? nodeId1:nodeId2; - - conf.isMgmConnection= false; - if(node2type==NODE_TYPE_MGM) - { - conf.isMgmConnection= true; - conf.serverNodeId= nodeId2; - } - else if(node1type==NODE_TYPE_MGM) - { - conf.isMgmConnection= true; - conf.serverNodeId= nodeId1; - } - else if (nodeId == conf.serverNodeId) { - tr.add_transporter_interface(remoteNodeId, localHostName, server_port); - } - - DBUG_PRINT("info", ("Transporter between this node %d and node %d using port %d, signalId %d, checksum %d", - nodeId, remoteNodeId, server_port, sendSignalId, checksum)); - /* - This may be a dynamic port. It depends on when we're getting - our configuration. If we've been restarted, we'll be getting - a configuration with our old dynamic port in it, hence the number - here is negative (and we try the old port number first). - - On a first-run, server_port will be zero (with dynamic ports) - - If we're not using dynamic ports, we don't do anything. - */ - if((int)server_port<0) - server_port= -server_port; - - conf.localNodeId = nodeId; - conf.remoteNodeId = remoteNodeId; - conf.checksum = checksum; - conf.signalId = sendSignalId; - conf.port = server_port; - conf.localHostName = localHostName; - conf.remoteHostName = remoteHostName; - - switch(type){ - case CONNECTION_TYPE_SHM: - if(iter.get(CFG_SHM_KEY, &conf.shm.shmKey)) break; - if(iter.get(CFG_SHM_BUFFER_MEM, &conf.shm.shmSize)) break; - - Uint32 tmp; - if(iter.get(CFG_SHM_SIGNUM, &tmp)) break; - conf.shm.signum= tmp; - - if(!tr.createSHMTransporter(&conf)){ - DBUG_PRINT("error", ("Failed to create SHM Transporter from %d to %d", - conf.localNodeId, conf.remoteNodeId)); - ndbout << "Failed to create SHM Transporter from: " - << conf.localNodeId << " to: " << conf.remoteNodeId << endl; - } else { - noOfTransportersCreated++; - } - DBUG_PRINT("info", ("Created SHM Transporter using shmkey %d, " - "buf size = %d", conf.shm.shmKey, conf.shm.shmSize)); - - break; - - case CONNECTION_TYPE_SCI: - if(iter.get(CFG_SCI_SEND_LIMIT, &conf.sci.sendLimit)) break; - if(iter.get(CFG_SCI_BUFFER_MEM, &conf.sci.bufferSize)) break; - if (nodeId == nodeId1) { - if(iter.get(CFG_SCI_HOST2_ID_0, &conf.sci.remoteSciNodeId0)) break; - if(iter.get(CFG_SCI_HOST2_ID_1, &conf.sci.remoteSciNodeId1)) break; - } else { - if(iter.get(CFG_SCI_HOST1_ID_0, &conf.sci.remoteSciNodeId0)) break; - if(iter.get(CFG_SCI_HOST1_ID_1, &conf.sci.remoteSciNodeId1)) break; - } - if (conf.sci.remoteSciNodeId1 == 0) { - conf.sci.nLocalAdapters = 1; - } else { - conf.sci.nLocalAdapters = 2; - } - if(!tr.createSCITransporter(&conf)){ - DBUG_PRINT("error", ("Failed to create SCI Transporter from %d to %d", - conf.localNodeId, conf.remoteNodeId)); - ndbout << "Failed to create SCI Transporter from: " - << conf.localNodeId << " to: " << conf.remoteNodeId << endl; - } else { - DBUG_PRINT("info", ("Created SCI Transporter: Adapters = %d, " - "remote SCI node id %d", - conf.sci.nLocalAdapters, conf.sci.remoteSciNodeId0)); - DBUG_PRINT("info", ("Host 1 = %s, Host 2 = %s, sendLimit = %d, " - "buf size = %d", conf.localHostName, - conf.remoteHostName, conf.sci.sendLimit, - conf.sci.bufferSize)); - if (conf.sci.nLocalAdapters > 1) { - DBUG_PRINT("info", ("Fault-tolerant with 2 Remote Adapters, " - "second remote SCI node id = %d", - conf.sci.remoteSciNodeId1)); - } - noOfTransportersCreated++; - continue; - } - break; - - case CONNECTION_TYPE_TCP: - if(iter.get(CFG_TCP_SEND_BUFFER_SIZE, &conf.tcp.sendBufferSize)) break; - if(iter.get(CFG_TCP_RECEIVE_BUFFER_SIZE, &conf.tcp.maxReceiveSize)) break; - - const char * proxy; - if (!iter.get(CFG_TCP_PROXY, &proxy)) { - if (strlen(proxy) > 0 && nodeId2 == nodeId) { - // TODO handle host:port - conf.port = atoi(proxy); - } - } - - if(!tr.createTCPTransporter(&conf)){ - ndbout << "Failed to create TCP Transporter from: " - << nodeId << " to: " << remoteNodeId << endl; - } else { - noOfTransportersCreated++; - } - DBUG_PRINT("info", ("Created TCP Transporter: sendBufferSize = %d, " - "maxReceiveSize = %d", conf.tcp.sendBufferSize, - conf.tcp.maxReceiveSize)); - break; - case CONNECTION_TYPE_OSE: - if(iter.get(CFG_OSE_PRIO_A_SIZE, &conf.ose.prioASignalSize)) break; - if(iter.get(CFG_OSE_PRIO_B_SIZE, &conf.ose.prioBSignalSize)) break; - - if(!tr.createOSETransporter(&conf)){ - ndbout << "Failed to create OSE Transporter from: " - << nodeId << " to: " << remoteNodeId << endl; - } else { - noOfTransportersCreated++; - } - break; - - default: - ndbout << "Unknown transporter type from: " << nodeId << - " to: " << remoteNodeId << endl; - break; - } // switch - } // for - - DBUG_RETURN(noOfTransportersCreated); -} - |