diff options
Diffstat (limited to 'ndb/src/mgmsrv/main.cpp')
-rw-r--r-- | ndb/src/mgmsrv/main.cpp | 196 |
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; } |