summaryrefslogtreecommitdiff
path: root/ndb
diff options
context:
space:
mode:
authorunknown <jonas@perch.ndb.mysql.com>2005-09-30 11:39:49 +0200
committerunknown <jonas@perch.ndb.mysql.com>2005-09-30 11:39:49 +0200
commit8c570f3f561cfc3a0d52683ae8fa2662ab8139ff (patch)
treeb7515294f68886845021cf99c1c597690853bad0 /ndb
parent8e78ba93ec9e19c301f6b080a147d8a249f5a326 (diff)
downloadmariadb-git-8c570f3f561cfc3a0d52683ae8fa2662ab8139ff.tar.gz
ndb -
add support for reading config.ini from ndb_config (as alternative to contacting ndb_mgmd) mysql-test/r/ndb_config.result: Add support for reading config.ini from ndb_config mysql-test/t/ndb_config.test: Add support for reading config.ini from ndb_config ndb/src/mgmsrv/InitConfigFileParser.cpp: Handle prinouts better ndb/src/mgmsrv/InitConfigFileParser.hpp: Handle prinouts better ndb/tools/ndb_config.cpp: Add support for reading config.ini from ndb_config
Diffstat (limited to 'ndb')
-rw-r--r--ndb/src/mgmsrv/InitConfigFileParser.cpp19
-rw-r--r--ndb/src/mgmsrv/InitConfigFileParser.hpp6
-rw-r--r--ndb/tools/ndb_config.cpp162
3 files changed, 117 insertions, 70 deletions
diff --git a/ndb/src/mgmsrv/InitConfigFileParser.cpp b/ndb/src/mgmsrv/InitConfigFileParser.cpp
index 822e10c89aa..e0163b966c0 100644
--- a/ndb/src/mgmsrv/InitConfigFileParser.cpp
+++ b/ndb/src/mgmsrv/InitConfigFileParser.cpp
@@ -31,8 +31,10 @@ static void require(bool v) { if(!v) abort();}
//****************************************************************************
// Ctor / Dtor
//****************************************************************************
-InitConfigFileParser::InitConfigFileParser(){
+InitConfigFileParser::InitConfigFileParser(FILE * out)
+{
m_info = new ConfigInfo();
+ m_errstream = out ? out : stdout;
}
InitConfigFileParser::~InitConfigFileParser() {
@@ -42,11 +44,12 @@ InitConfigFileParser::~InitConfigFileParser() {
//****************************************************************************
// Read Config File
//****************************************************************************
-InitConfigFileParser::Context::Context(const ConfigInfo * info)
+InitConfigFileParser::Context::Context(const ConfigInfo * info, FILE * out)
: m_userProperties(true), m_configValues(1000, 20) {
m_config = new Properties(true);
m_defaults = new Properties(true);
+ m_errstream = out;
}
InitConfigFileParser::Context::~Context(){
@@ -61,10 +64,10 @@ Config *
InitConfigFileParser::parseConfig(const char * filename) {
FILE * file = fopen(filename, "r");
if(file == 0){
- ndbout << "Error opening file: " << filename << endl;
+ fprintf(m_errstream, "Error opening file: %s\n", filename);
return 0;
}
-
+
Config * ret = parseConfig(file);
fclose(file);
return ret;
@@ -75,7 +78,7 @@ InitConfigFileParser::parseConfig(FILE * file) {
char line[MAX_LINE_LENGTH];
- Context ctx(m_info);
+ Context ctx(m_info, m_errstream);
ctx.m_lineno = 0;
ctx.m_currentSection = 0;
@@ -571,8 +574,9 @@ InitConfigFileParser::Context::reportError(const char * fmt, ...){
va_start(ap, fmt);
if (fmt != 0)
BaseString::vsnprintf(buf, sizeof(buf)-1, fmt, ap);
- ndbout << "Error line " << m_lineno << ": " << buf << endl;
va_end(ap);
+ fprintf(m_errstream, "Error line %d: %s\n",
+ m_lineno, buf);
//m_currentSection->print();
}
@@ -585,6 +589,7 @@ InitConfigFileParser::Context::reportWarning(const char * fmt, ...){
va_start(ap, fmt);
if (fmt != 0)
BaseString::vsnprintf(buf, sizeof(buf)-1, fmt, ap);
- ndbout << "Warning line " << m_lineno << ": " << buf << endl;
va_end(ap);
+ fprintf(m_errstream, "Warning line %d: %s\n",
+ m_lineno, buf);
}
diff --git a/ndb/src/mgmsrv/InitConfigFileParser.hpp b/ndb/src/mgmsrv/InitConfigFileParser.hpp
index 1ea0a094ccd..39abf3f6811 100644
--- a/ndb/src/mgmsrv/InitConfigFileParser.hpp
+++ b/ndb/src/mgmsrv/InitConfigFileParser.hpp
@@ -34,11 +34,12 @@ class ConfigInfo;
* object if the config file has correct syntax and semantic.
*/
class InitConfigFileParser {
+ FILE * m_errstream;
public:
/**
* Constructor
*/
- InitConfigFileParser();
+ InitConfigFileParser(FILE * errstream = stdout);
~InitConfigFileParser();
/**
@@ -60,7 +61,7 @@ public:
* Context = Which section in init config file we are currently parsing
*/
struct Context {
- Context(const ConfigInfo *);
+ Context(const ConfigInfo *, FILE * out);
~Context();
ContextSectionType type; ///< Section type (e.g. default section,section)
@@ -82,6 +83,7 @@ public:
ConfigValuesFactory m_configValues; //
public:
+ FILE * m_errstream;
void reportError(const char * msg, ...);
void reportWarning(const char * msg, ...);
};
diff --git a/ndb/tools/ndb_config.cpp b/ndb/tools/ndb_config.cpp
index 725249a5af5..457021a4ec4 100644
--- a/ndb/tools/ndb_config.cpp
+++ b/ndb/tools/ndb_config.cpp
@@ -40,6 +40,7 @@ static const char * g_type = 0;
static const char * g_host = 0;
static const char * g_field_delimiter=",";
static const char * g_row_delimiter=" ";
+static const char * g_config_file = 0;
int g_print_full_config, opt_ndb_shm;
my_bool opt_core;
@@ -90,6 +91,9 @@ static struct my_option my_long_options[] =
{ "rows", 'r', "Row separator",
(gptr*) &g_row_delimiter, (gptr*) &g_row_delimiter,
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},
{ 0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}
};
@@ -124,7 +128,7 @@ struct Match
{
int m_key;
BaseString m_value;
- virtual int eval(NdbMgmHandle, const Iter&);
+ virtual int eval(const Iter&);
};
struct Apply
@@ -132,18 +136,21 @@ struct Apply
Apply() {}
Apply(int val) { m_key = val;}
int m_key;
- virtual int apply(NdbMgmHandle, const Iter&);
+ virtual int apply(const Iter&);
};
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_where(Vector<Match*>&, int &argc, char**& argv);
-static int eval(NdbMgmHandle, const Iter&, const Vector<Match*>&);
-static int apply(NdbMgmHandle, const Iter&, const Vector<Apply*>&);
+static int eval(const Iter&, const Vector<Match*>&);
+static int apply(const Iter&, const Vector<Apply*>&);
+static ndb_mgm_configuration* fetch_configuration();
+static ndb_mgm_configuration* load_configuration();
+
int
main(int argc, char** argv){
NDB_INIT(argv[0]);
@@ -154,52 +161,12 @@ main(int argc, char** argv){
ndb_std_get_one_option)))
return -1;
- NdbMgmHandle mgm = ndb_mgm_create_handle();
- if(mgm == NULL) {
- fprintf(stderr, "Cannot create handle to management server.\n");
- exit(-1);
- }
-
- 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));
- exit(-1);
- }
+ ndb_mgm_configuration * conf = 0;
- 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)
- {
- 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));
- exit(-1);
- }
- else if(g_verbose)
- {
- fprintf(stderr, "Fetched configuration\n");
- }
+ if (g_config_file)
+ conf = load_configuration();
+ else
+ conf = fetch_configuration();
Vector<Apply*> select_list;
Vector<Match*> where_clause;
@@ -224,12 +191,12 @@ main(int argc, char** argv){
iter.first();
for(iter.first(); iter.valid(); iter.next())
{
- if(eval(mgm, iter, where_clause))
+ if(eval(iter, where_clause))
{
if(prev)
printf("%s", g_row_delimiter);
prev= true;
- apply(mgm, iter, select_list);
+ apply(iter, select_list);
}
}
printf("\n");
@@ -323,11 +290,11 @@ template class Vector<Match*>;
static
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++)
{
- if(where[i]->eval(mgm, iter) == 0)
+ if(where[i]->eval(iter) == 0)
return 0;
}
@@ -336,11 +303,11 @@ eval(NdbMgmHandle mgm, const Iter& iter, const Vector<Match*>& where)
static
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++)
{
- list[i]->apply(mgm, iter);
+ list[i]->apply(iter);
if(i + 1 != list.size())
printf("%s", g_field_delimiter);
}
@@ -348,19 +315,19 @@ apply(NdbMgmHandle mgm, const Iter& iter, const Vector<Apply*>& list)
}
int
-Match::eval(NdbMgmHandle h, const Iter& iter)
+Match::eval(const Iter& iter)
{
Uint32 val32;
Uint64 val64;
const char* valc;
if (iter.get(m_key, &val32) == 0)
{
- if(atoi(m_value.c_str()) != val32)
+ if(atoi(m_value.c_str()) != (int)val32)
return 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;
}
else if(iter.get(m_key, &valc) == 0)
@@ -376,7 +343,7 @@ Match::eval(NdbMgmHandle h, const Iter& iter)
}
int
-Apply::apply(NdbMgmHandle h, const Iter& iter)
+Apply::apply(const Iter& iter)
{
Uint32 val32;
Uint64 val64;
@@ -397,7 +364,7 @@ Apply::apply(NdbMgmHandle h, const Iter& iter)
}
int
-NodeTypeApply::apply(NdbMgmHandle h, const Iter& iter)
+NodeTypeApply::apply(const Iter& iter)
{
Uint32 val32;
if (iter.get(CFG_TYPE_OF_SECTION, &val32) == 0)
@@ -406,3 +373,76 @@ NodeTypeApply::apply(NdbMgmHandle h, const Iter& iter)
}
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_verbose)
+ fprintf(stderr, "Using config.ini : %s", g_config_file);
+
+ Config* conf = parser.parseConfig(g_config_file);
+ if (conf)
+ return conf->m_configValues;
+
+ return 0;
+}