Commit 65be842f authored by unknown's avatar unknown

Fixes from Tomas's review of 'use configuration mgm handle as a transporter'.

This should help with the  PURGE STALE SESSIONS problem.


ndb/src/common/transporter/TransporterRegistry.cpp:
  No longer need to do funny connecting and port reporting in start_service as we
  convert the configuration mgm after we have bound to the ports we have to report.
  
  use a BaseString for constructing the connect string.
ndb/src/kernel/main.cpp:
  Reuse the mgm handle used to fetch configuration as a transporter connection.
ndb/src/kernel/vm/Configuration.cpp:
  m_mgmd_host is now a BaseString.
ndb/src/kernel/vm/Configuration.hpp:
  use BaseString for m_mgmd_host
parent 09b7d18a
...@@ -1374,11 +1374,6 @@ TransporterRegistry::start_service(SocketServer& socket_server) ...@@ -1374,11 +1374,6 @@ TransporterRegistry::start_service(SocketServer& socket_server)
DBUG_RETURN(false); DBUG_RETURN(false);
} }
if(!ndb_mgm_is_connected(m_mgm_handle))
ndb_mgm_connect(m_mgm_handle, 0, 0, 0);
if(!ndb_mgm_is_connected(m_mgm_handle))
DBUG_RETURN(false);
for (unsigned i= 0; i < m_transporter_interface.size(); i++) for (unsigned i= 0; i < m_transporter_interface.size(); i++)
{ {
Transporter_interface &t= m_transporter_interface[i]; Transporter_interface &t= m_transporter_interface[i];
...@@ -1411,18 +1406,6 @@ TransporterRegistry::start_service(SocketServer& socket_server) ...@@ -1411,18 +1406,6 @@ TransporterRegistry::start_service(SocketServer& socket_server)
} }
t.m_s_service_port= (t.m_s_service_port<=0)?-port:port; // -`ve if dynamic t.m_s_service_port= (t.m_s_service_port<=0)?-port:port; // -`ve if dynamic
DBUG_PRINT("info", ("t.m_s_service_port = %d",t.m_s_service_port)); DBUG_PRINT("info", ("t.m_s_service_port = %d",t.m_s_service_port));
if(t.m_s_service_port < 0
&& ndb_mgm_set_connection_int_parameter(m_mgm_handle,
get_localNodeId(),
t.m_remote_nodeId,
CFG_CONNECTION_SERVER_PORT,
t.m_s_service_port,
&mgm_reply) < 0)
{
delete transporter_service;
DBUG_RETURN(false);
}
transporter_service->setTransporterRegistry(this); transporter_service->setTransporterRegistry(this);
} }
DBUG_RETURN(true); DBUG_RETURN(true);
...@@ -1609,25 +1592,9 @@ NDB_SOCKET_TYPE TransporterRegistry::connect_ndb_mgmd(SocketClient *sc) ...@@ -1609,25 +1592,9 @@ NDB_SOCKET_TYPE TransporterRegistry::connect_ndb_mgmd(SocketClient *sc)
* Set connectstring * Set connectstring
*/ */
{ {
char c[100]; BaseString cs;
char *cs= &c[0]; cs.assfmt("%s:%u",sc->get_server_name(),sc->get_port());
unsigned len= strlen(sc->get_server_name())+20; ndb_mgm_set_connectstring(h, cs.c_str());
if( len > sizeof(c) )
{
/*
* server name is long. malloc enough for it and the port number
*/
cs= (char*)malloc(len*sizeof(char));
if(!cs)
{
ndb_mgm_destroy_handle(&h);
return NDB_INVALID_SOCKET;
}
}
snprintf(cs,len,"%s:%u",sc->get_server_name(),sc->get_port());
ndb_mgm_set_connectstring(h, cs);
if(cs != &c[0])
free(cs);
} }
if(ndb_mgm_connect(h, 0, 0, 0)<0) if(ndb_mgm_connect(h, 0, 0, 0)<0)
......
...@@ -190,6 +190,13 @@ int main(int argc, char** argv) ...@@ -190,6 +190,13 @@ int main(int argc, char** argv)
exit(-1); exit(-1);
} }
// Re-use the mgm handle as a transporter
if(!globalTransporterRegistry.connect_client(
theConfig->get_config_retriever()->get_mgmHandlePtr()))
ERROR_SET(fatal, ERR_INVALID_CONFIG,
"Connection to mgmd terminated before setup was complete",
"StopOnError missing");
if (!globalTransporterRegistry.start_clients()){ if (!globalTransporterRegistry.start_clients()){
ndbout_c("globalTransporterRegistry.start_clients() failed"); ndbout_c("globalTransporterRegistry.start_clients() failed");
exit(-1); exit(-1);
......
...@@ -154,7 +154,6 @@ Configuration::Configuration() ...@@ -154,7 +154,6 @@ Configuration::Configuration()
m_config_retriever= 0; m_config_retriever= 0;
m_clusterConfig= 0; m_clusterConfig= 0;
m_clusterConfigIter= 0; m_clusterConfigIter= 0;
m_mgmd_host= NULL;
} }
Configuration::~Configuration(){ Configuration::~Configuration(){
...@@ -167,9 +166,6 @@ Configuration::~Configuration(){ ...@@ -167,9 +166,6 @@ Configuration::~Configuration(){
if(_backupPath != NULL) if(_backupPath != NULL)
free(_backupPath); free(_backupPath);
if(m_mgmd_host)
free(m_mgmd_host);
if (m_config_retriever) { if (m_config_retriever) {
delete m_config_retriever; delete m_config_retriever;
} }
...@@ -193,7 +189,6 @@ Configuration::fetch_configuration(){ ...@@ -193,7 +189,6 @@ Configuration::fetch_configuration(){
} }
m_mgmd_port= 0; m_mgmd_port= 0;
m_mgmd_host= 0;
m_config_retriever= new ConfigRetriever(getConnectString(), m_config_retriever= new ConfigRetriever(getConnectString(),
NDB_VERSION, NODE_TYPE_DB); NDB_VERSION, NODE_TYPE_DB);
...@@ -214,16 +209,8 @@ Configuration::fetch_configuration(){ ...@@ -214,16 +209,8 @@ Configuration::fetch_configuration(){
ERROR_SET(fatal, ERR_INVALID_CONFIG, "Could not connect to ndb_mgmd", s); ERROR_SET(fatal, ERR_INVALID_CONFIG, "Could not connect to ndb_mgmd", s);
} }
{
m_mgmd_port= m_config_retriever->get_mgmd_port(); m_mgmd_port= m_config_retriever->get_mgmd_port();
/** m_mgmd_host.assign(m_config_retriever->get_mgmd_host());
* We copy the mgmd host as the handle is later
* destroyed, so a pointer won't work
*/
int len= strlen(m_config_retriever->get_mgmd_host());
m_mgmd_host= (char*)malloc(sizeof(char)*len);
strcpy(m_mgmd_host,m_config_retriever->get_mgmd_host());
}
ConfigRetriever &cr= *m_config_retriever; ConfigRetriever &cr= *m_config_retriever;
...@@ -325,10 +312,6 @@ Configuration::setupConfiguration(){ ...@@ -325,10 +312,6 @@ Configuration::setupConfiguration(){
ERROR_SET(fatal, ERR_INVALID_CONFIG, "Invalid configuration fetched", ERROR_SET(fatal, ERR_INVALID_CONFIG, "Invalid configuration fetched",
"No transporters configured"); "No transporters configured");
} }
if(!globalTransporterRegistry.connect_client(
m_config_retriever->get_mgmHandlePtr()))
ERROR_SET(fatal, ERR_INVALID_CONFIG, "Connection to mgmd terminated before setup was complete",
"StopOnError missing");
} }
/** /**
......
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
#ifndef Configuration_H #ifndef Configuration_H
#define Configuration_H #define Configuration_H
#include <util/BaseString.hpp>
#include <mgmapi.h> #include <mgmapi.h>
#include <ndb_types.h> #include <ndb_types.h>
...@@ -67,7 +68,7 @@ public: ...@@ -67,7 +68,7 @@ public:
const ndb_mgm_configuration_iterator * getOwnConfigIterator() const; const ndb_mgm_configuration_iterator * getOwnConfigIterator() const;
Uint32 get_mgmd_port() const {return m_mgmd_port;}; Uint32 get_mgmd_port() const {return m_mgmd_port;};
char *get_mgmd_host() const {return m_mgmd_host;}; const char *get_mgmd_host() const {return m_mgmd_host.c_str();};
ConfigRetriever* get_config_retriever() { return m_config_retriever; }; ConfigRetriever* get_config_retriever() { return m_config_retriever; };
class LogLevel * m_logLevel; class LogLevel * m_logLevel;
...@@ -99,7 +100,7 @@ private: ...@@ -99,7 +100,7 @@ private:
bool _initialStart; bool _initialStart;
char * _connectString; char * _connectString;
Uint32 m_mgmd_port; Uint32 m_mgmd_port;
char *m_mgmd_host; BaseString m_mgmd_host;
bool _daemonMode; bool _daemonMode;
void calcSizeAlt(class ConfigValues * ); void calcSizeAlt(class ConfigValues * );
......
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