wl#1882

  allow ndb_mgmd to use my.cnf for cluster configuration
parent 21153069
...@@ -241,6 +241,9 @@ struct DepricationTransform { ...@@ -241,6 +241,9 @@ struct DepricationTransform {
static static
const DepricationTransform f_deprication[] = { const DepricationTransform f_deprication[] = {
{ DB_TOKEN, "Discless", "Diskless", 0, 1 }, { DB_TOKEN, "Discless", "Diskless", 0, 1 },
{ DB_TOKEN, "Id", "nodeid", 0, 1 },
{ API_TOKEN, "Id", "nodeid", 0, 1 },
{ MGM_TOKEN, "Id", "nodeid", 0, 1 },
{ 0, 0, 0, 0, 0} { 0, 0, 0, 0, 0}
}; };
...@@ -405,9 +408,21 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = { ...@@ -405,9 +408,21 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
0, 0 }, 0, 0 },
{ {
CFG_NODE_ID, KEY_INTERNAL,
"Id", "Id",
DB_TOKEN, DB_TOKEN,
"",
ConfigInfo::CI_DEPRICATED,
false,
ConfigInfo::CI_INT,
MANDATORY,
"1",
STR_VALUE(MAX_NODES) },
{
CFG_NODE_ID,
"nodeid",
DB_TOKEN,
"Number identifying the database node ("DB_TOKEN_PRINT")", "Number identifying the database node ("DB_TOKEN_PRINT")",
ConfigInfo::CI_USED, ConfigInfo::CI_USED,
false, false,
...@@ -1244,9 +1259,21 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = { ...@@ -1244,9 +1259,21 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
0, 0 }, 0, 0 },
{ {
CFG_NODE_ID, KEY_INTERNAL,
"Id", "Id",
API_TOKEN, API_TOKEN,
"",
ConfigInfo::CI_DEPRICATED,
false,
ConfigInfo::CI_INT,
MANDATORY,
"1",
STR_VALUE(MAX_NODES) },
{
CFG_NODE_ID,
"nodeid",
API_TOKEN,
"Number identifying application node ("API_TOKEN_PRINT")", "Number identifying application node ("API_TOKEN_PRINT")",
ConfigInfo::CI_USED, ConfigInfo::CI_USED,
false, false,
...@@ -1375,9 +1402,21 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = { ...@@ -1375,9 +1402,21 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
0, 0 }, 0, 0 },
{ {
CFG_NODE_ID, KEY_INTERNAL,
"Id", "Id",
MGM_TOKEN, MGM_TOKEN,
"",
ConfigInfo::CI_DEPRICATED,
false,
ConfigInfo::CI_INT,
MANDATORY,
"1",
STR_VALUE(MAX_NODES) },
{
CFG_NODE_ID,
"nodeid",
MGM_TOKEN,
"Number identifying the management server node ("MGM_TOKEN_PRINT")", "Number identifying the management server node ("MGM_TOKEN_PRINT")",
ConfigInfo::CI_USED, ConfigInfo::CI_USED,
false, false,
...@@ -2516,14 +2555,14 @@ bool ...@@ -2516,14 +2555,14 @@ bool
transformNode(InitConfigFileParser::Context & ctx, const char * data){ transformNode(InitConfigFileParser::Context & ctx, const char * data){
Uint32 id; Uint32 id;
if(!ctx.m_currentSection->get("Id", &id)){ if(!ctx.m_currentSection->get("nodeid", &id) && !ctx.m_currentSection->get("Id", &id)){
Uint32 nextNodeId= 1; Uint32 nextNodeId= 1;
ctx.m_userProperties.get("NextNodeId", &nextNodeId); ctx.m_userProperties.get("NextNodeId", &nextNodeId);
id= nextNodeId; id= nextNodeId;
while (ctx.m_userProperties.get("AllocatedNodeId_", id, &id)) while (ctx.m_userProperties.get("AllocatedNodeId_", id, &id))
id++; id++;
ctx.m_userProperties.put("NextNodeId", id+1, true); ctx.m_userProperties.put("NextNodeId", id+1, true);
ctx.m_currentSection->put("Id", id); ctx.m_currentSection->put("nodeid", id);
#if 0 #if 0
ctx.reportError("Mandatory parameter Id missing from section " ctx.reportError("Mandatory parameter Id missing from section "
"[%s] starting at line: %d", "[%s] starting at line: %d",
...@@ -2531,7 +2570,7 @@ transformNode(InitConfigFileParser::Context & ctx, const char * data){ ...@@ -2531,7 +2570,7 @@ transformNode(InitConfigFileParser::Context & ctx, const char * data){
return false; return false;
#endif #endif
} else if(ctx.m_userProperties.get("AllocatedNodeId_", id, &id)) { } else if(ctx.m_userProperties.get("AllocatedNodeId_", id, &id)) {
ctx.reportError("Duplicate Id in section " ctx.reportError("Duplicate nodeid in section "
"[%s] starting at line: %d", "[%s] starting at line: %d",
ctx.fname, ctx.m_sectionLineno); ctx.fname, ctx.m_sectionLineno);
return false; return false;
...@@ -3356,6 +3395,7 @@ transform(InitConfigFileParser::Context & ctx, ...@@ -3356,6 +3395,7 @@ transform(InitConfigFileParser::Context & ctx,
PropertiesType oldType; PropertiesType oldType;
require(ctx.m_currentSection->getTypeOf(oldName, &oldType)); require(ctx.m_currentSection->getTypeOf(oldName, &oldType));
ConfigInfo::Type newType = ctx.m_info->getType(ctx.m_currentInfo, newName); ConfigInfo::Type newType = ctx.m_info->getType(ctx.m_currentInfo, newName);
if(!((oldType == PropertiesType_Uint32 || oldType == PropertiesType_Uint64) if(!((oldType == PropertiesType_Uint32 || oldType == PropertiesType_Uint64)
&& (newType == ConfigInfo::CI_INT || newType == ConfigInfo::CI_INT64 || newType == ConfigInfo::CI_BOOL))){ && (newType == ConfigInfo::CI_INT || newType == ConfigInfo::CI_INT64 || newType == ConfigInfo::CI_BOOL))){
ndbout << "oldType: " << (int)oldType << ", newType: " << (int)newType << endl; ndbout << "oldType: " << (int)oldType << ", newType: " << (int)newType << endl;
......
This diff is collapsed.
...@@ -50,6 +50,7 @@ public: ...@@ -50,6 +50,7 @@ public:
*/ */
Config * parseConfig(FILE * file); Config * parseConfig(FILE * file);
Config * parseConfig(const char * filename); Config * parseConfig(const char * filename);
Config * parse_mycnf();
/** /**
* Parser context struct * Parser context struct
...@@ -122,6 +123,21 @@ private: ...@@ -122,6 +123,21 @@ private:
* Information about parameters (min, max values etc) * Information about parameters (min, max values etc)
*/ */
ConfigInfo* m_info; ConfigInfo* m_info;
bool handle_mycnf_defaults(Vector<struct my_option>& options,
InitConfigFileParser::Context& ctx,
const char * name);
bool load_mycnf_groups(Vector<struct my_option> & options,
InitConfigFileParser::Context& ctx,
const char * name,
const char *groups[]);
bool store_in_properties(Vector<struct my_option>& options,
InitConfigFileParser::Context& ctx,
const char * name);
Config* run_config_rules(Context& ctx);
}; };
#endif // InitConfigFileParser_H #endif // InitConfigFileParser_H
...@@ -433,8 +433,6 @@ MgmtSrvr::MgmtSrvr(SocketServer *socket_server, ...@@ -433,8 +433,6 @@ MgmtSrvr::MgmtSrvr(SocketServer *socket_server,
m_newConfig = NULL; m_newConfig = NULL;
if (config_filename) if (config_filename)
m_configFilename.assign(config_filename); m_configFilename.assign(config_filename);
else
m_configFilename.assign("config.ini");
m_nextConfigGenerationNumber = 0; m_nextConfigGenerationNumber = 0;
...@@ -469,7 +467,7 @@ MgmtSrvr::MgmtSrvr(SocketServer *socket_server, ...@@ -469,7 +467,7 @@ MgmtSrvr::MgmtSrvr(SocketServer *socket_server,
_config= readConfig(); _config= readConfig();
if (_config == 0) { if (_config == 0) {
ndbout << "Unable to read config file" << endl; ndbout << "Unable to read config file" << endl;
require(false); exit(-1);
} }
} }
......
...@@ -274,7 +274,15 @@ Config * ...@@ -274,7 +274,15 @@ Config *
MgmtSrvr::readConfig() { MgmtSrvr::readConfig() {
Config *conf; Config *conf;
InitConfigFileParser parser; InitConfigFileParser parser;
if (m_configFilename.length())
{
conf = parser.parseConfig(m_configFilename.c_str()); conf = parser.parseConfig(m_configFilename.c_str());
}
else
{
ndbout_c("Reading cluster configuration using my.cnf");
conf = parser.parse_mycnf();
}
return conf; return conf;
} }
......
...@@ -102,6 +102,7 @@ static int opt_daemon; // NOT bool, bool need not be int ...@@ -102,6 +102,7 @@ static int opt_daemon; // NOT bool, bool need not be int
static int opt_non_interactive; static int opt_non_interactive;
static int opt_interactive; static int opt_interactive;
static const char * opt_config_filename= 0; static const char * opt_config_filename= 0;
static int opt_mycnf = 0;
struct MgmGlobals { struct MgmGlobals {
MgmGlobals(); MgmGlobals();
...@@ -166,6 +167,10 @@ static struct my_option my_long_options[] = ...@@ -166,6 +167,10 @@ static struct my_option my_long_options[] =
"Don't run as daemon, but don't read from stdin", "Don't run as daemon, but don't read from stdin",
(gptr*) &opt_non_interactive, (gptr*) &opt_non_interactive, 0, (gptr*) &opt_non_interactive, (gptr*) &opt_non_interactive, 0,
GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0 }, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0 },
{ "mycnf", 256,
"Read cluster config from my.cnf",
(gptr*) &opt_mycnf, (gptr*) &opt_mycnf, 0,
GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0} { 0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}
}; };
...@@ -217,6 +222,19 @@ int main(int argc, char** argv) ...@@ -217,6 +222,19 @@ int main(int argc, char** argv)
opt_daemon= 0; opt_daemon= 0;
} }
if (opt_mycnf && opt_config_filename)
{
ndbout_c("Both --mycnf and -f is not supported");
return 0;
}
if (opt_mycnf == 0 && opt_config_filename == 0)
{
struct stat buf;
if (stat("config.ini", &buf) != -1)
opt_config_filename = "config.ini";
}
glob->socketServer = new SocketServer(); glob->socketServer = new SocketServer();
MgmApiService * mapi = new MgmApiService(); MgmApiService * mapi = new MgmApiService();
......
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