summaryrefslogtreecommitdiff
path: root/ndb/src/mgmsrv/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ndb/src/mgmsrv/main.cpp')
-rw-r--r--ndb/src/mgmsrv/main.cpp196
1 files changed, 45 insertions, 151 deletions
diff --git a/ndb/src/mgmsrv/main.cpp b/ndb/src/mgmsrv/main.cpp
index d9eb0001c44..719226b51df 100644
--- a/ndb/src/mgmsrv/main.cpp
+++ b/ndb/src/mgmsrv/main.cpp
@@ -16,11 +16,9 @@
#include <ndb_global.h>
-#include <signal.h>
-
#include "MgmtSrvr.hpp"
#include "EventLogger.hpp"
-#include "Config.hpp"
+#include <Config.hpp>
#include "InitConfigFileParser.hpp"
#include <SocketServer.hpp>
#include "Services.hpp"
@@ -37,6 +35,8 @@
#include <mgmapi_config_parameters.h>
#include <getarg.h>
+#include <NdbAutoPtr.hpp>
+
#if defined NDB_OSE || defined NDB_SOFTOSE
#include <efs.h>
#else
@@ -88,7 +88,6 @@ static MgmGlobals glob;
******************************************************************************/
static bool readLocalConfig();
static bool readGlobalConfig();
-static bool setPortNo();
/**
* Global variables
@@ -100,16 +99,16 @@ extern int global_mgmt_server_check;
int _print_version = 0;
struct getargs args[] = {
- { "version", 0, arg_flag, &_print_version,
- "Print versions"},
- { NULL, 'c', arg_string, &glob.config_filename,
- "Running cluster configuration file", "filename" },
- { NULL, 'd', arg_flag, &glob.daemon,
- "Daemon mode" },
+ { "version", 'v', arg_flag, &_print_version,
+ "Print ndb_mgmd version"},
+ { "config-file", 'c', arg_string, &glob.config_filename,
+ "Specify cluster configuration file", "filename" },
+ { "daemon", 'd', arg_flag, &glob.daemon,
+ "Run ndb_mgmd in daemon mode" },
{ NULL, 'l', arg_string, &glob.local_config_filename,
- "Local configuration file (Ndb.cfg)",
+ "Specify configuration file connect string (will default use Ndb.cfg if available)",
"filename" },
- { NULL, 'n', arg_flag, &glob.non_interactive,
+ { "nodaemon", 'n', arg_flag, &glob.non_interactive,
"Don't run as daemon, but don't read from stdin", "non-interactive" }
};
@@ -146,7 +145,9 @@ NDB_MAIN(mgmsrv){
exit(1);
}
glob.socketServer = new SocketServer();
+
MgmApiService * mapi = new MgmApiService();
+
MgmStatService * mstat = new MgmStatService();
/****************************
@@ -157,16 +158,34 @@ NDB_MAIN(mgmsrv){
if (!readGlobalConfig())
goto error_end;
- if (!setPortNo())
+ glob.mgmObject = new MgmtSrvr(glob.localNodeId,
+ BaseString(glob.config_filename),
+ BaseString(glob.local_config_filename == 0 ?
+ "" : glob.local_config_filename),
+ glob.cluster_config);
+
+ glob.cluster_config = 0;
+ glob.localNodeId= glob.mgmObject->getOwnNodeId();
+
+ if (glob.localNodeId == 0) {
goto error_end;
-
+ }
+
+ glob.port= glob.mgmObject->getPort();
+
+ if (glob.port == 0)
+ goto error_end;
+
+ glob.interface_name = 0;
+ glob.use_specific_ip = false;
+
if(!glob.use_specific_ip){
if(!glob.socketServer->tryBind(glob.port, glob.interface_name)){
ndbout_c("Unable to setup port: %s:%d!\n"
"Please check if the port is already used,\n"
"(perhaps a mgmtsrvr is already running),\n"
"and if you are executing on the correct computer",
- glob.interface_name, glob.port);
+ (glob.interface_name ? glob.interface_name : "*"), glob.port);
goto error_end;
}
free(glob.interface_name);
@@ -190,31 +209,25 @@ NDB_MAIN(mgmsrv){
goto error_end;
}
- glob.mgmObject = new MgmtSrvr(glob.localNodeId,
- BaseString(glob.config_filename),
- BaseString(glob.local_config_filename == 0 ? "" : glob.local_config_filename),
- glob.cluster_config);
-
- glob.cluster_config = 0;
-
if(!glob.mgmObject->check_start()){
- ndbout_c("Unable to start management server.");
+ ndbout_c("Unable to check start management server.");
ndbout_c("Probably caused by illegal initial configuration file.");
goto error_end;
}
if (glob.daemon) {
// Become a daemon
- char homePath[255],lockfile[255], logfile[255];
- NdbConfig_HomePath(homePath, 255);
- snprintf(lockfile, 255, "%snode%d.pid", homePath, glob.localNodeId);
- snprintf(logfile, 255, "%snode%d.out", homePath, glob.localNodeId);
+ char *lockfile= NdbConfig_PidFileName(glob.localNodeId);
+ char *logfile= NdbConfig_StdoutFileName(glob.localNodeId);
+ NdbAutoPtr<char> tmp_aptr1(lockfile), tmp_aptr2(logfile);
+
if (NdbDaemon_Make(lockfile, logfile, 0) == -1) {
ndbout << "Cannot become daemon: " << NdbDaemon_ErrorText << endl;
return 1;
}
}
+ signal(SIGPIPE, SIG_IGN);
if(!glob.mgmObject->start()){
ndbout_c("Unable to start management server.");
ndbout_c("Probably caused by illegal initial configuration file.");
@@ -233,8 +246,8 @@ NDB_MAIN(mgmsrv){
ndbout_c(msg);
g_EventLogger.info(msg);
- snprintf(msg, 256, "Command port: %d, Statistics port: %d",
- glob.port, glob.port_stats);
+ snprintf(msg, 256, "Id: %d, Command port: %d, Statistics port: %d",
+ glob.localNodeId, glob.port, glob.port_stats);
ndbout_c(msg);
g_EventLogger.info(msg);
@@ -298,14 +311,11 @@ MgmGlobals::~MgmGlobals(){
static bool
readLocalConfig(){
// Read local config file
- ConfigRetriever cr;
- cr.setLocalConfigFileName(glob.local_config_filename);
- int nodeid = cr.init(true);
- if(nodeid == -1){
+ LocalConfig lc;
+ if(!lc.init(glob.local_config_filename))
return false;
- }
- glob.localNodeId = (NodeId)nodeid;
+ glob.localNodeId = lc._ownNodeId;
return true;
}
@@ -328,123 +338,7 @@ readGlobalConfig() {
InitConfigFileParser parser;
glob.cluster_config = parser.parseConfig(glob.config_filename);
if(glob.cluster_config == 0){
- /**
- * Try to get configuration from other MGM server
- * Note: Only new format
- */
- glob.cluster_config = new Config();
-
- ConfigRetriever cr;
- cr.setLocalConfigFileName(glob.local_config_filename);
- glob.cluster_config->m_configValues = cr.getConfig(NDB_VERSION,
- NODE_TYPE_MGM);
- if (glob.cluster_config->m_configValues == NULL)
- return false;
- }
- return true;
-}
-
-/**
- * @fn setPortNo
- * @param glob : Global variables
- * @return true if success, false otherwise.
- *
- * Port number:
- * 2. Use port number from global configuration file
- * 4. Use port number for statistics from global configuration file
- */
-static bool
-setPortNo(){
- const Properties *mgmProps;
-
- ndb_mgm_configuration_iterator * iter =
- ndb_mgm_create_configuration_iterator(glob.cluster_config->m_configValues,
- CFG_SECTION_NODE);
- if(iter == 0)
- return false;
-
- if(ndb_mgm_find(iter, CFG_NODE_ID, glob.localNodeId) != 0){
- ndbout << "Could not retrieve configuration for Node "
- << glob.localNodeId << " in config file." << endl
- << "Have you set correct NodeId for this node?" << endl;
- ndb_mgm_destroy_iterator(iter);
- return false;
- }
-
- unsigned type;
- if(ndb_mgm_get_int_parameter(iter, CFG_TYPE_OF_SECTION, &type) != 0 ||
- type != NODE_TYPE_MGM){
- ndbout << "Local node id " << glob.localNodeId
- << " is not defined as management server" << endl
- << "Have you set correct NodeId for this node?" << endl;
- return false;
- }
-
- /************
- * Set Port *
- ************/
- Uint32 tmp = 0;
- if(ndb_mgm_get_int_parameter(iter, CFG_MGM_PORT, &tmp) != 0){
- ndbout << "Could not find PortNumber in the configuration file." << endl;
- return false;
- }
- glob.port = tmp;
-
- /*****************
- * Set Stat Port *
- *****************/
-#if 0
- if (!mgmProps->get("PortNumberStats", &tmp)){
- ndbout << "Could not find PortNumberStats in the configuration file."
- << endl;
return false;
}
- glob.port_stats = tmp;
-#endif
-
-#if 0
- const char * host;
- if(ndb_mgm_get_string_parameter(iter, mgmProps->get("ExecuteOnComputer", host)){
- ndbout << "Failed to find \"ExecuteOnComputer\" for my node" << endl;
- ndbout << "Unable to verify own hostname" << endl;
- return false;
- }
-
- const char * hostname;
- {
- const Properties * p;
- char buf[255];
- snprintf(buf, sizeof(buf), "Computer_%s", host.c_str());
- if(!glob.cluster_config->get(buf, &p)){
- ndbout << "Failed to find computer " << host << " in config" << endl;
- ndbout << "Unable to verify own hostname" << endl;
- return false;
- }
- if(!p->get("HostName", &hostname)){
- ndbout << "Failed to find \"HostName\" for computer " << host
- << " in config" << endl;
- ndbout << "Unable to verify own hostname" << endl;
- return false;
- }
- if(NdbHost_GetHostName(buf) != 0){
- ndbout << "Unable to get own hostname" << endl;
- ndbout << "Unable to verify own hostname" << endl;
- return false;
- }
- }
-
- const char * ip_address;
- if(mgmProps->get("IpAddress", &ip_address)){
- glob.use_specific_ip = true;
- glob.interface_name = strdup(ip_address);
- return true;
- }
-
- glob.interface_name = strdup(hostname);
-#endif
-
- glob.interface_name = 0;
- glob.use_specific_ip = false;
-
return true;
}