Commit 972da434 authored by unknown's avatar unknown

Merge jamppa@bk-internal.mysql.com:/home/bk/mysql-5.0

into  a193-229-222-105.elisa-laajakaista.fi:/home/my/bk/mysql-5.0-icc


include/my_sys.h:
  Auto merged
parents 4dd48359 1d31ee29
...@@ -262,6 +262,7 @@ extern char wild_many,wild_one,wild_prefix; ...@@ -262,6 +262,7 @@ extern char wild_many,wild_one,wild_prefix;
extern const char *charsets_dir; extern const char *charsets_dir;
extern char *defaults_extra_file; extern char *defaults_extra_file;
extern const char *defaults_group_suffix; extern const char *defaults_group_suffix;
extern const char *defaults_file;
extern my_bool timed_mutexes; extern my_bool timed_mutexes;
......
...@@ -3,3 +3,5 @@ ndbd,1,localhost ndbd,2,localhost ndb_mgmd,3,localhost mysqld,4, mysqld,5, mysql ...@@ -3,3 +3,5 @@ ndbd,1,localhost ndbd,2,localhost ndb_mgmd,3,localhost mysqld,4, mysqld,5, mysql
1 localhost 41943040 12582912 1 localhost 41943040 12582912
2 localhost 41943040 12582912 2 localhost 41943040 12582912
1 2 1 2
ndbd,1,localhost ndbd,2,localhost ndb_mgmd,3,localhost mysqld,4, mysqld,5, mysqld,6, mysqld,7,
ndbd,1,localhost,52428800,26214400 ndbd,2,localhost,52428800,36700160 ndbd,3,localhost,52428800,52428800 ndbd,4,localhost,52428800,52428800 ndb_mgmd,5,localhost,, mysqld,6,localhost,,
[cluster_config]
NoOfReplicas=1
DataMemory=50M
[cluster_config.jonas]
IndexMemory=50M
ndbd = localhost,localhost,localhost,localhost
ndb_mgmd = localhost
mysqld = localhost
[cluster_config.ndbd.1]
DataMemory=25M
[cluster_config.ndbd.2.jonas]
DataMemory=35M
...@@ -6,5 +6,8 @@ ...@@ -6,5 +6,8 @@
--exec $NDB_TOOLS_DIR/ndb_config --no-defaults --query=nodeid,host,DataMemory,IndexMemory --type=ndbd 2> /dev/null --exec $NDB_TOOLS_DIR/ndb_config --no-defaults --query=nodeid,host,DataMemory,IndexMemory --type=ndbd 2> /dev/null
--exec $NDB_TOOLS_DIR/ndb_config --no-defaults -r \\n -f " " --query=nodeid,host,DataMemory,IndexMemory --type=ndbd 2> /dev/null --exec $NDB_TOOLS_DIR/ndb_config --no-defaults -r \\n -f " " --query=nodeid,host,DataMemory,IndexMemory --type=ndbd 2> /dev/null
--exec $NDB_TOOLS_DIR/ndb_config --no-defaults --query=nodeid --type=ndbd --host=localhost 2> /dev/null --exec $NDB_TOOLS_DIR/ndb_config --no-defaults --query=nodeid --type=ndbd --host=localhost 2> /dev/null
--exec $NDB_TOOLS_DIR/ndb_config --no-defaults --query=type,nodeid,host --config-file=$NDB_BACKUP_DIR/config.ini 2> /dev/null
# End of 4.1 tests # End of 4.1 tests
--exec $NDB_TOOLS_DIR/ndb_config --defaults-group-suffix=.jonas --defaults-file=$MYSQL_TEST_DIR/std_data/ndb_config_mycnf1.cnf --query=type,nodeid,host,IndexMemory,DataMemory --mycnf 2> /dev/null
...@@ -42,6 +42,7 @@ ...@@ -42,6 +42,7 @@
#include <winbase.h> #include <winbase.h>
#endif #endif
const char *defaults_file=0;
const char *defaults_group_suffix=0; const char *defaults_group_suffix=0;
char *defaults_extra_file=0; char *defaults_extra_file=0;
...@@ -140,6 +141,9 @@ int my_search_option_files(const char *conf_file, int *argc, char ***argv, ...@@ -140,6 +141,9 @@ int my_search_option_files(const char *conf_file, int *argc, char ***argv,
if (forced_extra_defaults) if (forced_extra_defaults)
defaults_extra_file= (char *) forced_extra_defaults; defaults_extra_file= (char *) forced_extra_defaults;
if (forced_default_file)
defaults_file= forced_default_file;
/* /*
We can only handle 'defaults-group-suffix' if we are called from We can only handle 'defaults-group-suffix' if we are called from
load_defaults() as otherwise we can't know the type of 'func_ctx' load_defaults() as otherwise we can't know the type of 'func_ctx'
......
...@@ -51,11 +51,12 @@ SimpleProperties::Writer::add(const char * value, int len){ ...@@ -51,11 +51,12 @@ SimpleProperties::Writer::add(const char * value, int len){
union { union {
Uint32 lastWord; Uint32 lastWord;
char lastBytes[4]; char lastBytes[4];
}; } tmp;
memcpy(lastBytes, tmp.lastWord =0 ;
memcpy(tmp.lastBytes,
value + putLen*4, value + putLen*4,
len - putLen*4); len - putLen*4);
return putWord(lastWord); return putWord(tmp.lastWord);
} }
bool bool
......
...@@ -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.
...@@ -34,11 +34,12 @@ class ConfigInfo; ...@@ -34,11 +34,12 @@ class ConfigInfo;
* object if the config file has correct syntax and semantic. * object if the config file has correct syntax and semantic.
*/ */
class InitConfigFileParser { class InitConfigFileParser {
FILE * m_errstream;
public: public:
/** /**
* Constructor * Constructor
*/ */
InitConfigFileParser(); InitConfigFileParser(FILE * errstream = stdout);
~InitConfigFileParser(); ~InitConfigFileParser();
/** /**
...@@ -50,6 +51,7 @@ public: ...@@ -50,6 +51,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
...@@ -60,7 +62,7 @@ public: ...@@ -60,7 +62,7 @@ public:
* Context = Which section in init config file we are currently parsing * Context = Which section in init config file we are currently parsing
*/ */
struct Context { struct Context {
Context(const ConfigInfo *); Context(const ConfigInfo *, FILE * out);
~Context(); ~Context();
ContextSectionType type; ///< Section type (e.g. default section,section) ContextSectionType type; ///< Section type (e.g. default section,section)
...@@ -82,6 +84,7 @@ public: ...@@ -82,6 +84,7 @@ public:
ConfigValuesFactory m_configValues; // ConfigValuesFactory m_configValues; //
public: public:
FILE * m_errstream;
void reportError(const char * msg, ...); void reportError(const char * msg, ...);
void reportWarning(const char * msg, ...); void reportWarning(const char * msg, ...);
}; };
...@@ -122,6 +125,21 @@ private: ...@@ -122,6 +125,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
...@@ -393,8 +393,6 @@ MgmtSrvr::MgmtSrvr(SocketServer *socket_server, ...@@ -393,8 +393,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;
...@@ -429,7 +427,7 @@ MgmtSrvr::MgmtSrvr(SocketServer *socket_server, ...@@ -429,7 +427,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);
} }
} }
......
...@@ -52,7 +52,15 @@ Config * ...@@ -52,7 +52,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();
......
...@@ -40,6 +40,8 @@ static const char * g_type = 0; ...@@ -40,6 +40,8 @@ static const char * g_type = 0;
static const char * g_host = 0; static const char * g_host = 0;
static const char * g_field_delimiter=","; static const char * g_field_delimiter=",";
static const char * g_row_delimiter=" "; static const char * g_row_delimiter=" ";
static const char * g_config_file = 0;
static int g_mycnf = 0;
int g_print_full_config, opt_ndb_shm; int g_print_full_config, opt_ndb_shm;
my_bool opt_core; my_bool opt_core;
...@@ -90,6 +92,12 @@ static struct my_option my_long_options[] = ...@@ -90,6 +92,12 @@ static struct my_option my_long_options[] =
{ "rows", 'r', "Row separator", { "rows", 'r', "Row separator",
(gptr*) &g_row_delimiter, (gptr*) &g_row_delimiter, (gptr*) &g_row_delimiter, (gptr*) &g_row_delimiter,
0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
{ "config-file", 256, "Path to config.ini",
(gptr*) &g_config_file, (gptr*) &g_config_file,
0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
{ "mycnf", 256, "Read config from my.cnf",
(gptr*) &g_mycnf, (gptr*) &g_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}
}; };
...@@ -124,7 +132,7 @@ struct Match ...@@ -124,7 +132,7 @@ struct Match
{ {
int m_key; int m_key;
BaseString m_value; BaseString m_value;
virtual int eval(NdbMgmHandle, const Iter&); virtual int eval(const Iter&);
}; };
struct Apply struct Apply
...@@ -132,18 +140,21 @@ struct Apply ...@@ -132,18 +140,21 @@ struct Apply
Apply() {} Apply() {}
Apply(int val) { m_key = val;} Apply(int val) { m_key = val;}
int m_key; int m_key;
virtual int apply(NdbMgmHandle, const Iter&); virtual int apply(const Iter&);
}; };
struct NodeTypeApply : public Apply struct NodeTypeApply : public Apply
{ {
virtual int apply(NdbMgmHandle, const Iter&); virtual int apply(const Iter&);
}; };
static int parse_query(Vector<Apply*>&, int &argc, char**& argv); static int parse_query(Vector<Apply*>&, int &argc, char**& argv);
static int parse_where(Vector<Match*>&, int &argc, char**& argv); static int parse_where(Vector<Match*>&, int &argc, char**& argv);
static int eval(NdbMgmHandle, const Iter&, const Vector<Match*>&); static int eval(const Iter&, const Vector<Match*>&);
static int apply(NdbMgmHandle, const Iter&, const Vector<Apply*>&); static int apply(const Iter&, const Vector<Apply*>&);
static ndb_mgm_configuration* fetch_configuration();
static ndb_mgm_configuration* load_configuration();
int int
main(int argc, char** argv){ main(int argc, char** argv){
NDB_INIT(argv[0]); NDB_INIT(argv[0]);
...@@ -154,51 +165,16 @@ main(int argc, char** argv){ ...@@ -154,51 +165,16 @@ main(int argc, char** argv){
ndb_std_get_one_option))) ndb_std_get_one_option)))
return -1; return -1;
NdbMgmHandle mgm = ndb_mgm_create_handle(); ndb_mgm_configuration * conf = 0;
if(mgm == NULL) {
fprintf(stderr, "Cannot create handle to management server.\n");
exit(-1);
}
ndb_mgm_set_error_stream(mgm, stderr); if (g_config_file || g_mycnf)
conf = load_configuration();
if (ndb_mgm_set_connectstring(mgm, g_connectstring)) else
{ conf = fetch_configuration();
fprintf(stderr, "* %5d: %s\n",
ndb_mgm_get_latest_error(mgm),
ndb_mgm_get_latest_error_msg(mgm));
fprintf(stderr,
"* %s", ndb_mgm_get_latest_error_desc(mgm));
exit(-1);
}
if(ndb_mgm_connect(mgm, try_reconnect-1, 5, 1))
{
fprintf(stderr, "Connect failed");
fprintf(stderr, " code: %d, msg: %s\n",
ndb_mgm_get_latest_error(mgm),
ndb_mgm_get_latest_error_msg(mgm));
exit(-1);
}
else if(g_verbose)
{
fprintf(stderr, "Connected to %s:%d\n",
ndb_mgm_get_connected_host(mgm),
ndb_mgm_get_connected_port(mgm));
}
ndb_mgm_configuration * conf = ndb_mgm_get_configuration(mgm, 0); if (conf == 0)
if(conf == 0)
{ {
fprintf(stderr, "Could not get configuration"); return -1;
fprintf(stderr, "code: %d, msg: %s\n",
ndb_mgm_get_latest_error(mgm),
ndb_mgm_get_latest_error_msg(mgm));
exit(-1);
}
else if(g_verbose)
{
fprintf(stderr, "Fetched configuration\n");
} }
Vector<Apply*> select_list; Vector<Apply*> select_list;
...@@ -224,12 +200,12 @@ main(int argc, char** argv){ ...@@ -224,12 +200,12 @@ main(int argc, char** argv){
iter.first(); iter.first();
for(iter.first(); iter.valid(); iter.next()) for(iter.first(); iter.valid(); iter.next())
{ {
if(eval(mgm, iter, where_clause)) if(eval(iter, where_clause))
{ {
if(prev) if(prev)
printf("%s", g_row_delimiter); printf("%s", g_row_delimiter);
prev= true; prev= true;
apply(mgm, iter, select_list); apply(iter, select_list);
} }
} }
printf("\n"); printf("\n");
...@@ -323,11 +299,11 @@ template class Vector<Match*>; ...@@ -323,11 +299,11 @@ template class Vector<Match*>;
static static
int int
eval(NdbMgmHandle mgm, const Iter& iter, const Vector<Match*>& where) eval(const Iter& iter, const Vector<Match*>& where)
{ {
for(unsigned i = 0; i<where.size(); i++) for(unsigned i = 0; i<where.size(); i++)
{ {
if(where[i]->eval(mgm, iter) == 0) if(where[i]->eval(iter) == 0)
return 0; return 0;
} }
...@@ -336,11 +312,11 @@ eval(NdbMgmHandle mgm, const Iter& iter, const Vector<Match*>& where) ...@@ -336,11 +312,11 @@ eval(NdbMgmHandle mgm, const Iter& iter, const Vector<Match*>& where)
static static
int int
apply(NdbMgmHandle mgm, const Iter& iter, const Vector<Apply*>& list) apply(const Iter& iter, const Vector<Apply*>& list)
{ {
for(unsigned i = 0; i<list.size(); i++) for(unsigned i = 0; i<list.size(); i++)
{ {
list[i]->apply(mgm, iter); list[i]->apply(iter);
if(i + 1 != list.size()) if(i + 1 != list.size())
printf("%s", g_field_delimiter); printf("%s", g_field_delimiter);
} }
...@@ -348,19 +324,19 @@ apply(NdbMgmHandle mgm, const Iter& iter, const Vector<Apply*>& list) ...@@ -348,19 +324,19 @@ apply(NdbMgmHandle mgm, const Iter& iter, const Vector<Apply*>& list)
} }
int int
Match::eval(NdbMgmHandle h, const Iter& iter) Match::eval(const Iter& iter)
{ {
Uint32 val32; Uint32 val32;
Uint64 val64; Uint64 val64;
const char* valc; const char* valc;
if (iter.get(m_key, &val32) == 0) if (iter.get(m_key, &val32) == 0)
{ {
if(atoi(m_value.c_str()) != val32) if(atoi(m_value.c_str()) != (int)val32)
return 0; return 0;
} }
else if(iter.get(m_key, &val64) == 0) else if(iter.get(m_key, &val64) == 0)
{ {
if(strtoll(m_value.c_str(), (char **)NULL, 10) != val64) if(strtoll(m_value.c_str(), (char **)NULL, 10) != (long long)val64)
return 0; return 0;
} }
else if(iter.get(m_key, &valc) == 0) else if(iter.get(m_key, &valc) == 0)
...@@ -376,7 +352,7 @@ Match::eval(NdbMgmHandle h, const Iter& iter) ...@@ -376,7 +352,7 @@ Match::eval(NdbMgmHandle h, const Iter& iter)
} }
int int
Apply::apply(NdbMgmHandle h, const Iter& iter) Apply::apply(const Iter& iter)
{ {
Uint32 val32; Uint32 val32;
Uint64 val64; Uint64 val64;
...@@ -397,7 +373,7 @@ Apply::apply(NdbMgmHandle h, const Iter& iter) ...@@ -397,7 +373,7 @@ Apply::apply(NdbMgmHandle h, const Iter& iter)
} }
int int
NodeTypeApply::apply(NdbMgmHandle h, const Iter& iter) NodeTypeApply::apply(const Iter& iter)
{ {
Uint32 val32; Uint32 val32;
if (iter.get(CFG_TYPE_OF_SECTION, &val32) == 0) if (iter.get(CFG_TYPE_OF_SECTION, &val32) == 0)
...@@ -406,3 +382,86 @@ NodeTypeApply::apply(NdbMgmHandle h, const Iter& iter) ...@@ -406,3 +382,86 @@ NodeTypeApply::apply(NdbMgmHandle h, const Iter& iter)
} }
return 0; return 0;
} }
ndb_mgm_configuration*
fetch_configuration()
{
ndb_mgm_configuration* conf = 0;
NdbMgmHandle mgm = ndb_mgm_create_handle();
if(mgm == NULL) {
fprintf(stderr, "Cannot create handle to management server.\n");
return 0;
}
ndb_mgm_set_error_stream(mgm, stderr);
if (ndb_mgm_set_connectstring(mgm, g_connectstring))
{
fprintf(stderr, "* %5d: %s\n",
ndb_mgm_get_latest_error(mgm),
ndb_mgm_get_latest_error_msg(mgm));
fprintf(stderr,
"* %s", ndb_mgm_get_latest_error_desc(mgm));
goto noconnect;
}
if(ndb_mgm_connect(mgm, try_reconnect-1, 5, 1))
{
fprintf(stderr, "Connect failed");
fprintf(stderr, " code: %d, msg: %s\n",
ndb_mgm_get_latest_error(mgm),
ndb_mgm_get_latest_error_msg(mgm));
goto noconnect;
}
else if(g_verbose)
{
fprintf(stderr, "Connected to %s:%d\n",
ndb_mgm_get_connected_host(mgm),
ndb_mgm_get_connected_port(mgm));
}
conf = ndb_mgm_get_configuration(mgm, 0);
if(conf == 0)
{
fprintf(stderr, "Could not get configuration");
fprintf(stderr, "code: %d, msg: %s\n",
ndb_mgm_get_latest_error(mgm),
ndb_mgm_get_latest_error_msg(mgm));
}
else if(g_verbose)
{
fprintf(stderr, "Fetched configuration\n");
}
ndb_mgm_disconnect(mgm);
noconnect:
ndb_mgm_destroy_handle(&mgm);
return conf;
}
#include <Config.hpp>
ndb_mgm_configuration*
load_configuration()
{
InitConfigFileParser parser(stderr);
if (g_config_file)
{
if (g_verbose)
fprintf(stderr, "Using config.ini : %s", g_config_file);
Config* conf = parser.parseConfig(g_config_file);
if (conf)
return conf->m_configValues;
}
if (g_verbose)
fprintf(stderr, "Using my.cnf");
Config* conf = parser.parse_mycnf();
if (conf)
return conf->m_configValues;
return 0;
}
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