summaryrefslogtreecommitdiff
path: root/ndb/src/mgmsrv
diff options
context:
space:
mode:
authorunknown <monty@mishka.local>2004-12-22 13:54:39 +0200
committerunknown <monty@mishka.local>2004-12-22 13:54:39 +0200
commitbb2d3eaa30a3881927142c985fb637aca06d9823 (patch)
tree8e5f08b17957f896c2d4e931e60b57d99c260ed6 /ndb/src/mgmsrv
parent52d080f09979deb2063a8010feee3b925a3d7938 (diff)
parent5c79810a6d3ca19254c310f1519664729367b647 (diff)
downloadmariadb-git-bb2d3eaa30a3881927142c985fb637aca06d9823.tar.gz
Merge with 4.1
BitKeeper/etc/ignore: auto-union BitKeeper/etc/logging_ok: auto-union Build-tools/Do-compile: Auto merged VC++Files/sql/mysqld.dsp: Auto merged client/Makefile.am: Auto merged client/mysql.cc: Auto merged BitKeeper/deleted/.del-acinclude.m4~f4ab416bac5003: Auto merged client/mysqltest.c: Auto merged include/my_base.h: Auto merged innobase/dict/dict0dict.c: Auto merged innobase/dict/dict0load.c: Auto merged innobase/include/dict0dict.h: Auto merged innobase/include/row0mysql.h: Auto merged innobase/os/os0file.c: Auto merged innobase/srv/srv0srv.c: Auto merged libmysql/libmysql.c: Auto merged myisam/mi_check.c: Auto merged myisam/mi_rnext_same.c: Auto merged myisam/mi_write.c: Auto merged myisam/sort.c: Auto merged mysql-test/mysql-test-run.sh: Auto merged mysql-test/r/ctype_ucs.result: Auto merged mysql-test/r/ctype_ujis.result: Auto merged mysql-test/r/gis-rtree.result: Auto merged mysql-test/r/group_by.result: Auto merged mysql-test/r/merge.result: Auto merged mysql-test/r/metadata.result: Auto merged mysql-test/r/ndb_alter_table.result: Auto merged mysql-test/r/ps_1general.result: Auto merged mysql-test/r/insert_update.result: Auto merged mysql-test/r/timezone2.result: Auto merged mysql-test/r/type_enum.result: Auto merged mysql-test/r/variables.result: Auto merged mysql-test/t/ctype_ucs.test: Auto merged mysql-test/t/merge.test: Auto merged mysql-test/t/ps_1general.test: Auto merged mysql-test/t/subselect.test: Auto merged mysql-test/t/system_mysql_db_fix.test: Auto merged mysql-test/t/variables.test: Auto merged ndb/include/ndbapi/NdbConnection.hpp: Auto merged ndb/include/ndbapi/NdbDictionary.hpp: Auto merged ndb/src/common/util/version.c: Auto merged ndb/src/kernel/blocks/dbacc/DbaccInit.cpp: Auto merged ndb/src/kernel/blocks/dbacc/Makefile.am: Auto merged ndb/src/kernel/blocks/dbdict/Dbdict.cpp: Auto merged ndb/src/kernel/blocks/dbdih/DbdihMain.cpp: Auto merged ndb/src/kernel/blocks/dblqh/DblqhInit.cpp: Auto merged ndb/src/kernel/blocks/dbtc/DbtcMain.cpp: Auto merged ndb/src/kernel/blocks/dbtux/Dbtux.hpp: Auto merged ndb/src/ndbapi/NdbBlob.cpp: Auto merged ndb/src/ndbapi/NdbConnection.cpp: Auto merged ndb/src/ndbapi/NdbDictionary.cpp: Auto merged ndb/src/ndbapi/NdbDictionaryImpl.cpp: Auto merged ndb/src/ndbapi/NdbDictionaryImpl.hpp: Auto merged ndb/src/ndbapi/NdbOperationExec.cpp: Auto merged ndb/src/ndbapi/NdbScanOperation.cpp: Auto merged ndb/test/ndbapi/Makefile.am: Auto merged scripts/make_win_src_distribution.sh: Auto merged scripts/mysql_install_db.sh: Auto merged sql/field.cc: Auto merged sql/ha_innodb.cc: Auto merged sql/ha_ndbcluster.cc: Auto merged sql/ha_ndbcluster.h: Auto merged sql/handler.cc: Auto merged sql/item_cmpfunc.cc: Auto merged sql/item_create.h: Auto merged sql/item_func.cc: Auto merged sql/item_geofunc.cc: Auto merged sql/item_row.cc: Auto merged sql/item_strfunc.cc: Auto merged sql/item_strfunc.h: Auto merged sql/item_sum.cc: Auto merged sql/item_sum.h: Auto merged sql/log.cc: Auto merged sql/log_event.cc: Auto merged sql/mysqld.cc: Auto merged sql/net_serv.cc: Auto merged sql/password.c: Auto merged sql/protocol.cc: Auto merged sql/repl_failsafe.cc: Auto merged sql/set_var.cc: Auto merged sql/slave.cc: Auto merged sql/sql_acl.cc: Auto merged sql/sql_cache.cc: Auto merged sql/sql_class.cc: Auto merged sql/sql_derived.cc: Auto merged sql/sql_do.cc: Auto merged sql/sql_handler.cc: Auto merged sql/sql_help.cc: Auto merged sql/sql_lex.cc: Auto merged sql/sql_lex.h: Auto merged sql/sql_repl.cc: Auto merged sql/sql_show.cc: Auto merged sql/sql_union.cc: Auto merged sql/examples/ha_archive.cc: Auto merged sql/strfunc.cc: Auto merged sql/table.cc: Auto merged sql/table.h: Auto merged sql/tztime.h: Auto merged sql/udf_example.cc: Auto merged sql/unireg.cc: Auto merged Makefile.am: Simple merge client/mysqldump.c: Simple merge configure.in: Simple merge libmysqld/lib_sql.cc: Automatic merge mysql-test/r/func_str.result: Automatic merge mysql-test/r/grant.result: simple merge mysql-test/r/multi_update.result: automatc merge mysql-test/r/ps.result: automatic merge mysql-test/r/ps_2myisam.result: Automatic merge mysql-test/r/ps_3innodb.result: Automatic merge mysql-test/r/ps_4heap.result: Automatic merge mysql-test/r/ps_5merge.result: Automatic merge mysql-test/r/ps_6bdb.result: Automatic merge mysql-test/r/ps_7ndb.result: Automatic merge mysql-test/r/show_check.result: Automatic merge mysql-test/r/subselect.result: Automatic merge mysql-test/t/grant.test: Automatic merge mysql-test/t/multi_update.test: Automatic merge mysql-test/t/ps.test: Automatic merge mysql-test/t/show_check.test: Automatic merge ndb/docs/wl2077.txt: merge ndb/src/mgmsrv/main.cpp: merge scripts/mysql_fix_privilege_tables.sh: merge sql/item.cc: Merge (difficult) sql/item.h: simple merge sql/item_cmpfunc.h: Automatic merge sql/item_subselect.cc: Simple merge sql/item_subselect.h: Automatic merge sql/mysql_priv.h: Simple merge sql/slave.h: Automatic merge sql/sql_base.cc: Removed code that was backported to 4.1 sql/sql_class.h: Merge (some code moved to sql_insert.cc) sql/sql_db.cc: simple merge sql/sql_insert.cc: Merge (difficult as logic had changed both in 4.1 and 5.0) Some coded moved here from sql_class.h sql/sql_parse.cc: Merge (difficult) sql/sql_prepare.cc: Simple merge sql/sql_select.cc: Automatic merge sql/sql_table.cc: Simple merge sql/sql_update.cc: Difficult merge because of different logic for multi-updates sql/sql_yacc.yy: Simple merge tests/client_test.c: Simple merge
Diffstat (limited to 'ndb/src/mgmsrv')
-rw-r--r--ndb/src/mgmsrv/CommandInterpreter.cpp961
-rw-r--r--ndb/src/mgmsrv/CommandInterpreter.hpp85
-rw-r--r--ndb/src/mgmsrv/Config.cpp16
-rw-r--r--ndb/src/mgmsrv/ConfigInfo.cpp942
-rw-r--r--ndb/src/mgmsrv/ConfigInfo.hpp10
-rw-r--r--ndb/src/mgmsrv/InitConfigFileParser.cpp19
-rw-r--r--ndb/src/mgmsrv/Makefile.am18
-rw-r--r--ndb/src/mgmsrv/MgmtSrvr.cpp109
-rw-r--r--ndb/src/mgmsrv/MgmtSrvr.hpp29
-rw-r--r--ndb/src/mgmsrv/Services.cpp229
-rw-r--r--ndb/src/mgmsrv/Services.hpp2
-rw-r--r--ndb/src/mgmsrv/SignalQueue.hpp12
-rw-r--r--ndb/src/mgmsrv/main.cpp46
13 files changed, 856 insertions, 1622 deletions
diff --git a/ndb/src/mgmsrv/CommandInterpreter.cpp b/ndb/src/mgmsrv/CommandInterpreter.cpp
index 02bf24f1d9c..686155415d5 100644
--- a/ndb/src/mgmsrv/CommandInterpreter.cpp
+++ b/ndb/src/mgmsrv/CommandInterpreter.cpp
@@ -28,66 +28,12 @@
#include "ConfigInfo.hpp"
#include <version.h>
-
-
-static const char* helpTexts[] = {
- "HELP Print help text",
- "HELP SHOW Help for the SHOW command",
-#ifdef VM_TRACE // DEBUG ONLY
- "HELP DEBUG Help for debug compiled version",
-#endif
- "SHOW Print information about cluster",
- "SHOW CONFIG Print configuration",
- "SHOW PARAMETERS Print configuration parameters",
- "START BACKUP Start backup\n"
- "ABORT BACKUP <backup id> Aborts backup\n"
- "CLUSTERLOG ON Enable Cluster logging",
- "CLUSTERLOG OFF Disable Cluster logging",
- "CLUSTERLOG FILTER <severity> Toggle severity filter on/off",
- "CLUSTERLOG INFO Print cluster log information",
- "{<id>|ALL} START Start DB node (started with -n)",
- "{<id>|ALL} RESTART [-n] [-i] Restart DB node",
- "{<id>|ALL} STOP Stop DB node",
- "{<id>|ALL} STATUS Print status",
- "{<id>|ALL} CLUSTERLOG {<category>=<level>}+ Set log level for cluster log",
- "QUIT Quit management server",
-};
-static const unsigned noOfHelpTexts = sizeof(helpTexts)/sizeof(const char*);
-
-static const char* helpTextShow =
-"SHOW prints NDB Cluster information\n\n"
-"SHOW Print information about cluster\n"
-"SHOW CONFIG Print configuration (in initial config file format)\n"
-"SHOW PARAMETERS Print information about configuration parameters\n\n"
-;
-
-#ifdef VM_TRACE // DEBUG ONLY
-static const char* helpTextDebug =
-"SHOW PROPERTIES Print config properties object\n"
-"{<id>|ALL} LOGLEVEL {<category>=<level>}+ Set log level\n"
-"{<id>|ALL} ERROR <errorNo> Inject error into NDB node\n"
-"{<id>|ALL} TRACE <traceNo> Set trace number\n"
-"{<id>|ALL} LOG [BLOCK = {ALL|<block>+}] Set logging on in & out signals\n"
-"{<id>|ALL} LOGIN [BLOCK = {ALL|<block>+}] Set logging on in signals\n"
-"{<id>|ALL} LOGOUT [BLOCK = {ALL|<block>+}] Set logging on out signals\n"
-"{<id>|ALL} LOGOFF [BLOCK = {ALL|<block>+}] Unset signal logging\n"
-"{<id>|ALL} TESTON Start signal logging\n"
-"{<id>|ALL} TESTOFF Stop signal logging\n"
-"{<id>|ALL} SET <configParamName> <value> Update configuration variable\n"
-"{<id>|ALL} DUMP <arg> Dump system state to cluster.log\n"
-"{<id>|ALL} GETSTAT Print statistics\n"
-"\n"
-;
-#endif
-
-
+#include <m_string.h>
//******************************************************************************
//******************************************************************************
CommandInterpreter::CommandInterpreter(MgmtSrvr& mgmtSrvr) :
_mgmtSrvr(mgmtSrvr) {
-
- // _mgmtSrvr.setCallback(CmdBackupCallback);
}
@@ -145,52 +91,7 @@ int CommandInterpreter::readAndExecute() {
char* firstToken = strtok(line, " ");
char* allAfterFirstToken = strtok(NULL, "\0");
- if (strcmp(firstToken, "HELP") == 0) {
- executeHelp(allAfterFirstToken);
- return true;
- }
- else if (strcmp(firstToken, "?") == 0) {
- executeHelp(allAfterFirstToken);
- return true;
- }
- else if (strcmp(firstToken, "SHOW") == 0) {
- executeShow(allAfterFirstToken);
- return true;
- }
- else if (strcmp(firstToken, "CLUSTERLOG") == 0) {
- executeClusterLog(allAfterFirstToken);
- return true;
- }
- else if(strcmp(firstToken, "START") == 0 &&
- allAfterFirstToken != 0 &&
- strncmp(allAfterFirstToken, "BACKUP", sizeof("BACKUP") - 1) == 0){
- executeStartBackup(allAfterFirstToken);
- return true;
- }
- else if(strcmp(firstToken, "ABORT") == 0 &&
- allAfterFirstToken != 0 &&
- strncmp(allAfterFirstToken, "BACKUP", sizeof("BACKUP") - 1) == 0){
- executeAbortBackup(allAfterFirstToken);
- return true;
- }
-
- else if(strcmp(firstToken, "ENTER") == 0 &&
- allAfterFirstToken != 0 &&
- strncmp(allAfterFirstToken, "SINGLE USER MODE ",
- sizeof("SINGLE USER MODE") - 1) == 0){
- executeEnterSingleUser(allAfterFirstToken);
- return true;
- }
-
- else if(strcmp(firstToken, "EXIT") == 0 &&
- allAfterFirstToken != 0 &&
- strncmp(allAfterFirstToken, "SINGLE USER MODE ",
- sizeof("SINGLE USER MODE") - 1) == 0){
- executeExitSingleUser(allAfterFirstToken);
- return true;
- }
-
- else if (strcmp(firstToken, "ALL") == 0) {
+ if (strcmp(firstToken, "ALL") == 0) {
analyseAfterFirstToken(-1, allAfterFirstToken);
}
else if(strcmp(firstToken, "QUIT") == 0 ||
@@ -203,7 +104,6 @@ int CommandInterpreter::readAndExecute() {
int processId;
if (! convert(firstToken, processId)) {
ndbout << "Invalid command: " << _line << "." << endl;
- ndbout << "Type HELP for help." << endl << endl;
return true;
}
if (processId < 0) {
@@ -219,24 +119,10 @@ int CommandInterpreter::readAndExecute() {
static const CommandInterpreter::CommandFunctionPair commands[] = {
- { "START", &CommandInterpreter::executeStart }
- ,{ "RESTART", &CommandInterpreter::executeRestart }
- ,{ "STOP", &CommandInterpreter::executeStop }
- ,{ "STATUS", &CommandInterpreter::executeStatus }
- ,{ "LOGLEVEL", &CommandInterpreter::executeLogLevel }
-#ifdef ERROR_INSERT
- ,{ "ERROR", &CommandInterpreter::executeError }
-#endif
- ,{ "TRACE", &CommandInterpreter::executeTrace }
- ,{ "LOG", &CommandInterpreter::executeLog }
+ { "TRACE", &CommandInterpreter::executeTrace }
,{ "LOGIN", &CommandInterpreter::executeLogIn }
,{ "LOGOUT", &CommandInterpreter::executeLogOut }
,{ "LOGOFF", &CommandInterpreter::executeLogOff }
- ,{ "TESTON", &CommandInterpreter::executeTestOn }
- ,{ "TESTOFF", &CommandInterpreter::executeTestOff }
- ,{ "CLUSTERLOG", &CommandInterpreter::executeEventReporting }
- ,{ "DUMP", &CommandInterpreter::executeDumpState }
- ,{ "JONAS", &CommandInterpreter::jonas }
};
@@ -273,16 +159,14 @@ CommandInterpreter::analyseAfterFirstToken(int processId,
if(fun == 0){
ndbout << "Invalid command: " << secondToken << "." << endl;
- ndbout << "Type HELP for help." << endl << endl;
return;
}
if(processId == -1){
executeForAll(command, fun, allAfterSecondToken);
} else {
- if(strcmp(command, "STATUS") != 0)
- ndbout << "Executing " << command << " on node: "
- << processId << endl << endl;
+ ndbout << "Executing " << command << " on node: "
+ << processId << endl << endl;
(this->*fun)(processId, allAfterSecondToken, false);
ndbout << endl;
}
@@ -293,18 +177,11 @@ CommandInterpreter::executeForAll(const char * cmd, ExecuteFunction fun,
const char * allAfterSecondToken){
NodeId nodeId = 0;
- if(strcmp(cmd, "STOP") == 0 ||
- strcmp(cmd, "RESTART") == 0){
- ndbout << "Executing " << cmd << " on all nodes" << endl << "\n";
+ while(_mgmtSrvr.getNextNodeId(&nodeId, NDB_MGM_NODE_TYPE_NDB)){
+ ndbout << "Executing " << cmd << " on node: "
+ << nodeId << endl << endl;
(this->*fun)(nodeId, allAfterSecondToken, true);
- } else {
- while(_mgmtSrvr.getNextNodeId(&nodeId, NDB_MGM_NODE_TYPE_NDB)){
- if(strcmp(cmd, "STATUS") != 0)
- ndbout << "Executing " << cmd << " on node: "
- << nodeId << endl << endl;
- (this->*fun)(nodeId, allAfterSecondToken, true);
- ndbout << endl;
- } // for
+ ndbout << endl;
}
}
@@ -374,622 +251,6 @@ bool CommandInterpreter::parseBlockSpecification(const char* allAfterLog,
return true;
}
-
-
-//******************************************************************************
-//******************************************************************************
-void CommandInterpreter::executeHelp(char* parameters) {
-
- (void)parameters; // Don't want compiler warning
-
- if (emptyString(parameters)) {
- unsigned i;
- for (i = 0; i<noOfHelpTexts; i++) {
- ndbout << helpTexts[i] << endl;
- }
-
- ndbout << endl
- << "<severity> = "
- << "ALERT | CRITICAL | ERROR | WARNING | INFO | DEBUG"
- << endl;
-
- ndbout << "<category> = ";
- for(i = 0; i<CFG_MIN_LOGLEVEL; i++){
- ndbout << ndb_mgm_get_event_category_string((ndb_mgm_event_category)i);
- if (i < CFG_MIN_LOGLEVEL - 1) {
- ndbout << " | ";
- }
- }
- ndbout << endl;
-
- ndbout << "<level> = " << "0 - 15"
- << endl;
-
- ndbout << endl;
- } else if (strcmp(parameters, "SHOW") == 0) {
- ndbout << helpTextShow;
-#ifdef VM_TRACE // DEBUG ONLY
- } else if (strcmp(parameters, "DEBUG") == 0) {
- ndbout << helpTextDebug;
-#endif
- } else {
- ndbout << "Invalid argument." << endl;
- }
-}
-
-//*****************************************************************************
-//*****************************************************************************
-
-void CommandInterpreter::executeShow(char* parameters) {
-
- if (emptyString(parameters)) {
- ndbout << "Cluster Configuration" << endl
- << "---------------------" << endl;
-
- NodeId nodeId = 0;
- ndbout << _mgmtSrvr.getNodeCount(NDB_MGM_NODE_TYPE_NDB)
- << " NDB Node(s) with"
- << endl;
- while (_mgmtSrvr.getNextNodeId(&nodeId, NDB_MGM_NODE_TYPE_NDB)){
- ndbout << " Node Id = " << nodeId << endl;
- }
- ndbout << endl;
-
- nodeId = 0;
- ndbout << _mgmtSrvr.getNodeCount(NDB_MGM_NODE_TYPE_API)
- << " API Node(s) with"
- << endl;
- while (_mgmtSrvr.getNextNodeId(&nodeId, NDB_MGM_NODE_TYPE_API)){
- ndbout << " Node Id = " << nodeId << endl;
- }
- ndbout << endl;
-
- nodeId = 0;
- ndbout << _mgmtSrvr.getNodeCount(NDB_MGM_NODE_TYPE_MGM)
- << " MGM Node(s) with"
- << endl;
- while (_mgmtSrvr.getNextNodeId(&nodeId, NDB_MGM_NODE_TYPE_MGM)){
- ndbout << " Node Id = " << nodeId << endl;
- }
- ndbout << endl;
-
- ndbout << helpTextShow;
-
- return;
- } else if (strcmp(parameters, "PROPERTIES") == 0 ||
- strcmp(parameters, "PROP") == 0) {
- ndbout << "_mgmtSrvr.getConfig()->print();" << endl; /* XXX */
- } else if (strcmp(parameters, "CONFIGURATION") == 0 ||
- strcmp(parameters, "CONFIG") == 0){
- ndbout << "_mgmtSrvr.getConfigFile()->print();" << endl; /* XXX */
- _mgmtSrvr.getConfig()->printConfigFile();
- } else if (strcmp(parameters, "PARAMETERS") == 0 ||
- strcmp(parameters, "PARAMS") == 0 ||
- strcmp(parameters, "PARAM") == 0) {
- ndbout << "_mgmtSrvr.getConfigInfo()->print();" << endl; /* XXX */
- } else {
- ndbout << "Invalid argument." << endl;
- }
-}
-
-
-//*****************************************************************************
-//*****************************************************************************
-void CommandInterpreter::executeClusterLog(char* parameters) {
-
- if (parameters != 0 && strlen(parameters) != 0) {
- int severity = 7;
- int isOk = true;
- char name[12];
- bool noArgs = false;
-
- char * tmpString = strdup(parameters);
- char * tmpPtr = 0;
- char * item = strtok_r(tmpString, " ", &tmpPtr);
-
- /********************
- * CLUSTERLOG FILTER
- ********************/
- if (strcmp(item, "FILTER") == 0) {
-
- item = strtok_r(NULL, " ", &tmpPtr);
- if (item == NULL) {
- noArgs = true;
- }
- while (item != NULL) {
- snprintf(name, 12, item);
-
- if (strcmp(item, "ALL") == 0) {
- severity = 7;
- } else if (strcmp(item, "ALERT") == 0) {
- severity = 6;
- } else if (strcmp(item, "CRITICAL") == 0) {
- severity = 5;
- } else if (strcmp(item, "ERROR") == 0) {
- severity = 4;
- } else if (strcmp(item, "WARNING") == 0) {
- severity = 3;
- } else if (strcmp(item, "INFO") == 0) {
- severity = 2;
- } else if (strcmp(item, "DEBUG") == 0) {
- severity = 1;
- } else if (strcmp(item, "OFF") == 0) {
- severity = 0;
- } else {
- isOk = false;
- }
-
- item = strtok_r(NULL, " ", &tmpPtr);
- } // while(item != NULL){
- free(tmpString);
-
- if (noArgs) {
- ndbout << "Missing argument(s)." << endl;
- } else if (isOk) {
- if (_mgmtSrvr.setEventLogFilter(severity)) {
- if(strcmp(name, "ALL") == 0 || strcmp(name, "all") == 0) {
- ndbout << "All severities levels enabled." << endl;
- } else if(strcmp(name, "OFF") == 0 || strcmp(name, "off") == 0) {
- ndbout << "Cluster logging disabled." << endl;
- } else {
- ndbout << name << " events enabled." << endl;
- }
- } else {
- if(strcmp(name, "ALL") == 0) {
- ndbout << "All severities levels disabled." << endl;
- } else if(strcmp(name, "OFF") == 0) {
- ndbout << "Cluster logging enabled." << endl;
- } else {
- ndbout << name << " events disabled." << endl;
- }
- }
- } else {
- ndbout << "Invalid severity level." << endl;
- }
-
- /********************
- * CLUSTERLOG INFO
- ********************/
- } else if (strcmp(item, "INFO") == 0) {
- const char* names[] = {"DEBUG", "INFO", "WARNING", "ERROR",
- "CRITICAL", "ALERT"};
- if (_mgmtSrvr.isEventLogFilterEnabled(0)) { // OFF
- ndbout << "Cluster logging is disabled." << endl;
- }
-
- ndbout << "Severities enabled: ";
- for (int i = 0; i < 6; i++) {
- if (_mgmtSrvr.isEventLogFilterEnabled(i + 1)) {
- ndbout << names[i] << " ";
- }
- }
- ndbout << endl;
-
- /********************
- * CLUSTERLOG OFF
- ********************/
- } else if (strcmp(item, "OFF") == 0) {
- if (!_mgmtSrvr.isEventLogFilterEnabled(0)) { // ON
- if (_mgmtSrvr.setEventLogFilter(0));
- ndbout << "Cluster logging is disabled." << endl;
- } else {
- ndbout << "Cluster logging is already disabled." << endl;
- }
-
- /********************
- * CLUSTERLOG ON
- ********************/
- } else if (strcmp(item, "ON") == 0) {
- if (_mgmtSrvr.isEventLogFilterEnabled(0)) { // OFF
- if (_mgmtSrvr.setEventLogFilter(0));
- ndbout << "Cluster logging is enabled." << endl;
- } else {
- ndbout << "Cluster logging is already enabled." << endl;
- }
-
- } else {
- ndbout << "Invalid argument." << endl;
- }
-
- } else {
- ndbout << "Missing argument." << endl;
- }
-}
-
-void
-stopCallback(int nodeId, void * anyData, int errCode){
- if(errCode == 0){
- if(nodeId == 0)
- ndbout << "\nCluster has shutdown" << endl;
- else
- ndbout << "\nNode " << nodeId << " has shutdown" << endl;
- } else {
- MgmtSrvr * mgm = (MgmtSrvr *)anyData;
- char err_str[1024];
- ndbout << "Node " << nodeId << " has not shutdown: "
- << mgm->getErrorText(errCode,err_str,sizeof(err_str)) << endl;
- }
-}
-
-void
-versionCallback(int nodeId, int version, void * anyData, int errCode){
- if(errCode == 0){
- MgmtSrvr * mgm = (MgmtSrvr *)anyData;
- switch(mgm->getNodeType(nodeId)){
- case NDB_MGM_NODE_TYPE_MGM:
- {
- ndbout << "MGMT node:\t" << nodeId << " ";
- ndbout_c(" (Version %d.%d.%d)",
- getMajor(version) ,
- getMinor(version),
- getBuild(version));
- }
- break;
- case NDB_MGM_NODE_TYPE_NDB:
- {
- ndbout << "DB node:\t" << nodeId << " ";
- if(version == 0)
- ndbout << "(no version information available)" << endl;
- else {
- ndbout_c(" (Version %d.%d.%d)",
- getMajor(version) ,
- getMinor(version),
- getBuild(version));
- }
- }
- break;
- case NDB_MGM_NODE_TYPE_API:
- {
- ndbout << "API node:\t" << nodeId << " ";
- if(version == 0)
- ndbout << "(no version information available)" << endl;
- else {
- ndbout_c(" (Version %d.%d.%d)",
- getMajor(version) ,
- getMinor(version),
- getBuild(version));
- }
-
- }
- break;
- case NDB_MGM_NODE_TYPE_UNKNOWN:
- case NDB_MGM_NODE_TYPE_REP:
- abort();
- };
-
- } else {
- MgmtSrvr * mgm = (MgmtSrvr *)anyData;
- char err_str[1024];
- ndbout << mgm->getErrorText(errCode,err_str,sizeof(err_str)) << endl;
- }
-}
-
-//*****************************************************************************
-//*****************************************************************************
-void CommandInterpreter::executeStop(int processId,
- const char* parameters, bool all) {
-
- (void)parameters; // Don't want compiler warning
-
- int result = 0;
- if(all)
- result = _mgmtSrvr.stop((int *)0, false, stopCallback, this);
- else
- result = _mgmtSrvr.stopNode(processId, false, stopCallback, this);
-
- if(result != 0)
- ndbout << get_error_text(result) << endl;
-}
-
-
-void CommandInterpreter::executeStart(int processId, const char* parameters,
- bool all) {
- (void)all; // Don't want compiler warning
-
- if (! emptyString(parameters)) {
- ndbout << "No parameters expected to this command." << endl;
- return;
- }
-
- int result = _mgmtSrvr.start(processId);
- if (result != 0) {
- ndbout << get_error_text(result) << endl;
- }
-}
-
-void
-CommandInterpreter::executeRestart(int processId, const char* parameters,
- bool all) {
-
- bool nostart = false;
- bool initialstart = false;
-
- if(parameters != 0 && strlen(parameters) != 0){
- char * tmpString = strdup(parameters);
- char * tmpPtr = 0;
- char * item = strtok_r(tmpString, " ", &tmpPtr);
- while(item != NULL){
- if(strcmp(item, "-N") == 0)
- nostart = true;
- if(strcmp(item, "-I") == 0)
- initialstart = true;
- item = strtok_r(NULL, " ", &tmpPtr);
- }
- free(tmpString);
- }
- int result;
- if(all)
- result = _mgmtSrvr.restart(nostart, initialstart, false,
- 0, stopCallback, this);
- else
- result = _mgmtSrvr.restartNode(processId, nostart, initialstart, false,
- stopCallback,
- this);
- if (result != 0) {
- ndbout << get_error_text(result) << endl;
- }
-}
-
-void
-CommandInterpreter::executeDumpState(int processId, const char* parameters,
- bool all) {
-
- (void)all; // Don't want compiler warning
-
- if(parameters == 0 || strlen(parameters) == 0){
- ndbout << "Expected argument" << endl;
- return;
- }
-
- Uint32 no = 0;
- Uint32 pars[25];
-
- char * tmpString = strdup(parameters);
- char * tmpPtr = 0;
- char * item = strtok_r(tmpString, " ", &tmpPtr);
- while(item != NULL){
- if (0x0 <= strtoll(item, NULL, 0) && strtoll(item, NULL, 0) <= 0xffffffff) {
- pars[no] = strtoll(item, NULL, 0);
- } else {
- ndbout << "Illegal value in argument to signal." << endl
- << "(Value must be between 0 and 0xffffffff.)"
- << endl;
- return;
- }
- no++;
- item = strtok_r(NULL, " ", &tmpPtr);
- }
- ndbout << "Sending dump signal with data:" << endl;
- for (Uint32 i=0; i<no; i++) {
- ndbout.setHexFormat(1) << pars[i] << " ";
- if (!(i+1 & 0x3)) ndbout << endl;
- }
- free(tmpString);
- int result = _mgmtSrvr.dumpState(processId, pars, no);
- if (result != 0) {
- ndbout << get_error_text(result) << endl;
- }
-}
-
-void CommandInterpreter::executeStatus(int processId,
- const char* parameters, bool all) {
-
- (void)all; // Don't want compiler warning
-
- if (! emptyString(parameters)) {
- ndbout << "No parameters expected to this command." << endl;
- return;
- }
-
- ndb_mgm_node_status status;
- Uint32 startPhase, version, dynamicId, nodeGroup, connectCount;
- bool system;
- int result = _mgmtSrvr.status(processId,
- &status, &version, &startPhase, &system,
- &dynamicId, &nodeGroup, &connectCount);
- if(result != 0){
- ndbout << get_error_text(result) << endl;
- return;
- }
-
- ndbout << "Node " << processId << ": ";
- switch(status){
- case NDB_MGM_NODE_STATUS_NO_CONTACT:
- ndbout << "No contact" << endl;
- break;
- case NDB_MGM_NODE_STATUS_NOT_STARTED:
- ndbout << "Not started" ;
- break;
- case NDB_MGM_NODE_STATUS_STARTING:
- ndbout << "Starting (Start phase " << startPhase << ")" ;
- break;
- case NDB_MGM_NODE_STATUS_STARTED:
- ndbout << "Started" ;
- break;
- case NDB_MGM_NODE_STATUS_SHUTTING_DOWN:
- ndbout << "Shutting down " << (system == false ? "node" : "system")
- << " (Phase " << startPhase << ")"
- ;
- break;
- case NDB_MGM_NODE_STATUS_RESTARTING:
- ndbout << "Restarting" ;
- break;
- case NDB_MGM_NODE_STATUS_SINGLEUSER:
- ndbout << "Single user mode" ;
- break;
- default:
- ndbout << "Unknown state" ;
- break;
- }
- if(status != NDB_MGM_NODE_STATUS_NO_CONTACT){
-
- ndbout_c(" (Version %d.%d.%d)",
- getMajor(version) ,
- getMinor(version),
- getBuild(version));
-
- // NOTE It's possible to print dynamicId and nodeGroup here ...
- // ndbout << ", " <<dynamicId<<", "<<nodeGroup<<endl;
- }
-}
-
-
-
-//*****************************************************************************
-//*****************************************************************************
-void CommandInterpreter::executeLogLevel(int processId,
- const char* parameters, bool all) {
-#if 0
- (void)all; // Don't want compiler warning
- SetLogLevelOrd logLevel; logLevel.clear();
-
- if (emptyString(parameters) || (strcmp(parameters, "ALL") == 0)) {
- for(Uint32 i = 0; i<EventLoggerBase::noOfEventCategoryNames; i++)
- logLevel.setLogLevel(EventLoggerBase::eventCategoryNames[i].category, 7);
- } else {
-
- char * tmpString = strdup(parameters);
- char * tmpPtr = 0;
- char * item = strtok_r(tmpString, ", ", &tmpPtr);
- while(item != NULL){
- char categoryTxt[255];
- int level;
- const int m = sscanf(item, "%[^=]=%d", categoryTxt, &level);
- if(m != 2){
- free(tmpString);
- ndbout << "Invalid loglevel specification category=level" << endl;
- return;
- }
- LogLevel::EventCategory cat;
- if(!EventLoggerBase::matchEventCategory(categoryTxt,
- &cat)){
- ndbout << "Invalid loglevel specification, unknown category: "
- << categoryTxt << endl;
- free(tmpString);
- return ;
- }
- if(level < 0 || level > 15){
- ndbout << "Invalid loglevel specification row, level 0-15" << endl;
- free(tmpString);
- return ;
- }
- logLevel.setLogLevel(cat, level);
-
- item = strtok_r(NULL, ", ", &tmpPtr);
- }
- free(tmpString);
- }
-
- int result = _mgmtSrvr.setNodeLogLevel(processId, logLevel);
- if (result != 0) {
- ndbout << get_error_text(result) << endl;
- }
-#endif
-}
-
-
-
-//*****************************************************************************
-//*****************************************************************************
-void CommandInterpreter::executeError(int processId,
- const char* parameters, bool all) {
-
- (void)all; // Don't want compiler warning
-
- if (emptyString(parameters)) {
- ndbout << "Missing error number." << endl;
- return;
- }
- // Copy parameters since strtok will modify it
- char* newpar = strdup(parameters);
- char* firstParameter = strtok(newpar, " ");
-
- int errorNo;
- if (! convert(firstParameter, errorNo)) {
- ndbout << "Expected an integer." << endl;
- free(newpar);
- return;
- }
-
- char* allAfterFirstParameter = strtok(NULL, "\0");
- if (! emptyString(allAfterFirstParameter)) {
- ndbout << "Nothing expected after error number." << endl;
- free(newpar);
- return;
- }
-
- int result = _mgmtSrvr.insertError(processId, errorNo);
- if (result != 0) {
- ndbout << get_error_text(result) << endl;
- }
- free(newpar);
-}
-
-
-
-//******************************************************************************
-//******************************************************************************
-void CommandInterpreter::executeTrace(int processId,
- const char* parameters, bool all) {
-
- (void)all; // Don't want compiler warning
-
- if (emptyString(parameters)) {
- ndbout << "Missing trace number." << endl;
- return;
- }
-
- char* newpar = strdup(parameters);
- char* firstParameter = strtok(newpar, " ");
-
-
- int traceNo;
- if (! convert(firstParameter, traceNo)) {
- ndbout << "Expected an integer." << endl;
- free(newpar);
- return;
- }
-
- char* allAfterFirstParameter = strtok(NULL, "\0");
-
- if (! emptyString(allAfterFirstParameter)) {
- ndbout << "Nothing expected after trace number." << endl;
- free(newpar);
- return;
- }
-
- int result = _mgmtSrvr.setTraceNo(processId, traceNo);
- if (result != 0) {
- ndbout << get_error_text(result) << endl;
- }
- free(newpar);
-}
-
-
-
-//******************************************************************************
-//******************************************************************************
-void CommandInterpreter::executeLog(int processId,
- const char* parameters, bool all) {
-
- (void)all; // Don't want compiler warning
-
- Vector<BaseString> blocks;
- if (! parseBlockSpecification(parameters, blocks)) {
- return;
- }
-
- int result = _mgmtSrvr.setSignalLoggingMode(processId, MgmtSrvr::InOut, blocks);
- if (result != 0) {
- ndbout << get_error_text(result) << endl;
- }
-
-}
-
-
-
-//******************************************************************************
-//******************************************************************************
void CommandInterpreter::executeLogIn(int processId,
const char* parameters, bool all) {
@@ -1047,210 +308,38 @@ void CommandInterpreter::executeLogOff(int processId,
}
-//******************************************************************************
-//******************************************************************************
-void CommandInterpreter::executeTestOn(int processId,
- const char* parameters, bool all) {
+void CommandInterpreter::executeTrace(int processId,
+ const char* parameters, bool all) {
(void)all; // Don't want compiler warning
- if (! emptyString(parameters)) {
- ndbout << "No parameters expected to this command." << endl;
+ if (emptyString(parameters)) {
+ ndbout << "Missing trace number." << endl;
return;
}
- int result = _mgmtSrvr.startSignalTracing(processId);
- if (result != 0) {
- ndbout << get_error_text(result) << endl;
- }
-
-}
-
-//******************************************************************************
-//******************************************************************************
-void CommandInterpreter::executeTestOff(int processId,
- const char* parameters, bool all) {
+ char* newpar = strdup(parameters);
+ char* firstParameter = strtok(newpar, " ");
- (void)all; // Don't want compiler warning
- if (! emptyString(parameters)) {
- ndbout << "No parameters expected to this command." << endl;
+ int traceNo;
+ if (! convert(firstParameter, traceNo)) {
+ ndbout << "Expected an integer." << endl;
+ free(newpar);
return;
}
- int result = _mgmtSrvr.stopSignalTracing(processId);
- if (result != 0) {
- ndbout << get_error_text(result) << endl;
- }
-
-}
-
-//*****************************************************************************
-//*****************************************************************************
-void CommandInterpreter::executeEventReporting(int processId,
- const char* parameters,
- bool all) {
-#if 0
- (void)all; // Don't want compiler warning
- SetLogLevelOrd logLevel; logLevel.clear();
-
- if (emptyString(parameters) || (strcmp(parameters, "ALL") == 0)) {
- for(Uint32 i = 0; i<EventLoggerBase::noOfEventCategoryNames; i++)
- logLevel.setLogLevel(EventLoggerBase::eventCategoryNames[i].category, 7);
- } else {
-
- char * tmpString = strdup(parameters);
- char * tmpPtr = 0;
- char * item = strtok_r(tmpString, ", ", &tmpPtr);
- while(item != NULL){
- char categoryTxt[255];
- int level;
- const int m = sscanf(item, "%[^=]=%d", categoryTxt, &level);
- if(m != 2){
- free(tmpString);
- ndbout << "Invalid loglevel specification category=level" << endl;
- return;
- }
- LogLevel::EventCategory cat;
- if(!EventLoggerBase::matchEventCategory(categoryTxt,
- &cat)){
- ndbout << "Invalid loglevel specification, unknown category: "
- << categoryTxt << endl;
- free(tmpString);
- return ;
- }
- if(level < 0 || level > 15){
- ndbout << "Invalid loglevel specification row, level 0-15" << endl;
- free(tmpString);
- return ;
- }
- logLevel.setLogLevel(cat, level);
-
- item = strtok_r(NULL, ", ", &tmpPtr);
- }
- free(tmpString);
- }
- ndbout_c("processId %d", processId);
- int result = _mgmtSrvr.setEventReportingLevel(processId, logLevel);
- if (result != 0) {
- ndbout << get_error_text(result) << endl;
- }
-#endif
-}
-
-void
-CommandInterpreter::executeStartBackup(char* parameters) {
- Uint32 backupId;
- int result = _mgmtSrvr.startBackup(backupId);
- if (result != 0) {
- ndbout << get_error_text(result) << endl;
- } else {
- // ndbout << "Start of backup ordered" << endl;
- }
-}
+ char* allAfterFirstParameter = strtok(NULL, "\0");
-void
-CommandInterpreter::executeAbortBackup(char* parameters) {
- strtok(parameters, " ");
- char* id = strtok(NULL, "\0");
- int bid = -1;
- if(id == 0 || sscanf(id, "%d", &bid) != 1){
- ndbout << "Invalid arguments: expected <BackupId>" << endl;
+ if (! emptyString(allAfterFirstParameter)) {
+ ndbout << "Nothing expected after trace number." << endl;
+ free(newpar);
return;
}
- int result = _mgmtSrvr.abortBackup(bid);
- if (result != 0) {
- ndbout << get_error_text(result) << endl;
- } else {
- ndbout << "Abort of backup " << bid << " ordered" << endl;
- }
-}
-
-
-void
-CommandInterpreter::executeEnterSingleUser(char* parameters) {
- strtok(parameters, " ");
- char* id = strtok(NULL, " ");
- id = strtok(NULL, " ");
- id = strtok(NULL, "\0");
- int nodeId = -1;
- if(id == 0 || sscanf(id, "%d", &nodeId) != 1){
- ndbout << "Invalid arguments: expected <NodeId>" << endl;
- return;
- }
- int result = _mgmtSrvr.enterSingleUser(0, nodeId,0,0);
+ int result = _mgmtSrvr.setTraceNo(processId, traceNo);
if (result != 0) {
ndbout << get_error_text(result) << endl;
- } else {
- ndbout << "Entering single user mode, granting access for node "
- << nodeId << " OK." << endl;
}
-}
-
-void CommandInterpreter::executeExitSingleUser(char* parameters) {
- _mgmtSrvr.exitSingleUser(0,0,0,0);
-}
-
-
-#include <NdbApiSignal.hpp>
-
-void
-CommandInterpreter::jonas(int processId, const char* parameters, bool all) {
-
- MgmtSrvr::Area51 tmp = _mgmtSrvr.getStuff();
-
- NdbApiSignal signal(0);
- Uint32 * theData = signal.getDataPtrSend();
- Uint32 data[25];
- Uint32 sec0[70];
- Uint32 sec1[123];
-
- data[0] = 12;
- data[1] = 13;
-
- unsigned i;
- for(i = 0; i<70; i++)
- sec0[i] = i;
-
- for(i = 0; i<123; i++)
- sec1[i] = 70+i;
-
- signal.set(0, CMVMI, GSN_TESTSIG, 3);
- signal.m_noOfSections = 2;
- signal.m_fragmentInfo = 1;
-
- LinearSectionPtr ptr[3];
-
- theData[0] = 3;
- theData[1] = 0;
- theData[2] = 7; // FragmentId
-
- ptr[0].sz = 2;
- ptr[0].p = &data[0];
-
- ptr[1].sz = 60;
- ptr[1].p = &sec0[0];
-
- tmp.theFacade->lock_mutex();
- tmp.theRegistry->prepareSend(&signal, 1, theData, processId, ptr);
- tmp.theFacade->unlock_mutex();
-
- signal.set(0, CMVMI, GSN_TESTSIG, 3);
- signal.m_noOfSections = 2;
- signal.m_fragmentInfo = 3;
-
- theData[0] = 0;
- theData[1] = 1;
- theData[2] = 7; // FragmentId
-
- ptr[0].sz = 10;
- ptr[0].p = &sec0[60];
-
- ptr[1].sz = 123;
- ptr[1].p = &sec1[0];
-
- tmp.theFacade->lock_mutex();
- tmp.theRegistry->prepareSend(&signal, 1, theData, processId, ptr);
- tmp.theFacade->unlock_mutex();
+ free(newpar);
}
diff --git a/ndb/src/mgmsrv/CommandInterpreter.hpp b/ndb/src/mgmsrv/CommandInterpreter.hpp
index 1a5184361d6..6b67d1a5a5f 100644
--- a/ndb/src/mgmsrv/CommandInterpreter.hpp
+++ b/ndb/src/mgmsrv/CommandInterpreter.hpp
@@ -17,52 +17,21 @@
#ifndef CommandInterpreter_H
#define CommandInterpreter_H
-//*****************************************************************************
-// Author: Peter Lind
-//*****************************************************************************
-
#include <ndb_global.h>
#include <Vector.hpp>
#include <BaseString.hpp>
class MgmtSrvr;
-/**
- * @class CommandInterpreter
- * @brief Reads command line in management client
- *
- * This class has one public method which reads a command line
- * from a stream. It then interpret that commmand line and calls a suitable
- * method in the MgmtSrvr class which executes the command.
- *
- * For command syntax, see the HELP command.
- */
class CommandInterpreter {
public:
- /**
- * Constructor
- * @param mgmtSrvr: Management server to use when executing commands
- */
CommandInterpreter(MgmtSrvr& mgmtSrvr);
-
- /**
- * Reads one line from the stream, parse the line to find
- * a command and then calls a suitable method which executes
- * the command.
- *
- * @return true until quit/bye/exit has been typed
- */
int readAndExecute();
private:
char m_err_str[1024];
const char *get_error_text(int err_no);
- /**
- * Read a string, and return a pointer to it.
- *
- * @return NULL on EOF.
- */
char *readline_gets ()
{
static char linebuffer[254];
@@ -89,70 +58,16 @@ private:
return (line_read);
}
- /**
- * Analyse the command line, after the first token.
- *
- * @param processId: DB process id to send command to or -1 if
- * command will be sent to all DB processes.
- * @param allAfterFirstToken: What the client gave after the
- * first token on the command line
- */
void analyseAfterFirstToken(int processId, char* allAfterFirstTokenCstr);
-
- /**
- * Parse the block specification part of the LOG* commands,
- * things after LOG*: [BLOCK = {ALL|<blockName>+}]
- *
- * @param allAfterLog: What the client gave after the second token
- * (LOG*) on the command line
- * @param blocks, OUT: ALL or name of all the blocks
- * @return: true if correct syntax, otherwise false
- */
bool parseBlockSpecification(const char* allAfterLog,
Vector<BaseString>& blocks);
-
- /**
- * A bunch of execute functions: Executes one of the commands
- *
- * @param processId: DB process id to send command to
- * @param parameters: What the client gave after the command name
- * on the command line.
- * For example if complete input from user is: "1 LOGLEVEL 22" then the
- * parameters argument is the string with everything after LOGLEVEL, in this
- * case "22". Each function is responsible to check the parameters argument.
- */
- void executeHelp(char* parameters);
- void executeShow(char* parameters);
- void executeRun(char* parameters);
- void executeInfo(char* parameters);
- void executeClusterLog(char* parameters);
public:
- void executeStop(int processId, const char* parameters, bool all);
- void executeStart(int processId, const char* parameters, bool all);
- void executeRestart(int processId, const char* parameters, bool all);
- void executeLogLevel(int processId, const char* parameters, bool all);
- void executeError(int processId, const char* parameters, bool all);
void executeTrace(int processId, const char* parameters, bool all);
- void executeLog(int processId, const char* parameters, bool all);
void executeLogIn(int processId, const char* parameters, bool all);
void executeLogOut(int processId, const char* parameters, bool all);
void executeLogOff(int processId, const char* parameters, bool all);
- void executeTestOn(int processId, const char* parameters, bool all);
- void executeTestOff(int processId, const char* parameters, bool all);
- void executeStatus(int processId, const char* parameters, bool all);
- void executeEnterSingleUser(char* parameters);
- void executeExitSingleUser(char* parameters);
- void executeEventReporting(int processId, const char* parameters, bool all);
- void executeDumpState(int processId, const char* parameters, bool all);
- void executeStartBackup(char * pars);
- void executeAbortBackup(char * pars);
-
- void jonas(int processId, const char* parameters, bool all);
- /**
- * A execute function definition
- */
public:
typedef void (CommandInterpreter::* ExecuteFunction)(int processId,
const char * param,
diff --git a/ndb/src/mgmsrv/Config.cpp b/ndb/src/mgmsrv/Config.cpp
index f9c6a23f909..5ff9cbe04ad 100644
--- a/ndb/src/mgmsrv/Config.cpp
+++ b/ndb/src/mgmsrv/Config.cpp
@@ -53,27 +53,27 @@ Config::printAllNameValuePairs(NdbOut &out,
if(!section->contains(n))
continue;
- if (m_info.getStatus(section, n) == ConfigInfo::INTERNAL)
+ if (m_info.getStatus(section, n) == ConfigInfo::CI_INTERNAL)
continue;
- if (m_info.getStatus(section, n) == ConfigInfo::DEPRICATED)
+ if (m_info.getStatus(section, n) == ConfigInfo::CI_DEPRICATED)
continue;
- if (m_info.getStatus(section, n) == ConfigInfo::NOTIMPLEMENTED)
+ if (m_info.getStatus(section, n) == ConfigInfo::CI_NOTIMPLEMENTED)
continue;
out << n << ": ";
switch (m_info.getType(section, n)) {
- case ConfigInfo::INT:
+ case ConfigInfo::CI_INT:
MGM_REQUIRE(prop->get(n, &int_value));
out << int_value;
break;
- case ConfigInfo::INT64:
+ case ConfigInfo::CI_INT64:
MGM_REQUIRE(prop->get(n, &int_64));
out << int_64;
break;
- case ConfigInfo::BOOL:
+ case ConfigInfo::CI_BOOL:
MGM_REQUIRE(prop->get(n, &int_value));
if (int_value) {
out << "Y";
@@ -81,11 +81,11 @@ Config::printAllNameValuePairs(NdbOut &out,
out << "N";
}
break;
- case ConfigInfo::STRING:
+ case ConfigInfo::CI_STRING:
MGM_REQUIRE(prop->get(n, &str_value));
out << str_value;
break;
- case ConfigInfo::SECTION:
+ case ConfigInfo::CI_SECTION:
out << "SECTION";
break;
}
diff --git a/ndb/src/mgmsrv/ConfigInfo.cpp b/ndb/src/mgmsrv/ConfigInfo.cpp
index 4af1556a0c0..800ffe2e361 100644
--- a/ndb/src/mgmsrv/ConfigInfo.cpp
+++ b/ndb/src/mgmsrv/ConfigInfo.cpp
@@ -21,6 +21,9 @@
#include <mgmapi_config_parameters.h>
#include <ndb_limits.h>
#include "InitConfigFileParser.hpp"
+#include <m_string.h>
+
+extern my_bool opt_ndb_shm;
#define MAX_LINE_LENGTH 255
#define KEY_INTERNAL 0
@@ -78,11 +81,12 @@ static bool transformSystem(InitConfigFileParser::Context & ctx, const char *);
static bool transformExternalSystem(InitConfigFileParser::Context & ctx, const char *);
static bool transformNode(InitConfigFileParser::Context & ctx, const char *);
static bool transformExtNode(InitConfigFileParser::Context & ctx, const char *);
+static bool checkConnectionSupport(InitConfigFileParser::Context & ctx, const char *);
static bool transformConnection(InitConfigFileParser::Context & ctx, const char *);
static bool applyDefaultValues(InitConfigFileParser::Context & ctx, const char *);
static bool checkMandatory(InitConfigFileParser::Context & ctx, const char *);
static bool fixPortNumber(InitConfigFileParser::Context & ctx, const char *);
-static bool fixShmkey(InitConfigFileParser::Context & ctx, const char *);
+static bool fixShmKey(InitConfigFileParser::Context & ctx, const char *);
static bool checkDbConstraints(InitConfigFileParser::Context & ctx, const char *);
static bool checkConnectionConstraints(InitConfigFileParser::Context &, const char *);
static bool checkTCPConstraints(InitConfigFileParser::Context &, const char *);
@@ -107,6 +111,11 @@ ConfigInfo::m_SectionRules[] = {
{ "REP", transformNode, 0 },
{ "EXTERNAL REP", transformExtNode, 0 },
+ { "TCP", checkConnectionSupport, 0 },
+ { "SHM", checkConnectionSupport, 0 },
+ { "SCI", checkConnectionSupport, 0 },
+ { "OSE", checkConnectionSupport, 0 },
+
{ "TCP", transformConnection, 0 },
{ "SHM", transformConnection, 0 },
{ "SCI", transformConnection, 0 },
@@ -129,15 +138,19 @@ ConfigInfo::m_SectionRules[] = {
{ "TCP", fixHostname, "HostName1" },
{ "TCP", fixHostname, "HostName2" },
+ { "SHM", fixHostname, "HostName1" },
+ { "SHM", fixHostname, "HostName2" },
{ "SCI", fixHostname, "HostName1" },
{ "SCI", fixHostname, "HostName2" },
+ { "SHM", fixHostname, "HostName1" },
+ { "SHM", fixHostname, "HostName2" },
{ "OSE", fixHostname, "HostName1" },
{ "OSE", fixHostname, "HostName2" },
{ "TCP", fixPortNumber, 0 }, // has to come after fixHostName
{ "SHM", fixPortNumber, 0 }, // has to come after fixHostName
{ "SCI", fixPortNumber, 0 }, // has to come after fixHostName
- //{ "SHM", fixShmKey, 0 },
+ { "SHM", fixShmKey, 0 },
/**
* fixExtConnection must be after fixNodeId
@@ -168,6 +181,8 @@ ConfigInfo::m_SectionRules[] = {
{ "TCP", checkTCPConstraints, "HostName2" },
{ "SCI", checkTCPConstraints, "HostName1" },
{ "SCI", checkTCPConstraints, "HostName2" },
+ { "SHM", checkTCPConstraints, "HostName1" },
+ { "SHM", checkTCPConstraints, "HostName2" },
{ "*", checkMandatory, 0 },
@@ -192,6 +207,9 @@ static bool sanity_checks(Vector<ConfigInfo::ConfigRuleSection>&sections,
static bool add_node_connections(Vector<ConfigInfo::ConfigRuleSection>&sections,
struct InitConfigFileParser::Context &ctx,
const char * rule_data);
+static bool set_connection_priorities(Vector<ConfigInfo::ConfigRuleSection>&sections,
+ struct InitConfigFileParser::Context &ctx,
+ const char * rule_data);
static bool add_server_ports(Vector<ConfigInfo::ConfigRuleSection>&sections,
struct InitConfigFileParser::Context &ctx,
const char * rule_data);
@@ -203,6 +221,7 @@ const ConfigInfo::ConfigRule
ConfigInfo::m_ConfigRules[] = {
{ sanity_checks, 0 },
{ add_node_connections, 0 },
+ { set_connection_priorities, 0 },
{ add_server_ports, 0 },
{ check_node_vs_replicas, 0 },
{ 0, 0 }
@@ -256,9 +275,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"COMPUTER",
"COMPUTER",
"Computer section",
- ConfigInfo::INTERNAL,
+ ConfigInfo::CI_INTERNAL,
false,
- ConfigInfo::SECTION,
+ ConfigInfo::CI_SECTION,
0,
0, 0 },
@@ -267,9 +286,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"Id",
"COMPUTER",
"Name of computer",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::STRING,
+ ConfigInfo::CI_STRING,
MANDATORY,
0, 0 },
@@ -278,9 +297,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"HostName",
"COMPUTER",
"Hostname of computer (e.g. mysql.com)",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::STRING,
+ ConfigInfo::CI_STRING,
MANDATORY,
0, 0 },
@@ -289,9 +308,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"ByteOrder",
"COMPUTER",
0,
- ConfigInfo::DEPRICATED,
+ ConfigInfo::CI_DEPRICATED,
false,
- ConfigInfo::STRING,
+ ConfigInfo::CI_STRING,
UNDEFINED,
0,
0 },
@@ -304,9 +323,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"SYSTEM",
"SYSTEM",
"System section",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::SECTION,
+ ConfigInfo::CI_SECTION,
(const char *)CFG_SECTION_SYSTEM,
0, 0 },
@@ -315,9 +334,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"Name",
"SYSTEM",
"Name of system (NDB Cluster)",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::STRING,
+ ConfigInfo::CI_STRING,
MANDATORY,
0, 0 },
@@ -326,9 +345,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"ReplicationRole",
"SYSTEM",
"Role in Global Replication (None, Primary, or Standby)",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::STRING,
+ ConfigInfo::CI_STRING,
UNDEFINED,
0, 0 },
@@ -337,9 +356,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"PrimaryMGMNode",
"SYSTEM",
"Node id of Primary "MGM_TOKEN_PRINT" node",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
"0",
"0",
STR_VALUE(MAX_INT_RNIL) },
@@ -349,9 +368,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"ConfigGenerationNumber",
"SYSTEM",
"Configuration generation number",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
"0",
"0",
STR_VALUE(MAX_INT_RNIL) },
@@ -364,9 +383,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
DB_TOKEN,
DB_TOKEN,
"Node section",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::SECTION,
+ ConfigInfo::CI_SECTION,
(const char *)NODE_TYPE_DB,
0, 0
},
@@ -376,9 +395,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"HostName",
DB_TOKEN,
"Name of computer for this node",
- ConfigInfo::INTERNAL,
+ ConfigInfo::CI_INTERNAL,
false,
- ConfigInfo::STRING,
+ ConfigInfo::CI_STRING,
UNDEFINED,
0, 0 },
@@ -387,9 +406,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"System",
DB_TOKEN,
"Name of system for this node",
- ConfigInfo::INTERNAL,
+ ConfigInfo::CI_INTERNAL,
false,
- ConfigInfo::STRING,
+ ConfigInfo::CI_STRING,
UNDEFINED,
0, 0 },
@@ -398,9 +417,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"Id",
DB_TOKEN,
"Number identifying the database node ("DB_TOKEN_PRINT")",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
MANDATORY,
"1",
STR_VALUE(MAX_NODES) },
@@ -410,9 +429,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"ServerPort",
DB_TOKEN,
"Port used to setup transporter",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
UNDEFINED,
"1",
STR_VALUE(MAX_INT_RNIL) },
@@ -422,9 +441,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"NoOfReplicas",
DB_TOKEN,
"Number of copies of all data in the database (1-4)",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
MANDATORY,
"1",
"4" },
@@ -434,9 +453,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"MaxNoOfAttributes",
DB_TOKEN,
"Total number of attributes stored in database. I.e. sum over all tables",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
"1000",
"32",
STR_VALUE(MAX_INT_RNIL) },
@@ -446,9 +465,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"MaxNoOfTables",
DB_TOKEN,
"Total number of tables stored in the database",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
"128",
"8",
STR_VALUE(MAX_INT_RNIL) },
@@ -458,9 +477,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"MaxNoOfOrderedIndexes",
DB_TOKEN,
"Total number of ordered indexes that can be defined in the system",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
"128",
"0",
STR_VALUE(MAX_INT_RNIL) },
@@ -470,9 +489,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"MaxNoOfUniqueHashIndexes",
DB_TOKEN,
"Total number of unique hash indexes that can be defined in the system",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
"64",
"0",
STR_VALUE(MAX_INT_RNIL) },
@@ -482,9 +501,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"MaxNoOfIndexes",
DB_TOKEN,
"Total number of indexes that can be defined in the system",
- ConfigInfo::DEPRICATED,
+ ConfigInfo::CI_DEPRICATED,
false,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
"128",
"0",
STR_VALUE(MAX_INT_RNIL) },
@@ -494,9 +513,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"MaxNoOfConcurrentIndexOperations",
DB_TOKEN,
"Total number of index operations that can execute simultaneously on one "DB_TOKEN_PRINT" node",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
"8K",
"0",
STR_VALUE(MAX_INT_RNIL)
@@ -507,9 +526,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"MaxNoOfTriggers",
DB_TOKEN,
"Total number of triggers that can be defined in the system",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
"768",
"0",
STR_VALUE(MAX_INT_RNIL) },
@@ -519,9 +538,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"MaxNoOfFiredTriggers",
DB_TOKEN,
"Total number of triggers that can fire simultaneously in one "DB_TOKEN_PRINT" node",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
"4000",
"0",
STR_VALUE(MAX_INT_RNIL) },
@@ -531,9 +550,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"ExecuteOnComputer",
DB_TOKEN,
"String referencing an earlier defined COMPUTER",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::STRING,
+ ConfigInfo::CI_STRING,
UNDEFINED,
0, 0 },
@@ -542,9 +561,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"MaxNoOfSavedMessages",
DB_TOKEN,
"Max number of error messages in error log and max number of trace files",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
true,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
"25",
"0",
STR_VALUE(MAX_INT_RNIL) },
@@ -554,9 +573,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"LockPagesInMainMemory",
DB_TOKEN,
"If set to yes, then NDB Cluster data will not be swapped out to disk",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
true,
- ConfigInfo::BOOL,
+ ConfigInfo::CI_BOOL,
"false",
"false",
"true" },
@@ -566,9 +585,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"TimeBetweenWatchDogCheck",
DB_TOKEN,
"Time between execution checks inside a database node",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
true,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
"6000",
"70",
STR_VALUE(MAX_INT_RNIL) },
@@ -578,9 +597,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"StopOnError",
DB_TOKEN,
"If set to N, "DB_TOKEN_PRINT" automatically restarts/recovers in case of node failure",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
true,
- ConfigInfo::BOOL,
+ ConfigInfo::CI_BOOL,
"true",
"false",
"true" },
@@ -590,9 +609,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"RestartOnErrorInsert",
DB_TOKEN,
"See src/kernel/vm/Emulator.hpp NdbRestartType for details",
- ConfigInfo::INTERNAL,
+ ConfigInfo::CI_INTERNAL,
true,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
"2",
"0",
"4" },
@@ -602,9 +621,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"MaxNoOfConcurrentOperations",
DB_TOKEN,
"Max number of operation records in transaction coordinator",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
"32k",
"32",
STR_VALUE(MAX_INT_RNIL) },
@@ -614,9 +633,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"MaxNoOfLocalOperations",
DB_TOKEN,
"Max number of operation records defined in the local storage node",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
UNDEFINED,
"32",
STR_VALUE(MAX_INT_RNIL) },
@@ -626,9 +645,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"MaxNoOfLocalScans",
DB_TOKEN,
"Max number of fragment scans in parallel in the local storage node",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
UNDEFINED,
"32",
STR_VALUE(MAX_INT_RNIL) },
@@ -638,9 +657,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"BatchSizePerLocalScan",
DB_TOKEN,
"Used to calculate the number of lock records for scan with hold lock",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
STR_VALUE(DEF_BATCH_SIZE),
"1",
STR_VALUE(MAX_PARALLEL_OP_PER_SCAN) },
@@ -650,9 +669,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"MaxNoOfConcurrentTransactions",
DB_TOKEN,
"Max number of transaction executing concurrently on the "DB_TOKEN_PRINT" node",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
"4096",
"32",
STR_VALUE(MAX_INT_RNIL) },
@@ -662,9 +681,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"MaxNoOfConcurrentScans",
DB_TOKEN,
"Max number of scans executing concurrently on the "DB_TOKEN_PRINT" node",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
"256",
"2",
"500" },
@@ -674,9 +693,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"TransactionBufferMemory",
DB_TOKEN,
"Dynamic buffer space (in bytes) for key and attribute data allocated for each "DB_TOKEN_PRINT" node",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
"1M",
"1K",
STR_VALUE(MAX_INT_RNIL) },
@@ -686,9 +705,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"IndexMemory",
DB_TOKEN,
"Number bytes on each "DB_TOKEN_PRINT" node allocated for storing indexes",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::INT64,
+ ConfigInfo::CI_INT64,
"18M",
"1M",
"1024G" },
@@ -698,9 +717,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"DataMemory",
DB_TOKEN,
"Number bytes on each "DB_TOKEN_PRINT" node allocated for storing data",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::INT64,
+ ConfigInfo::CI_INT64,
"80M",
"1M",
"1024G" },
@@ -710,9 +729,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"UndoIndexBuffer",
DB_TOKEN,
"Number bytes on each "DB_TOKEN_PRINT" node allocated for writing UNDO logs for index part",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
"2M",
"1M",
STR_VALUE(MAX_INT_RNIL)},
@@ -722,9 +741,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"UndoDataBuffer",
DB_TOKEN,
"Number bytes on each "DB_TOKEN_PRINT" node allocated for writing UNDO logs for data part",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
"16M",
"1M",
STR_VALUE(MAX_INT_RNIL)},
@@ -734,9 +753,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"RedoBuffer",
DB_TOKEN,
"Number bytes on each "DB_TOKEN_PRINT" node allocated for writing REDO logs",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
"8M",
"1M",
STR_VALUE(MAX_INT_RNIL)},
@@ -746,9 +765,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"LongMessageBuffer",
DB_TOKEN,
"Number bytes on each "DB_TOKEN_PRINT" node allocated for internal long messages",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
"1M",
"512k",
STR_VALUE(MAX_INT_RNIL)},
@@ -758,9 +777,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"StartPartialTimeout",
DB_TOKEN,
"Time to wait before trying to start wo/ all nodes. 0=Wait forever",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
true,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
"30000",
"0",
STR_VALUE(MAX_INT_RNIL) },
@@ -770,9 +789,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"StartPartitionedTimeout",
DB_TOKEN,
"Time to wait before trying to start partitioned. 0=Wait forever",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
true,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
"60000",
"0",
STR_VALUE(MAX_INT_RNIL) },
@@ -782,9 +801,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"StartFailureTimeout",
DB_TOKEN,
"Time to wait before terminating. 0=Wait forever",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
true,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
"0",
"0",
STR_VALUE(MAX_INT_RNIL) },
@@ -794,9 +813,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"HeartbeatIntervalDbDb",
DB_TOKEN,
"Time between "DB_TOKEN_PRINT"-"DB_TOKEN_PRINT" heartbeats. "DB_TOKEN_PRINT" considered dead after 3 missed HBs",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
true,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
"1500",
"10",
STR_VALUE(MAX_INT_RNIL) },
@@ -806,9 +825,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"HeartbeatIntervalDbApi",
DB_TOKEN,
"Time between "API_TOKEN_PRINT"-"DB_TOKEN_PRINT" heartbeats. "API_TOKEN_PRINT" connection closed after 3 missed HBs",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
true,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
"1500",
"100",
STR_VALUE(MAX_INT_RNIL) },
@@ -818,9 +837,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"TimeBetweenLocalCheckpoints",
DB_TOKEN,
"Time between taking snapshots of the database (expressed in 2log of bytes)",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
true,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
"20",
"0",
"31" },
@@ -830,9 +849,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"TimeBetweenGlobalCheckpoints",
DB_TOKEN,
"Time between doing group commit of transactions to disk",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
true,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
"2000",
"10",
"32000" },
@@ -842,9 +861,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"NoOfFragmentLogFiles",
DB_TOKEN,
"No of 16 Mbyte Redo log files in each of 4 file sets belonging to "DB_TOKEN_PRINT" node",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
"8",
"1",
STR_VALUE(MAX_INT_RNIL) },
@@ -854,9 +873,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"MaxNoOfOpenFiles",
DB_TOKEN,
"Max number of files open per "DB_TOKEN_PRINT" node.(One thread is created per file)",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
"40",
"20",
"256" },
@@ -867,9 +886,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"TimeBetweenInactiveTransactionAbortCheck",
DB_TOKEN,
"Time between inactive transaction checks",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
true,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
"1000",
"1000",
STR_VALUE(MAX_INT_RNIL) },
@@ -883,9 +902,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"to execute or send another part (query, statement) of the transaction.\n"
"If the application takes too long time, the transaction gets aborted.\n"
"Timeout set to 0 means that we don't timeout at all on application wait.",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
true,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
STR_VALUE(MAX_INT_RNIL),
"0",
STR_VALUE(MAX_INT_RNIL) },
@@ -898,9 +917,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"This is the time the transaction coordinator waits for each database node\n"
"of the transaction to execute a request. If the database node takes too\n"
"long time, the transaction gets aborted.",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
true,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
"1200",
"50",
STR_VALUE(MAX_INT_RNIL) },
@@ -910,9 +929,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"NoOfDiskPagesToDiskDuringRestartTUP",
DB_TOKEN,
"?",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
true,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
"40",
"1",
STR_VALUE(MAX_INT_RNIL) },
@@ -922,9 +941,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"NoOfDiskPagesToDiskAfterRestartTUP",
DB_TOKEN,
"?",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
true,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
"40",
"1",
STR_VALUE(MAX_INT_RNIL) },
@@ -934,9 +953,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"NoOfDiskPagesToDiskDuringRestartACC",
DB_TOKEN,
"?",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
true,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
"20",
"1",
STR_VALUE(MAX_INT_RNIL) },
@@ -946,9 +965,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"NoOfDiskPagesToDiskAfterRestartACC",
DB_TOKEN,
"?",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
true,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
"20",
"1",
STR_VALUE(MAX_INT_RNIL) },
@@ -959,9 +978,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"Diskless",
DB_TOKEN,
"Run wo/ disk",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
true,
- ConfigInfo::BOOL,
+ ConfigInfo::CI_BOOL,
"false",
"false",
"true"},
@@ -971,9 +990,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"Discless",
DB_TOKEN,
"Diskless",
- ConfigInfo::DEPRICATED,
+ ConfigInfo::CI_DEPRICATED,
true,
- ConfigInfo::BOOL,
+ ConfigInfo::CI_BOOL,
"false",
"false",
"true"},
@@ -985,9 +1004,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"ArbitrationTimeout",
DB_TOKEN,
"Max time (milliseconds) database partion waits for arbitration signal",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
"3000",
"10",
STR_VALUE(MAX_INT_RNIL) },
@@ -997,9 +1016,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"DataDir",
DB_TOKEN,
"Data directory for this node",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::STRING,
+ ConfigInfo::CI_STRING,
MYSQLCLUSTERDIR,
0, 0 },
@@ -1008,9 +1027,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"FileSystemPath",
DB_TOKEN,
"Path to directory where the "DB_TOKEN_PRINT" node stores its data (directory must exist)",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::STRING,
+ ConfigInfo::CI_STRING,
UNDEFINED,
0, 0 },
@@ -1019,9 +1038,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"LogLevelStartup",
DB_TOKEN,
"Node startup info printed on stdout",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
"1",
"0",
"15" },
@@ -1031,9 +1050,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"LogLevelShutdown",
DB_TOKEN,
"Node shutdown info printed on stdout",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
"0",
"0",
"15" },
@@ -1043,9 +1062,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"LogLevelStatistic",
DB_TOKEN,
"Transaction, operation, transporter info printed on stdout",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
"0",
"0",
"15" },
@@ -1055,9 +1074,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"LogLevelCheckpoint",
DB_TOKEN,
"Local and Global checkpoint info printed on stdout",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
"0",
"0",
"15" },
@@ -1067,9 +1086,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"LogLevelNodeRestart",
DB_TOKEN,
"Node restart, node failure info printed on stdout",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
"0",
"0",
"15" },
@@ -1079,9 +1098,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"LogLevelConnection",
DB_TOKEN,
"Node connect/disconnect info printed on stdout",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
"0",
"0",
"15" },
@@ -1091,9 +1110,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"LogLevelError",
DB_TOKEN,
"Transporter, heartbeat errors printed on stdout",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
"0",
"0",
"15" },
@@ -1103,9 +1122,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"LogLevelInfo",
DB_TOKEN,
"Heartbeat and log info printed on stdout",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
"0",
"0",
"15" },
@@ -1118,9 +1137,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"ParallelBackups",
DB_TOKEN,
"Maximum number of parallel backups",
- ConfigInfo::NOTIMPLEMENTED,
+ ConfigInfo::CI_NOTIMPLEMENTED,
false,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
"1",
"1",
"1" },
@@ -1130,9 +1149,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"BackupDataDir",
DB_TOKEN,
"Path to where to store backups",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::STRING,
+ ConfigInfo::CI_STRING,
UNDEFINED,
0, 0 },
@@ -1141,9 +1160,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"BackupMemory",
DB_TOKEN,
"Total memory allocated for backups per node (in bytes)",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
"4M", // sum of BackupDataBufferSize and BackupLogBufferSize
"0",
STR_VALUE(MAX_INT_RNIL) },
@@ -1153,9 +1172,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"BackupDataBufferSize",
DB_TOKEN,
"Default size of databuffer for a backup (in bytes)",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
"2M", // remember to change BackupMemory
"0",
STR_VALUE(MAX_INT_RNIL) },
@@ -1165,9 +1184,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"BackupLogBufferSize",
DB_TOKEN,
"Default size of logbuffer for a backup (in bytes)",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
"2M", // remember to change BackupMemory
"0",
STR_VALUE(MAX_INT_RNIL) },
@@ -1177,9 +1196,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"BackupWriteSize",
DB_TOKEN,
"Default size of filesystem writes made by backup (in bytes)",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
"32K",
"0",
STR_VALUE(MAX_INT_RNIL) },
@@ -1192,9 +1211,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"REP",
"REP",
"Node section",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::SECTION,
+ ConfigInfo::CI_SECTION,
(const char *)NODE_TYPE_REP,
0, 0
},
@@ -1204,9 +1223,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"HostName",
"REP",
"Name of computer for this node",
- ConfigInfo::INTERNAL,
+ ConfigInfo::CI_INTERNAL,
false,
- ConfigInfo::STRING,
+ ConfigInfo::CI_STRING,
UNDEFINED,
0, 0 },
@@ -1215,9 +1234,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"System",
"REP",
"Name of system for this node",
- ConfigInfo::INTERNAL,
+ ConfigInfo::CI_INTERNAL,
false,
- ConfigInfo::STRING,
+ ConfigInfo::CI_STRING,
UNDEFINED,
0, 0 },
@@ -1226,9 +1245,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"Id",
"REP",
"Number identifying replication node (REP)",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
MANDATORY,
"1",
STR_VALUE(MAX_NODES) },
@@ -1238,9 +1257,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"ExecuteOnComputer",
"REP",
"String referencing an earlier defined COMPUTER",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::STRING,
+ ConfigInfo::CI_STRING,
MANDATORY,
0, 0 },
@@ -1249,9 +1268,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"HeartbeatIntervalRepRep",
"REP",
"Time between REP-REP heartbeats. Connection closed after 3 missed HBs",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
true,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
"3000",
"100",
STR_VALUE(MAX_INT_RNIL) },
@@ -1264,9 +1283,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
API_TOKEN,
API_TOKEN,
"Node section",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::SECTION,
+ ConfigInfo::CI_SECTION,
(const char *)NODE_TYPE_API,
0, 0
},
@@ -1276,9 +1295,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"HostName",
API_TOKEN,
"Name of computer for this node",
- ConfigInfo::INTERNAL,
+ ConfigInfo::CI_INTERNAL,
false,
- ConfigInfo::STRING,
+ ConfigInfo::CI_STRING,
UNDEFINED,
0, 0 },
@@ -1287,9 +1306,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"System",
API_TOKEN,
"Name of system for this node",
- ConfigInfo::INTERNAL,
+ ConfigInfo::CI_INTERNAL,
false,
- ConfigInfo::STRING,
+ ConfigInfo::CI_STRING,
UNDEFINED,
0, 0 },
@@ -1298,9 +1317,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"Id",
API_TOKEN,
"Number identifying application node ("API_TOKEN_PRINT")",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
MANDATORY,
"1",
STR_VALUE(MAX_NODES) },
@@ -1310,9 +1329,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"ExecuteOnComputer",
API_TOKEN,
"String referencing an earlier defined COMPUTER",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::STRING,
+ ConfigInfo::CI_STRING,
UNDEFINED,
0, 0 },
@@ -1321,9 +1340,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"ArbitrationRank",
API_TOKEN,
"If 0, then "API_TOKEN_PRINT" is not arbitrator. Kernel selects arbitrators in order 1, 2",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
"0",
"0",
"2" },
@@ -1333,9 +1352,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"ArbitrationDelay",
API_TOKEN,
"When asked to arbitrate, arbitrator waits this long before voting (msec)",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
"0",
"0",
STR_VALUE(MAX_INT_RNIL) },
@@ -1345,9 +1364,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"MaxScanBatchSize",
"API",
"The maximum collective batch size for one scan",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
STR_VALUE(MAX_SCAN_BATCH_SIZE),
"32k",
"16M" },
@@ -1357,9 +1376,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"BatchByteSize",
"API",
"The default batch size in bytes",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
STR_VALUE(SCAN_BATCH_SIZE),
"1k",
"1M" },
@@ -1369,9 +1388,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"BatchSize",
"API",
"The default batch size in number of records",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
STR_VALUE(DEF_BATCH_SIZE),
"1",
STR_VALUE(MAX_PARALLEL_OP_PER_SCAN) },
@@ -1384,9 +1403,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
MGM_TOKEN,
MGM_TOKEN,
"Node section",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::SECTION,
+ ConfigInfo::CI_SECTION,
(const char *)NODE_TYPE_MGM,
0, 0
},
@@ -1396,9 +1415,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"HostName",
MGM_TOKEN,
"Name of computer for this node",
- ConfigInfo::INTERNAL,
+ ConfigInfo::CI_INTERNAL,
false,
- ConfigInfo::STRING,
+ ConfigInfo::CI_STRING,
UNDEFINED,
0, 0 },
@@ -1407,9 +1426,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"DataDir",
MGM_TOKEN,
"Data directory for this node",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::STRING,
+ ConfigInfo::CI_STRING,
MYSQLCLUSTERDIR,
0, 0 },
@@ -1418,9 +1437,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"System",
MGM_TOKEN,
"Name of system for this node",
- ConfigInfo::INTERNAL,
+ ConfigInfo::CI_INTERNAL,
false,
- ConfigInfo::STRING,
+ ConfigInfo::CI_STRING,
UNDEFINED,
0, 0 },
@@ -1429,9 +1448,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"Id",
MGM_TOKEN,
"Number identifying the management server node ("MGM_TOKEN_PRINT")",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
MANDATORY,
"1",
STR_VALUE(MAX_NODES) },
@@ -1441,9 +1460,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"LogDestination",
MGM_TOKEN,
"String describing where logmessages are sent",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::STRING,
+ ConfigInfo::CI_STRING,
0,
0, 0 },
@@ -1452,9 +1471,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"ExecuteOnComputer",
MGM_TOKEN,
"String referencing an earlier defined COMPUTER",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::STRING,
+ ConfigInfo::CI_STRING,
0,
0, 0 },
@@ -1463,9 +1482,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"MaxNoOfSavedEvents",
MGM_TOKEN,
"",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
"100",
"0",
STR_VALUE(MAX_INT_RNIL) },
@@ -1475,9 +1494,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"PortNumber",
MGM_TOKEN,
"Port number to give commands to/fetch configurations from management server",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
NDB_PORT,
"0",
STR_VALUE(MAX_INT_RNIL) },
@@ -1487,9 +1506,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"PortNumberStats",
MGM_TOKEN,
"Port number used to get statistical information from a management server",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
UNDEFINED,
"0",
STR_VALUE(MAX_INT_RNIL) },
@@ -1499,9 +1518,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"ArbitrationRank",
MGM_TOKEN,
"If 0, then "MGM_TOKEN_PRINT" is not arbitrator. Kernel selects arbitrators in order 1, 2",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
"1",
"0",
"2" },
@@ -1511,9 +1530,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"ArbitrationDelay",
MGM_TOKEN,
"",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
"0",
"0",
STR_VALUE(MAX_INT_RNIL) },
@@ -1526,9 +1545,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"TCP",
"TCP",
"Connection section",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::SECTION,
+ ConfigInfo::CI_SECTION,
(const char *)CONNECTION_TYPE_TCP,
0, 0
},
@@ -1538,9 +1557,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"HostName1",
"TCP",
"Name/IP of computer on one side of the connection",
- ConfigInfo::INTERNAL,
+ ConfigInfo::CI_INTERNAL,
false,
- ConfigInfo::STRING,
+ ConfigInfo::CI_STRING,
UNDEFINED,
0, 0 },
@@ -1549,9 +1568,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"HostName2",
"TCP",
"Name/IP of computer on one side of the connection",
- ConfigInfo::INTERNAL,
+ ConfigInfo::CI_INTERNAL,
false,
- ConfigInfo::STRING,
+ ConfigInfo::CI_STRING,
UNDEFINED,
0, 0 },
@@ -1560,9 +1579,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"NodeId1",
"TCP",
"Id of node ("DB_TOKEN_PRINT", "API_TOKEN_PRINT" or "MGM_TOKEN_PRINT") on one side of the connection",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::STRING,
+ ConfigInfo::CI_STRING,
MANDATORY,
0, 0 },
@@ -1571,20 +1590,31 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"NodeId2",
"TCP",
"Id of node ("DB_TOKEN_PRINT", "API_TOKEN_PRINT" or "MGM_TOKEN_PRINT") on one side of the connection",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::STRING,
+ ConfigInfo::CI_STRING,
MANDATORY,
0, 0 },
{
+ CFG_CONNECTION_GROUP,
+ "Group",
+ "TCP",
+ "",
+ ConfigInfo::CI_USED,
+ false,
+ ConfigInfo::CI_INT,
+ "55",
+ "0", "200" },
+
+ {
CFG_CONNECTION_SEND_SIGNAL_ID,
"SendSignalId",
"TCP",
"Sends id in each signal. Used in trace files.",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::BOOL,
+ ConfigInfo::CI_BOOL,
"true",
"false",
"true" },
@@ -1595,9 +1625,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"Checksum",
"TCP",
"If checksum is enabled, all signals between nodes are checked for errors",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::BOOL,
+ ConfigInfo::CI_BOOL,
"false",
"false",
"true" },
@@ -1607,9 +1637,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"PortNumber",
"TCP",
"Port used for this transporter",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
MANDATORY,
"0",
STR_VALUE(MAX_INT_RNIL) },
@@ -1619,9 +1649,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"SendBufferMemory",
"TCP",
"Bytes of buffer for signals sent from this node",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
"256K",
"16K",
STR_VALUE(MAX_INT_RNIL) },
@@ -1631,9 +1661,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"ReceiveBufferMemory",
"TCP",
"Bytes of buffer for signals received by this node",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
"64K",
"16K",
STR_VALUE(MAX_INT_RNIL) },
@@ -1643,9 +1673,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"Proxy",
"TCP",
"",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::STRING,
+ ConfigInfo::CI_STRING,
UNDEFINED,
0, 0 },
@@ -1654,9 +1684,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"NodeId1_System",
"TCP",
"System for node 1 in connection",
- ConfigInfo::INTERNAL,
+ ConfigInfo::CI_INTERNAL,
false,
- ConfigInfo::STRING,
+ ConfigInfo::CI_STRING,
UNDEFINED,
0, 0 },
@@ -1665,9 +1695,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"NodeId2_System",
"TCP",
"System for node 2 in connection",
- ConfigInfo::INTERNAL,
+ ConfigInfo::CI_INTERNAL,
false,
- ConfigInfo::STRING,
+ ConfigInfo::CI_STRING,
UNDEFINED,
0, 0 },
@@ -1680,54 +1710,87 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"SHM",
"SHM",
"Connection section",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::SECTION,
+ ConfigInfo::CI_SECTION,
(const char *)CONNECTION_TYPE_SHM,
0, 0 },
{
- CFG_CONNECTION_NODE_1,
- "NodeId1",
+ CFG_CONNECTION_HOSTNAME_1,
+ "HostName1",
"SHM",
- "Id of node ("DB_TOKEN_PRINT", "API_TOKEN_PRINT" or "MGM_TOKEN_PRINT") on one side of the connection",
- ConfigInfo::USED,
+ "Name/IP of computer on one side of the connection",
+ ConfigInfo::CI_INTERNAL,
false,
- ConfigInfo::STRING,
- MANDATORY,
+ ConfigInfo::CI_STRING,
+ UNDEFINED,
0, 0 },
-
+
+ {
+ CFG_CONNECTION_HOSTNAME_2,
+ "HostName2",
+ "SHM",
+ "Name/IP of computer on one side of the connection",
+ ConfigInfo::CI_INTERNAL,
+ false,
+ ConfigInfo::CI_STRING,
+ UNDEFINED,
+ 0, 0 },
+
{
CFG_CONNECTION_SERVER_PORT,
"PortNumber",
"SHM",
"Port used for this transporter",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
MANDATORY,
"0",
STR_VALUE(MAX_INT_RNIL) },
{
+ CFG_CONNECTION_NODE_1,
+ "NodeId1",
+ "SHM",
+ "Id of node ("DB_TOKEN_PRINT", "API_TOKEN_PRINT" or "MGM_TOKEN_PRINT") on one side of the connection",
+ ConfigInfo::CI_USED,
+ false,
+ ConfigInfo::CI_STRING,
+ MANDATORY,
+ 0, 0 },
+
+ {
CFG_CONNECTION_NODE_2,
"NodeId2",
"SHM",
"Id of node ("DB_TOKEN_PRINT", "API_TOKEN_PRINT" or "MGM_TOKEN_PRINT") on one side of the connection",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::STRING,
+ ConfigInfo::CI_STRING,
MANDATORY,
0, 0 },
{
+ CFG_CONNECTION_GROUP,
+ "Group",
+ "SHM",
+ "",
+ ConfigInfo::CI_USED,
+ false,
+ ConfigInfo::CI_INT,
+ "35",
+ "0", "200" },
+
+ {
CFG_CONNECTION_SEND_SIGNAL_ID,
"SendSignalId",
"SHM",
"Sends id in each signal. Used in trace files.",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::BOOL,
+ ConfigInfo::CI_BOOL,
"false",
"false",
"true" },
@@ -1738,9 +1801,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"Checksum",
"SHM",
"If checksum is enabled, all signals between nodes are checked for errors",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::BOOL,
+ ConfigInfo::CI_BOOL,
"true",
"false",
"true" },
@@ -1750,10 +1813,10 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"ShmKey",
"SHM",
"A shared memory key",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::INT,
- MANDATORY,
+ ConfigInfo::CI_INT,
+ "0",
"0",
STR_VALUE(MAX_INT_RNIL) },
@@ -1762,9 +1825,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"ShmSize",
"SHM",
"Size of shared memory segment",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
"1M",
"4K",
STR_VALUE(MAX_INT_RNIL) },
@@ -1774,9 +1837,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"NodeId1_System",
"SHM",
"System for node 1 in connection",
- ConfigInfo::INTERNAL,
+ ConfigInfo::CI_INTERNAL,
false,
- ConfigInfo::STRING,
+ ConfigInfo::CI_STRING,
UNDEFINED,
0, 0 },
@@ -1785,9 +1848,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"NodeId2_System",
"SHM",
"System for node 2 in connection",
- ConfigInfo::INTERNAL,
+ ConfigInfo::CI_INTERNAL,
false,
- ConfigInfo::STRING,
+ ConfigInfo::CI_STRING,
UNDEFINED,
0, 0 },
@@ -1799,9 +1862,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"SCI",
"SCI",
"Connection section",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::SECTION,
+ ConfigInfo::CI_SECTION,
(const char *)CONNECTION_TYPE_SCI,
0, 0
},
@@ -1811,9 +1874,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"NodeId1",
"SCI",
"Id of node ("DB_TOKEN_PRINT", "API_TOKEN_PRINT" or "MGM_TOKEN_PRINT") on one side of the connection",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::STRING,
+ ConfigInfo::CI_STRING,
MANDATORY,
"0",
STR_VALUE(MAX_INT_RNIL) },
@@ -1823,21 +1886,32 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"NodeId2",
"SCI",
"Id of node ("DB_TOKEN_PRINT", "API_TOKEN_PRINT" or "MGM_TOKEN_PRINT") on one side of the connection",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::STRING,
+ ConfigInfo::CI_STRING,
MANDATORY,
"0",
STR_VALUE(MAX_INT_RNIL) },
{
+ CFG_CONNECTION_GROUP,
+ "Group",
+ "SCI",
+ "",
+ ConfigInfo::CI_USED,
+ false,
+ ConfigInfo::CI_INT,
+ "15",
+ "0", "200" },
+
+ {
CFG_CONNECTION_HOSTNAME_1,
"HostName1",
"SCI",
"Name/IP of computer on one side of the connection",
- ConfigInfo::INTERNAL,
+ ConfigInfo::CI_INTERNAL,
false,
- ConfigInfo::STRING,
+ ConfigInfo::CI_STRING,
UNDEFINED,
0, 0 },
@@ -1846,9 +1920,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"HostName2",
"SCI",
"Name/IP of computer on one side of the connection",
- ConfigInfo::INTERNAL,
+ ConfigInfo::CI_INTERNAL,
false,
- ConfigInfo::STRING,
+ ConfigInfo::CI_STRING,
UNDEFINED,
0, 0 },
@@ -1857,9 +1931,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"PortNumber",
"SCI",
"Port used for this transporter",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
MANDATORY,
"0",
STR_VALUE(MAX_INT_RNIL) },
@@ -1869,9 +1943,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"Host1SciId0",
"SCI",
"SCI-node id for adapter 0 on Host1 (a computer can have two adapters)",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
MANDATORY,
"0",
STR_VALUE(MAX_INT_RNIL) },
@@ -1881,9 +1955,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"Host1SciId1",
"SCI",
"SCI-node id for adapter 1 on Host1 (a computer can have two adapters)",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
"0",
"0",
STR_VALUE(MAX_INT_RNIL) },
@@ -1893,9 +1967,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"Host2SciId0",
"SCI",
"SCI-node id for adapter 0 on Host2 (a computer can have two adapters)",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
MANDATORY,
"0",
STR_VALUE(MAX_INT_RNIL) },
@@ -1905,9 +1979,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"Host2SciId1",
"SCI",
"SCI-node id for adapter 1 on Host2 (a computer can have two adapters)",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
"0",
"0",
STR_VALUE(MAX_INT_RNIL) },
@@ -1917,9 +1991,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"SendSignalId",
"SCI",
"Sends id in each signal. Used in trace files.",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::BOOL,
+ ConfigInfo::CI_BOOL,
"true",
"false",
"true" },
@@ -1929,9 +2003,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"Checksum",
"SCI",
"If checksum is enabled, all signals between nodes are checked for errors",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::BOOL,
+ ConfigInfo::CI_BOOL,
"false",
"false",
"true" },
@@ -1941,9 +2015,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"SendLimit",
"SCI",
"Transporter send buffer contents are sent when this no of bytes is buffered",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
"8K",
"128",
"32K" },
@@ -1953,9 +2027,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"SharedBufferSize",
"SCI",
"Size of shared memory segment",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
"1M",
"64K",
STR_VALUE(MAX_INT_RNIL) },
@@ -1965,9 +2039,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"NodeId1_System",
"SCI",
"System for node 1 in connection",
- ConfigInfo::INTERNAL,
+ ConfigInfo::CI_INTERNAL,
false,
- ConfigInfo::STRING,
+ ConfigInfo::CI_STRING,
UNDEFINED,
0, 0 },
@@ -1976,9 +2050,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"NodeId2_System",
"SCI",
"System for node 2 in connection",
- ConfigInfo::INTERNAL,
+ ConfigInfo::CI_INTERNAL,
false,
- ConfigInfo::STRING,
+ ConfigInfo::CI_STRING,
UNDEFINED,
0, 0 },
@@ -1990,9 +2064,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"OSE",
"OSE",
"Connection section",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::SECTION,
+ ConfigInfo::CI_SECTION,
(const char *)CONNECTION_TYPE_OSE,
0, 0
},
@@ -2002,9 +2076,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"HostName1",
"OSE",
"Name of computer on one side of the connection",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::STRING,
+ ConfigInfo::CI_STRING,
UNDEFINED,
0, 0 },
@@ -2013,9 +2087,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"HostName2",
"OSE",
"Name of computer on one side of the connection",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::STRING,
+ ConfigInfo::CI_STRING,
UNDEFINED,
0, 0 },
@@ -2024,9 +2098,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"NodeId1",
"OSE",
"Id of node ("DB_TOKEN_PRINT", "API_TOKEN_PRINT" or "MGM_TOKEN_PRINT") on one side of the connection",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
MANDATORY,
"0",
STR_VALUE(MAX_INT_RNIL) },
@@ -2036,9 +2110,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"NodeId2",
"OSE",
"Id of node ("DB_TOKEN_PRINT", "API_TOKEN_PRINT" or "MGM_TOKEN_PRINT") on one side of the connection",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
UNDEFINED,
"0",
STR_VALUE(MAX_INT_RNIL) },
@@ -2048,9 +2122,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"SendSignalId",
"OSE",
"Sends id in each signal. Used in trace files.",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::BOOL,
+ ConfigInfo::CI_BOOL,
"true",
"false",
"true" },
@@ -2060,9 +2134,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"Checksum",
"OSE",
"If checksum is enabled, all signals between nodes are checked for errors",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::BOOL,
+ ConfigInfo::CI_BOOL,
"false",
"false",
"true" },
@@ -2072,9 +2146,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"PrioASignalSize",
"OSE",
"Size of priority A signals (in bytes)",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
"1000",
"0",
STR_VALUE(MAX_INT_RNIL) },
@@ -2084,9 +2158,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"PrioBSignalSize",
"OSE",
"Size of priority B signals (in bytes)",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
"1000",
"0",
STR_VALUE(MAX_INT_RNIL) },
@@ -2096,9 +2170,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"ReceiveArraySize",
"OSE",
"Number of OSE signals checked for correct ordering (in no of OSE signals)",
- ConfigInfo::USED,
+ ConfigInfo::CI_USED,
false,
- ConfigInfo::INT,
+ ConfigInfo::CI_INT,
"10",
"0",
STR_VALUE(MAX_INT_RNIL) },
@@ -2108,9 +2182,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"NodeId1_System",
"OSE",
"System for node 1 in connection",
- ConfigInfo::INTERNAL,
+ ConfigInfo::CI_INTERNAL,
false,
- ConfigInfo::STRING,
+ ConfigInfo::CI_STRING,
UNDEFINED,
0, 0 },
@@ -2119,9 +2193,9 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
"NodeId2_System",
"OSE",
"System for node 2 in connection",
- ConfigInfo::INTERNAL,
+ ConfigInfo::CI_INTERNAL,
false,
- ConfigInfo::STRING,
+ ConfigInfo::CI_STRING,
UNDEFINED,
0, 0 },
};
@@ -2169,7 +2243,7 @@ ConfigInfo::ConfigInfo()
}
switch (param._type) {
- case BOOL:
+ case CI_BOOL:
{
bool tmp_bool;
require(InitConfigFileParser::convertStringToBool(param._min, tmp_bool));
@@ -2178,8 +2252,8 @@ ConfigInfo::ConfigInfo()
pinfo.put64("Max", tmp_bool);
break;
}
- case INT:
- case INT64:
+ case CI_INT:
+ case CI_INT64:
{
Uint64 tmp_uint64;
require(InitConfigFileParser::convertStringToUint64(param._min, tmp_uint64));
@@ -2188,10 +2262,10 @@ ConfigInfo::ConfigInfo()
pinfo.put64("Max", tmp_uint64);
break;
}
- case SECTION:
+ case CI_SECTION:
pinfo.put("SectionType", (Uint32)UintPtr(param._default));
break;
- case STRING:
+ case CI_STRING:
break;
}
@@ -2209,7 +2283,7 @@ ConfigInfo::ConfigInfo()
// Replace section with modified section
m_info.put(param._section, section, true);
- if(param._type != ConfigInfo::SECTION){
+ if(param._type != ConfigInfo::CI_SECTION){
Properties * p;
if(!m_systemDefaults.getCopy(param._section, &p)){
p = new Properties(true);
@@ -2218,20 +2292,20 @@ ConfigInfo::ConfigInfo()
param._default != MANDATORY){
switch (param._type)
{
- case SECTION:
+ case CI_SECTION:
break;
- case STRING:
+ case CI_STRING:
require(p->put(param._fname, param._default));
break;
- case BOOL:
+ case CI_BOOL:
{
bool tmp_bool;
require(InitConfigFileParser::convertStringToBool(param._default, default_bool));
require(p->put(param._fname, default_bool));
break;
}
- case INT:
- case INT64:
+ case CI_INT:
+ case CI_INT64:
{
Uint64 tmp_uint64;
require(InitConfigFileParser::convertStringToUint64(param._default, default_uint64));
@@ -2253,7 +2327,7 @@ ConfigInfo::ConfigInfo()
exit(-1);
}
- if(m_ParamInfo[i]._type == ConfigInfo::SECTION)
+ if(m_ParamInfo[i]._type == ConfigInfo::CI_SECTION)
continue;
const Properties * p = getInfo(m_ParamInfo[i]._section);
@@ -2413,9 +2487,9 @@ void ConfigInfo::print(const char* section) const {
Properties::Iterator it(sec);
for (const char* n = it.first(); n != NULL; n = it.next()) {
// Skip entries with different F- and P-names
- if (getStatus(sec, n) == ConfigInfo::INTERNAL) continue;
- if (getStatus(sec, n) == ConfigInfo::DEPRICATED) continue;
- if (getStatus(sec, n) == ConfigInfo::NOTIMPLEMENTED) continue;
+ if (getStatus(sec, n) == ConfigInfo::CI_INTERNAL) continue;
+ if (getStatus(sec, n) == ConfigInfo::CI_DEPRICATED) continue;
+ if (getStatus(sec, n) == ConfigInfo::CI_NOTIMPLEMENTED) continue;
print(sec, n);
}
}
@@ -2425,7 +2499,7 @@ void ConfigInfo::print(const Properties * section,
ndbout << parameter;
// ndbout << getDescription(section, parameter) << endl;
switch (getType(section, parameter)) {
- case ConfigInfo::BOOL:
+ case ConfigInfo::CI_BOOL:
ndbout << " (Boolean value)" << endl;
ndbout << getDescription(section, parameter) << endl;
if (getDefault(section, parameter) == false) {
@@ -2440,8 +2514,8 @@ void ConfigInfo::print(const Properties * section,
ndbout << endl;
break;
- case ConfigInfo::INT:
- case ConfigInfo::INT64:
+ case ConfigInfo::CI_INT:
+ case ConfigInfo::CI_INT64:
ndbout << " (Non-negative Integer)" << endl;
ndbout << getDescription(section, parameter) << endl;
if (getDefault(section, parameter) == (UintPtr)MANDATORY) {
@@ -2456,7 +2530,7 @@ void ConfigInfo::print(const Properties * section,
ndbout << endl;
break;
- case ConfigInfo::STRING:
+ case ConfigInfo::CI_STRING:
ndbout << " (String)" << endl;
ndbout << getDescription(section, parameter) << endl;
if (getDefault(section, parameter) == (UintPtr)MANDATORY) {
@@ -2466,7 +2540,7 @@ void ConfigInfo::print(const Properties * section,
}
ndbout << endl;
break;
- case ConfigInfo::SECTION:
+ case ConfigInfo::CI_SECTION:
break;
}
}
@@ -2654,11 +2728,50 @@ transformExtNode(InitConfigFileParser::Context & ctx, const char * data){
}
/**
- * Connection rule: Update "NoOfConnections"
+ * Connection rule: Check support of connection
*/
bool
-transformConnection(InitConfigFileParser::Context & ctx, const char * data){
+checkConnectionSupport(InitConfigFileParser::Context & ctx, const char * data)
+{
+ int error= 0;
+ if (strcasecmp("TCP",ctx.fname) == 0)
+ {
+ // always enabled
+ }
+ else if (strcasecmp("SHM",ctx.fname) == 0)
+ {
+#ifndef NDB_SHM_TRANSPORTER
+ error= 1;
+#endif
+ }
+ else if (strcasecmp("SCI",ctx.fname) == 0)
+ {
+#ifndef NDB_SCI_TRANSPORTER
+ error= 1;
+#endif
+ }
+ else if (strcasecmp("OSE",ctx.fname) == 0)
+ {
+#ifndef NDB_OSE_TRANSPORTER
+ error= 1;
+#endif
+ }
+ if (error)
+ {
+ ctx.reportError("Binary not compiled with this connection support, "
+ "[%s] starting at line: %d",
+ ctx.fname, ctx.m_sectionLineno);
+ return false;
+ }
+ return true;
+}
+/**
+ * Connection rule: Update "NoOfConnections"
+ */
+bool
+transformConnection(InitConfigFileParser::Context & ctx, const char * data)
+{
Uint32 connections = 0;
ctx.m_userProperties.get("NoOfConnections", &connections);
BaseString::snprintf(ctx.pname, sizeof(ctx.pname), "Connection_%d", connections);
@@ -2746,26 +2859,26 @@ applyDefaultValues(InitConfigFileParser::Context & ctx,
ConfigInfo::Status st = ctx.m_info->getStatus(ctx.m_currentInfo, name);
if(!ctx.m_currentSection->contains(name)){
switch (ctx.m_info->getType(ctx.m_currentInfo, name)){
- case ConfigInfo::INT:
- case ConfigInfo::BOOL:{
+ case ConfigInfo::CI_INT:
+ case ConfigInfo::CI_BOOL:{
Uint32 val = 0;
::require(defaults->get(name, &val));
ctx.m_currentSection->put(name, val);
break;
}
- case ConfigInfo::INT64:{
+ case ConfigInfo::CI_INT64:{
Uint64 val = 0;
::require(defaults->get(name, &val));
ctx.m_currentSection->put64(name, val);
break;
}
- case ConfigInfo::STRING:{
+ case ConfigInfo::CI_STRING:{
const char * val;
::require(defaults->get(name, &val));
ctx.m_currentSection->put(name, val);
break;
}
- case ConfigInfo::SECTION:
+ case ConfigInfo::CI_SECTION:
break;
}
}
@@ -2947,7 +3060,13 @@ fixHostname(InitConfigFileParser::Context & ctx, const char * data){
require(ctx.m_currentSection->get(buf, &id));
const Properties * node;
- require(ctx.m_config->get("Node", id, &node));
+ if(!ctx.m_config->get("Node", id, &node))
+ {
+ ctx.reportError("Unknown node: \"%d\" specified in connection "
+ "[%s] starting at line: %d",
+ id, ctx.fname, ctx.m_sectionLineno);
+ return false;
+ }
const char * hostname;
require(node->get("HostName", &hostname));
@@ -3010,7 +3129,7 @@ fixPortNumber(InitConfigFileParser::Context & ctx, const char * data){
if(!(ctx.m_userDefaults &&
ctx.m_userDefaults->get("PortNumber", &base)) &&
!ctx.m_systemDefaults->get("PortNumber", &base)) {
- base= strtoll(NDB_BASE_PORT,0,0);
+ base= strtoll(NDB_TCP_BASE_PORT,0,0);
// ctx.reportError("Cannot retrieve base port number");
// return false;
}
@@ -3025,15 +3144,32 @@ fixPortNumber(InitConfigFileParser::Context & ctx, const char * data){
<< "per connection, please remove from config. "
<< "Will be changed to " << port << endl;
ctx.m_currentSection->put("PortNumber", port, true);
- } else
+ }
+ else
+ {
ctx.m_currentSection->put("PortNumber", port);
-
+ }
DBUG_PRINT("info", ("connection %d-%d port %d host %s",
id1, id2, port, hostname.c_str()));
DBUG_RETURN(true);
}
+static
+bool
+fixShmKey(InitConfigFileParser::Context & ctx, const char *)
+{
+ Uint32 id1= 0, id2= 0, key= 0;
+ require(ctx.m_currentSection->get("NodeId1", &id1));
+ require(ctx.m_currentSection->get("NodeId2", &id2));
+ if(ctx.m_currentSection->get("ShmKey", &key))
+ return true;
+
+ key= (id1 > id2 ? id1 << 16 | id2 : id2 << 16 | id1);
+ ctx.m_currentSection->put("ShmKey", key);
+ return true;
+}
+
/**
* DB Node rule: Check various constraints
*/
@@ -3165,7 +3301,7 @@ transform(InitConfigFileParser::Context & ctx,
require(ctx.m_currentSection->getTypeOf(oldName, &oldType));
ConfigInfo::Type newType = ctx.m_info->getType(ctx.m_currentInfo, newName);
if(!((oldType == PropertiesType_Uint32 || oldType == PropertiesType_Uint64)
- && (newType == ConfigInfo::INT || newType == ConfigInfo::INT64 || newType == ConfigInfo::BOOL))){
+ && (newType == ConfigInfo::CI_INT || newType == ConfigInfo::CI_INT64 || newType == ConfigInfo::CI_BOOL))){
ndbout << "oldType: " << (int)oldType << ", newType: " << (int)newType << endl;
ctx.reportError("Unable to handle type conversion w.r.t deprication %s %s"
"- [%s] starting at line: %d",
@@ -3176,7 +3312,7 @@ transform(InitConfigFileParser::Context & ctx,
Uint64 oldVal;
require(ctx.m_currentSection->get(oldName, &oldVal));
- Uint64 newVal = (Uint64)(oldVal * mul + add);
+ Uint64 newVal = (Uint64)((Int64)oldVal * mul + add);
if(!ctx.m_info->verify(ctx.m_currentInfo, newName, newVal)){
ctx.reportError("Unable to handle deprication, new value not within bounds"
"%s %s - [%s] starting at line: %d",
@@ -3185,9 +3321,9 @@ transform(InitConfigFileParser::Context & ctx,
return false;
}
- if(newType == ConfigInfo::INT || newType == ConfigInfo::BOOL){
+ if(newType == ConfigInfo::CI_INT || newType == ConfigInfo::CI_BOOL){
require(dst.put(newName, (Uint32)newVal));
- } else if(newType == ConfigInfo::INT64) {
+ } else if(newType == ConfigInfo::CI_INT64) {
require(dst.put64(newName, newVal));
}
return true;
@@ -3269,7 +3405,7 @@ saveInConfigValues(InitConfigFileParser::Context & ctx, const char * data){
require(sec->get("Status", &status));
require(sec->get("SectionType", &typeVal));
- if(id == KEY_INTERNAL || status == ConfigInfo::INTERNAL){
+ if(id == KEY_INTERNAL || status == ConfigInfo::CI_INTERNAL){
ndbout_c("skipping section %s", ctx.fname);
break;
}
@@ -3348,11 +3484,51 @@ sanity_checks(Vector<ConfigInfo::ConfigRuleSection>&sections,
return true;
}
+static void
+add_a_connection(Vector<ConfigInfo::ConfigRuleSection>&sections,
+ struct InitConfigFileParser::Context &ctx,
+ Uint32 nodeId1, Uint32 nodeId2, bool use_shm)
+{
+ ConfigInfo::ConfigRuleSection s;
+ const char *hostname1= 0, *hostname2= 0;
+ const Properties *tmp;
+
+ require(ctx.m_config->get("Node", nodeId1, &tmp));
+ tmp->get("HostName", &hostname1);
+
+ require(ctx.m_config->get("Node", nodeId2, &tmp));
+ tmp->get("HostName", &hostname2);
+
+ char buf[16];
+ s.m_sectionData= new Properties(true);
+ BaseString::snprintf(buf, sizeof(buf), "%u", nodeId1);
+ s.m_sectionData->put("NodeId1", buf);
+ BaseString::snprintf(buf, sizeof(buf), "%u", nodeId2);
+ s.m_sectionData->put("NodeId2", buf);
+
+ if (use_shm &&
+ hostname1 && hostname1[0] &&
+ hostname2 && hostname2[0] &&
+ strcmp(hostname1,hostname2) == 0)
+ {
+ s.m_sectionType= BaseString("SHM");
+ DBUG_PRINT("info",("adding SHM connection %d %d",nodeId1,nodeId2));
+ }
+ else
+ {
+ s.m_sectionType= BaseString("TCP");
+ DBUG_PRINT("info",("adding TCP connection %d %d",nodeId1,nodeId2));
+ }
+
+ sections.push_back(s);
+}
+
static bool
add_node_connections(Vector<ConfigInfo::ConfigRuleSection>&sections,
struct InitConfigFileParser::Context &ctx,
const char * rule_data)
{
+ DBUG_ENTER("add_node_connections");
Uint32 i;
Properties * props= ctx.m_config;
Properties p_connections(true);
@@ -3377,9 +3553,10 @@ add_node_connections(Vector<ConfigInfo::ConfigRuleSection>&sections,
ctx.m_userProperties.get("NoOfNodes", &nNodes);
Properties p_db_nodes(true);
- Properties p_api_mgm_nodes(true);
+ Properties p_api_nodes(true);
+ Properties p_mgm_nodes(true);
- Uint32 i_db= 0, i_api_mgm= 0, n;
+ Uint32 i_db= 0, i_api= 0, i_mgm= 0, n;
for (i= 0, n= 0; n < nNodes; i++){
const Properties * tmp;
if(!props->get("Node", i, &tmp)) continue;
@@ -3390,9 +3567,10 @@ add_node_connections(Vector<ConfigInfo::ConfigRuleSection>&sections,
if (strcmp(type,DB_TOKEN) == 0)
p_db_nodes.put("", i_db++, i);
- else if (strcmp(type,API_TOKEN) == 0 ||
- strcmp(type,MGM_TOKEN) == 0)
- p_api_mgm_nodes.put("", i_api_mgm++, i);
+ else if (strcmp(type,API_TOKEN) == 0)
+ p_api_nodes.put("", i_api++, i);
+ else if (strcmp(type,MGM_TOKEN) == 0)
+ p_mgm_nodes.put("", i_mgm++, i);
}
Uint32 nodeId1, nodeId2, dummy;
@@ -3401,39 +3579,39 @@ add_node_connections(Vector<ConfigInfo::ConfigRuleSection>&sections,
for (Uint32 j= i+1;; j++){
if(!p_db_nodes.get("", j, &nodeId2)) break;
if(!p_connections2.get("", nodeId1+nodeId2<<16, &dummy)) {
- ConfigInfo::ConfigRuleSection s;
- s.m_sectionType= BaseString("TCP");
- s.m_sectionData= new Properties(true);
- char buf[16];
- BaseString::snprintf(buf, sizeof(buf), "%u", nodeId1);
- s.m_sectionData->put("NodeId1", buf);
- BaseString::snprintf(buf, sizeof(buf), "%u", nodeId2);
- s.m_sectionData->put("NodeId2", buf);
- sections.push_back(s);
+ add_a_connection(sections,ctx,nodeId1,nodeId2,opt_ndb_shm);
}
}
}
- for (i= 0; p_api_mgm_nodes.get("", i, &nodeId1); i++){
+ for (i= 0; p_api_nodes.get("", i, &nodeId1); i++){
if(!p_connections.get("", nodeId1, &dummy)) {
for (Uint32 j= 0;; j++){
if(!p_db_nodes.get("", j, &nodeId2)) break;
- ConfigInfo::ConfigRuleSection s;
- s.m_sectionType= BaseString("TCP");
- s.m_sectionData= new Properties(true);
- char buf[16];
- BaseString::snprintf(buf, sizeof(buf), "%u", nodeId1);
- s.m_sectionData->put("NodeId1", buf);
- BaseString::snprintf(buf, sizeof(buf), "%u", nodeId2);
- s.m_sectionData->put("NodeId2", buf);
- sections.push_back(s);
+ add_a_connection(sections,ctx,nodeId1,nodeId2,opt_ndb_shm);
}
}
}
- return true;
+ for (i= 0; p_mgm_nodes.get("", i, &nodeId1); i++){
+ if(!p_connections.get("", nodeId1, &dummy)) {
+ for (Uint32 j= 0;; j++){
+ if(!p_db_nodes.get("", j, &nodeId2)) break;
+ add_a_connection(sections,ctx,nodeId1,nodeId2,0);
+ }
+ }
+ }
+
+ DBUG_RETURN(true);
}
+static bool set_connection_priorities(Vector<ConfigInfo::ConfigRuleSection>&sections,
+ struct InitConfigFileParser::Context &ctx,
+ const char * rule_data)
+{
+ DBUG_ENTER("set_connection_priorities");
+ DBUG_RETURN(true);
+}
static bool add_server_ports(Vector<ConfigInfo::ConfigRuleSection>&sections,
struct InitConfigFileParser::Context &ctx,
@@ -3442,7 +3620,7 @@ static bool add_server_ports(Vector<ConfigInfo::ConfigRuleSection>&sections,
#if 0
Properties * props= ctx.m_config;
Properties computers(true);
- Uint32 port_base = NDB_BASE_PORT;
+ Uint32 port_base = NDB_TCP_BASE_PORT;
Uint32 nNodes;
ctx.m_userProperties.get("NoOfNodes", &nNodes);
diff --git a/ndb/src/mgmsrv/ConfigInfo.hpp b/ndb/src/mgmsrv/ConfigInfo.hpp
index 512505cbd30..dff8b34bf4a 100644
--- a/ndb/src/mgmsrv/ConfigInfo.hpp
+++ b/ndb/src/mgmsrv/ConfigInfo.hpp
@@ -38,11 +38,11 @@ static const char* UNDEFINED = 0; // Default value for undefined
*/
class ConfigInfo {
public:
- enum Type { BOOL, INT, INT64, STRING, SECTION };
- enum Status { USED, ///< Active
- DEPRICATED, ///< Can be, but shouldn't
- NOTIMPLEMENTED, ///< Is ignored.
- INTERNAL ///< Not configurable by the user
+ enum Type { CI_BOOL, CI_INT, CI_INT64, CI_STRING, CI_SECTION };
+ enum Status { CI_USED, ///< Active
+ CI_DEPRICATED, ///< Can be, but shouldn't
+ CI_NOTIMPLEMENTED, ///< Is ignored.
+ CI_INTERNAL ///< Not configurable by the user
};
/**
diff --git a/ndb/src/mgmsrv/InitConfigFileParser.cpp b/ndb/src/mgmsrv/InitConfigFileParser.cpp
index 05102255eaa..5cc5c3e9b32 100644
--- a/ndb/src/mgmsrv/InitConfigFileParser.cpp
+++ b/ndb/src/mgmsrv/InitConfigFileParser.cpp
@@ -21,6 +21,7 @@
#include "MgmtErrorReporter.hpp"
#include <NdbOut.hpp>
#include "ConfigInfo.hpp"
+#include <m_string.h>
const int MAX_LINE_LENGTH = 1024; // Max length of line of text in config file
static void trim(char *);
@@ -253,10 +254,10 @@ bool InitConfigFileParser::parseNameValuePair(Context& ctx, const char* line)
return false;
}
ConfigInfo::Status status = m_info->getStatus(ctx.m_currentInfo, fname);
- if (status == ConfigInfo::NOTIMPLEMENTED) {
+ if (status == ConfigInfo::CI_NOTIMPLEMENTED) {
ctx.reportWarning("[%s] %s not yet implemented", ctx.fname, fname);
}
- if (status == ConfigInfo::DEPRICATED) {
+ if (status == ConfigInfo::CI_DEPRICATED) {
const char * desc = m_info->getDescription(ctx.m_currentInfo, fname);
if(desc){
ctx.reportWarning("[%s] %s is depricated, use %s instead",
@@ -296,7 +297,7 @@ InitConfigFileParser::storeNameValuePair(Context& ctx,
const ConfigInfo::Type type = m_info->getType(ctx.m_currentInfo, fname);
switch(type){
- case ConfigInfo::BOOL: {
+ case ConfigInfo::CI_BOOL: {
bool value_bool;
if (!convertStringToBool(value, value_bool)) {
ctx.reportError("Illegal boolean value for parameter %s", fname);
@@ -305,8 +306,8 @@ InitConfigFileParser::storeNameValuePair(Context& ctx,
MGM_REQUIRE(ctx.m_currentSection->put(pname, value_bool));
break;
}
- case ConfigInfo::INT:
- case ConfigInfo::INT64:{
+ case ConfigInfo::CI_INT:
+ case ConfigInfo::CI_INT64:{
Uint64 value_int;
if (!convertStringToUint64(value, value_int)) {
ctx.reportError("Illegal integer value for parameter %s", fname);
@@ -319,17 +320,17 @@ InitConfigFileParser::storeNameValuePair(Context& ctx,
m_info->getMax(ctx.m_currentInfo, fname));
return false;
}
- if(type == ConfigInfo::INT){
+ if(type == ConfigInfo::CI_INT){
MGM_REQUIRE(ctx.m_currentSection->put(pname, (Uint32)value_int));
} else {
MGM_REQUIRE(ctx.m_currentSection->put64(pname, value_int));
}
break;
}
- case ConfigInfo::STRING:
+ case ConfigInfo::CI_STRING:
MGM_REQUIRE(ctx.m_currentSection->put(pname, value));
break;
- case ConfigInfo::SECTION:
+ case ConfigInfo::CI_SECTION:
abort();
}
return true;
@@ -365,7 +366,7 @@ bool InitConfigFileParser::convertStringToUint64(const char* s,
errno = 0;
char* p;
- long long v = strtoll(s, &p, log10base);
+ Int64 v = strtoll(s, &p, log10base);
if (errno != 0)
return false;
diff --git a/ndb/src/mgmsrv/Makefile.am b/ndb/src/mgmsrv/Makefile.am
index ee5220ef9f8..50e0b6023ad 100644
--- a/ndb/src/mgmsrv/Makefile.am
+++ b/ndb/src/mgmsrv/Makefile.am
@@ -32,9 +32,7 @@ LDADD_LOC = $(top_builddir)/ndb/src/libndbclient.la \
DEFS_LOC = -DDEFAULT_MYSQL_HOME="\"$(MYSQLBASEdir)\"" \
-DDATADIR="\"$(MYSQLDATAdir)\"" \
-DSHAREDIR="\"$(MYSQLSHAREdir)\"" \
- -DMYSQLCLUSTERDIR="\"$(MYSQLCLUSTERdir)\"" \
- -DNDB_PORT="\"@ndb_port@\"" \
- -DNDB_BASE_PORT="\"@ndb_port_base@\""
+ -DMYSQLCLUSTERDIR="\"$(MYSQLCLUSTERdir)\""
include $(top_srcdir)/ndb/config/common.mk.am
include $(top_srcdir)/ndb/config/type_ndbapi.mk.am
@@ -43,3 +41,17 @@ ndb_mgmd_LDFLAGS = @ndb_bin_am_ldflags@
# Don't update the files from bitkeeper
%::SCCS/s.%
+
+windoze-dsp: ndb_mgmd.dsp
+
+ndb_mgmd.dsp: Makefile \
+ $(top_srcdir)/ndb/config/win-prg.am \
+ $(top_srcdir)/ndb/config/win-name \
+ $(top_srcdir)/ndb/config/win-includes \
+ $(top_srcdir)/ndb/config/win-sources \
+ $(top_srcdir)/ndb/config/win-libraries
+ cat $(top_srcdir)/ndb/config/win-prg.am > $@
+ @$(top_srcdir)/ndb/config/win-name $@ $(ndbbin_PROGRAMS)
+ @$(top_srcdir)/ndb/config/win-includes $@ $(INCLUDES)
+ @$(top_srcdir)/ndb/config/win-sources $@ $(ndb_mgmd_SOURCES)
+ @$(top_srcdir)/ndb/config/win-libraries $@ LINK $(LDADD)
diff --git a/ndb/src/mgmsrv/MgmtSrvr.cpp b/ndb/src/mgmsrv/MgmtSrvr.cpp
index 061aa2e0cb8..3fcde997cb0 100644
--- a/ndb/src/mgmsrv/MgmtSrvr.cpp
+++ b/ndb/src/mgmsrv/MgmtSrvr.cpp
@@ -54,6 +54,7 @@
#include <mgmapi.h>
#include <mgmapi_configuration.hpp>
#include <mgmapi_config_parameters.h>
+#include <m_string.h>
//#define MGM_SRV_DEBUG
#ifdef MGM_SRV_DEBUG
@@ -125,12 +126,12 @@ MgmtSrvr::signalRecvThreadRun()
while(!_isStopThread) {
SigMatch *handler = NULL;
NdbApiSignal *signal = NULL;
- if(m_signalRecvQueue.waitFor(siglist, handler, signal, DEFAULT_TIMEOUT)) {
+ if(m_signalRecvQueue.waitFor(siglist, &handler, &signal, DEFAULT_TIMEOUT)) {
if(handler->function != 0)
(this->*handler->function)(signal);
}
}
-};
+}
EventLogger g_EventLogger;
@@ -153,7 +154,7 @@ MgmtSrvr::logLevelThreadRun()
* Handle started nodes
*/
EventSubscribeReq req;
- req = m_statisticsListner.m_clients[0].m_logLevel;
+ req = m_event_listner[0].m_logLevel;
req.blockRef = _ownReference;
SetLogLevelOrd ord;
@@ -226,7 +227,8 @@ MgmtSrvr::startEventLog()
clusterLog);
}
if(!g_EventLogger.addHandler(logdest)) {
- ndbout << "Warning: could not add log destination \"" << logdest.c_str() << "\"" << endl;
+ ndbout << "Warning: could not add log destination \""
+ << logdest.c_str() << "\"" << endl;
}
}
@@ -244,18 +246,19 @@ public:
};
bool
-MgmtSrvr::setEventLogFilter(int severity)
+MgmtSrvr::setEventLogFilter(int severity, int enable)
{
- bool enabled = true;
Logger::LoggerLevel level = (Logger::LoggerLevel)severity;
- if (g_EventLogger.isEnable(level)) {
+ if (enable > 0) {
+ g_EventLogger.enable(level);
+ } else if (enable == 0) {
+ g_EventLogger.disable(level);
+ } else if (g_EventLogger.isEnable(level)) {
g_EventLogger.disable(level);
- enabled = false;
} else {
g_EventLogger.enable(level);
}
-
- return enabled;
+ return g_EventLogger.isEnable(level);
}
bool
@@ -407,7 +410,7 @@ MgmtSrvr::MgmtSrvr(SocketServer *socket_server,
_ownReference(0),
theSignalIdleList(NULL),
theWaitState(WAIT_SUBSCRIBE_CONF),
- m_statisticsListner(this)
+ m_event_listner(this)
{
DBUG_ENTER("MgmtSrvr::MgmtSrvr");
@@ -545,16 +548,18 @@ MgmtSrvr::MgmtSrvr(SocketServer *socket_server,
}
}
+ // Setup clusterlog as client[0] in m_event_listner
{
- MgmStatService::StatListener se;
- se.m_socket = -1;
+ Ndb_mgmd_event_service::Event_listener se;
+ se.m_socket = NDB_INVALID_SOCKET;
for(size_t t = 0; t<LogLevel::LOGLEVEL_CATEGORIES; t++){
se.m_logLevel.setLogLevel((LogLevel::EventCategory)t, 7);
}
se.m_logLevel.setLogLevel(LogLevel::llError, 15);
+ se.m_logLevel.setLogLevel(LogLevel::llConnection, 8);
se.m_logLevel.setLogLevel(LogLevel::llBackup, 15);
- m_statisticsListner.m_clients.push_back(se);
- m_statisticsListner.m_logLevel = se.m_logLevel;
+ m_event_listner.m_clients.push_back(se);
+ m_event_listner.m_logLevel = se.m_logLevel;
}
DBUG_VOID_RETURN;
@@ -2069,21 +2074,18 @@ MgmtSrvr::handleStopReply(NodeId nodeId, Uint32 errCode)
void
MgmtSrvr::handleStatus(NodeId nodeId, bool alive)
{
+ DBUG_ENTER("MgmtSrvr::handleStatus");
+ Uint32 theData[25];
+ theData[1] = nodeId;
if (alive) {
m_started_nodes.push_back(nodeId);
- Uint32 theData[25];
theData[0] = EventReport::Connected;
- theData[1] = nodeId;
- eventReport(_ownNodeId, theData);
} else {
handleStopReply(nodeId, 0);
-
- Uint32 theData[25];
theData[0] = EventReport::Disconnected;
- theData[1] = nodeId;
-
- eventReport(_ownNodeId, theData);
}
+ eventReport(_ownNodeId, theData);
+ DBUG_VOID_RETURN;
}
//****************************************************************************
@@ -2104,8 +2106,11 @@ void
MgmtSrvr::nodeStatusNotification(void* mgmSrv, Uint32 nodeId,
bool alive, bool nfComplete)
{
+ DBUG_ENTER("MgmtSrvr::nodeStatusNotification");
+ DBUG_PRINT("enter",("nodeid= %d, alive= %d, nfComplete= %d", nodeId, alive, nfComplete));
if(!(!alive && nfComplete))
((MgmtSrvr*)mgmSrv)->handleStatus(nodeId, alive);
+ DBUG_VOID_RETURN;
}
enum ndb_mgm_node_type
@@ -2220,9 +2225,24 @@ MgmtSrvr::alloc_node_id(NodeId * nodeId,
if (*nodeId != 0 ||
type != NDB_MGM_NODE_TYPE_MGM ||
no_mgm == 1) { // any match is ok
+
+ if (config_hostname == 0 &&
+ *nodeId == 0 &&
+ type != NDB_MGM_NODE_TYPE_MGM)
+ {
+ if (!id_found) // only set if not set earlier
+ id_found= tmp;
+ continue; /* continue looking for a nodeid with specified
+ * hostname
+ */
+ }
+ assert(id_found == 0);
id_found= tmp;
break;
}
+ assert(no_mgm > 1);
+ assert(*nodeId != 0);
+ assert(type != NDB_MGM_NODE_TYPE_MGM);
if (id_found) { // mgmt server may only have one match
error_string.appfmt("Ambiguous node id's %d and %d.\n"
"Suggest specifying node id in connectstring,\n"
@@ -2292,8 +2312,9 @@ MgmtSrvr::alloc_node_id(NodeId * nodeId,
if (found_matching_type)
if (found_free_node)
error_string.appfmt("Connection done from wrong host ip %s.",
- inet_ntoa(((struct sockaddr_in *)
- (client_addr))->sin_addr));
+ (client_addr)?
+ inet_ntoa(((struct sockaddr_in *)
+ (client_addr))->sin_addr):"");
else
error_string.appfmt("No free node id found for %s.",
type_string.c_str());
@@ -2384,15 +2405,15 @@ MgmtSrvr::eventReport(NodeId nodeId, const Uint32 * theData)
EventReport::EventType type = eventReport->getEventType();
// Log event
g_EventLogger.log(type, theData, nodeId,
- &m_statisticsListner.m_clients[0].m_logLevel);
- m_statisticsListner.log(type, theData, nodeId);
+ &m_event_listner[0].m_logLevel);
+ m_event_listner.log(type, theData, nodeId);
}
/***************************************************************************
* Backup
***************************************************************************/
int
-MgmtSrvr::startBackup(Uint32& backupId, bool waitCompleted)
+MgmtSrvr::startBackup(Uint32& backupId, int waitCompleted)
{
bool next;
NodeId nodeId = 0;
@@ -2414,11 +2435,16 @@ MgmtSrvr::startBackup(Uint32& backupId, bool waitCompleted)
req->backupDataLen = 0;
int result;
- if (waitCompleted) {
- result = sendRecSignal(nodeId, WAIT_BACKUP_COMPLETED, signal, true);
+ if (waitCompleted == 2) {
+ result = sendRecSignal(nodeId, WAIT_BACKUP_COMPLETED,
+ signal, true, 30*60*1000 /*30 secs*/);
+ }
+ else if (waitCompleted == 1) {
+ result = sendRecSignal(nodeId, WAIT_BACKUP_STARTED,
+ signal, true, 5*60*1000 /*5 mins*/);
}
else {
- result = sendRecSignal(nodeId, WAIT_BACKUP_STARTED, signal, true);
+ result = sendRecSignal(nodeId, NO_WAIT, signal, true);
}
if (result == -1) {
return SEND_OR_RECEIVE_FAILED;
@@ -2497,18 +2523,31 @@ MgmtSrvr::abortBackup(Uint32 backupId)
void
MgmtSrvr::backupCallback(BackupEvent & event)
{
+ DBUG_ENTER("MgmtSrvr::backupCallback");
m_lastBackupEvent = event;
switch(event.Event){
case BackupEvent::BackupFailedToStart:
+ DBUG_PRINT("info",("BackupEvent::BackupFailedToStart"));
+ theWaitState = NO_WAIT;
+ break;
case BackupEvent::BackupAborted:
+ DBUG_PRINT("info",("BackupEvent::BackupAborted"));
+ theWaitState = NO_WAIT;
+ break;
case BackupEvent::BackupCompleted:
+ DBUG_PRINT("info",("BackupEvent::BackupCompleted"));
theWaitState = NO_WAIT;
break;
case BackupEvent::BackupStarted:
if(theWaitState == WAIT_BACKUP_STARTED)
+ {
+ DBUG_PRINT("info",("BackupEvent::BackupStarted NO_WAIT"));
theWaitState = NO_WAIT;
+ } else {
+ DBUG_PRINT("info",("BackupEvent::BackupStarted"));
+ }
}
- return;
+ DBUG_VOID_RETURN;
}
@@ -2672,7 +2711,7 @@ MgmtSrvr::setDbParameter(int node, int param, const char * value,
int p_type;
unsigned val_32;
- unsigned long long val_64;
+ Uint64 val_64;
const char * val_char;
do {
p_type = 0;
@@ -2734,9 +2773,9 @@ MgmtSrvr::setDbParameter(int node, int param, const char * value,
template class Vector<SigMatch>;
#if __SUNPRO_CC != 0x560
-template bool SignalQueue::waitFor<SigMatch>(Vector<SigMatch>&, SigMatch*&, NdbApiSignal*&, unsigned);
+template bool SignalQueue::waitFor<SigMatch>(Vector<SigMatch>&, SigMatch**, NdbApiSignal**, unsigned);
#endif
template class MutexVector<unsigned short>;
-template class MutexVector<MgmStatService::StatListener>;
+template class MutexVector<Ndb_mgmd_event_service::Event_listener>;
template class MutexVector<EventSubscribeReq>;
diff --git a/ndb/src/mgmsrv/MgmtSrvr.hpp b/ndb/src/mgmsrv/MgmtSrvr.hpp
index 1afb0848ecc..6378e763363 100644
--- a/ndb/src/mgmsrv/MgmtSrvr.hpp
+++ b/ndb/src/mgmsrv/MgmtSrvr.hpp
@@ -43,27 +43,34 @@ class Config;
class SetLogLevelOrd;
class SocketServer;
-class MgmStatService : public EventLoggerBase
+class Ndb_mgmd_event_service : public EventLoggerBase
{
friend class MgmtSrvr;
public:
- struct StatListener : public EventLoggerBase {
+ struct Event_listener : public EventLoggerBase {
NDB_SOCKET_TYPE m_socket;
};
private:
class MgmtSrvr * m_mgmsrv;
- MutexVector<StatListener> m_clients;
+ MutexVector<Event_listener> m_clients;
public:
- MgmStatService(class MgmtSrvr * m) : m_clients(5) {
+ Ndb_mgmd_event_service(class MgmtSrvr * m) : m_clients(5) {
m_mgmsrv = m;
}
- void add_listener(const StatListener&);
+ void add_listener(const Event_listener&);
+ void update_max_log_level(const LogLevel&);
+ void update_log_level(const LogLevel&);
void log(int eventType, const Uint32* theData, NodeId nodeId);
- void stopSessions();
+ void stop_sessions();
+
+ Event_listener& operator[](unsigned i) { return m_clients[i]; }
+ const Event_listener& operator[](unsigned i) const { return m_clients[i]; }
+ void lock() { m_clients.lock(); }
+ void unlock(){ m_clients.unlock(); }
};
/**
@@ -122,7 +129,7 @@ public:
* @param serverity the log level/serverity.
* @return true if the severity was enabled.
*/
- bool setEventLogFilter(int severity);
+ bool setEventLogFilter(int severity, int enable);
/**
* Returns true if the log level/severity is enabled.
@@ -357,7 +364,7 @@ public:
/**
* Backup functionallity
*/
- int startBackup(Uint32& backupId, bool waitCompleted = false);
+ int startBackup(Uint32& backupId, int waitCompleted= 2);
int abortBackup(Uint32 backupId);
int performBackup(Uint32* backupId);
@@ -661,7 +668,7 @@ private:
*/
static void signalReceivedNotification(void* mgmtSrvr,
NdbApiSignal* signal,
- class LinearSectionPtr ptr[3]);
+ struct LinearSectionPtr ptr[3]);
/**
* Called from "outside" of MgmtSrvr when a DB process has died.
@@ -732,8 +739,8 @@ private:
LogLevel m_nodeLogLevel[MAX_NODES];
enum ndb_mgm_node_type nodeTypes[MAX_NODES];
friend class MgmApiSession;
- friend class MgmStatService;
- MgmStatService m_statisticsListner;
+ friend class Ndb_mgmd_event_service;
+ Ndb_mgmd_event_service m_event_listner;
/**
* Handles the thread wich upon a 'Node is started' event will
diff --git a/ndb/src/mgmsrv/Services.cpp b/ndb/src/mgmsrv/Services.cpp
index 5834d40cc78..8ba8c2fe87e 100644
--- a/ndb/src/mgmsrv/Services.cpp
+++ b/ndb/src/mgmsrv/Services.cpp
@@ -29,7 +29,7 @@
#include <ConfigValues.hpp>
#include <mgmapi_configuration.hpp>
-
+#include <Vector.hpp>
#include "Services.hpp"
extern bool g_StopServer;
@@ -132,6 +132,7 @@ ParserRow<MgmApiSession> commands[] = {
MGM_ARG("user", String, Mandatory, "Password"),
MGM_ARG("password", String, Mandatory, "Password"),
MGM_ARG("public key", String, Mandatory, "Public key"),
+ MGM_ARG("endian", String, Optional, "Endianness"),
MGM_CMD("get version", &MgmApiSession::getVersion, ""),
@@ -175,6 +176,7 @@ ParserRow<MgmApiSession> commands[] = {
MGM_ARG("args", String, Mandatory, "Args(space separated int's)"),
MGM_CMD("start backup", &MgmApiSession::startBackup, ""),
+ MGM_ARG("completed", Int, Optional ,"Wait until completed"),
MGM_CMD("abort backup", &MgmApiSession::abortBackup, ""),
MGM_ARG("id", Int, Mandatory, "Backup id"),
@@ -207,16 +209,17 @@ ParserRow<MgmApiSession> commands[] = {
MGM_CMD("set loglevel", &MgmApiSession::setLogLevel, ""),
MGM_ARG("node", Int, Mandatory, "Node"),
- MGM_ARG("category", String, Mandatory, "Event category"),
+ MGM_ARG("category", Int, Mandatory, "Event category"),
MGM_ARG("level", Int, Mandatory, "Log level (0-15)"),
MGM_CMD("set cluster loglevel", &MgmApiSession::setClusterLogLevel, ""),
MGM_ARG("node", Int, Mandatory, "Node"),
- MGM_ARG("category", String, Mandatory, "Event category"),
+ MGM_ARG("category", Int, Mandatory, "Event category"),
MGM_ARG("level", Int, Mandatory, "Log level (0-15)"),
MGM_CMD("set logfilter", &MgmApiSession::setLogFilter, ""),
MGM_ARG("level", Int, Mandatory, "Severety level"),
+ MGM_ARG("enable", Int, Mandatory, "1=disable, 0=enable, -1=toggle"),
MGM_CMD("config lock", &MgmApiSession::configLock, ""),
@@ -284,8 +287,8 @@ MgmApiSession::runSession() {
/* Backwards compatibility for old NDBs that still use
* the old "GET CONFIG" command.
*/
-
- for(size_t i=0; i<strlen(ctx.m_currentToken); i++)
+ size_t i;
+ for(i=0; i<strlen(ctx.m_currentToken); i++)
ctx.m_currentToken[i] = toupper(ctx.m_currentToken[i]);
if(strncmp("GET CONFIG ",
@@ -386,6 +389,8 @@ MgmApiSession::get_nodeid(Parser_t::Context &,
const char * user;
const char * password;
const char * public_key;
+ const char * endian= NULL;
+ union { long l; char c[sizeof(long)]; } endian_check;
args.get("version", &version);
args.get("nodetype", &nodetype);
@@ -394,7 +399,17 @@ MgmApiSession::get_nodeid(Parser_t::Context &,
args.get("user", &user);
args.get("password", &password);
args.get("public key", &public_key);
-
+ args.get("endian", &endian);
+
+ endian_check.l = 1;
+ if(endian
+ && strcmp(endian,(endian_check.c[sizeof(long)-1])?"big":"little")!=0) {
+ m_output->println(cmd);
+ m_output->println("result: Node does not have the same endianness as the management server.");
+ m_output->println("");
+ return;
+ }
+
bool compatible;
switch (nodetype) {
case NODE_TYPE_MGM:
@@ -615,85 +630,30 @@ MgmApiSession::getVersion(Parser<MgmApiSession>::Context &,
m_output->println("string: %s", NDB_VERSION_STRING);
m_output->println("");
}
-#if 0
-
-/*****************************************************************************
- * BACKUP
- *****************************************************************************/
-
-int completed;
-MgmtSrvr::BackupEvent globalEvent;
-
-static void
-completedCallback(const MgmtSrvr::BackupEvent & event){
-
- ndbout << "WaitCallback" << endl;
- // Save event in the latestEvent var
-
- switch(event.Event){
- case MgmtSrvr::BackupEvent::BackupCompleted:
- case MgmtSrvr::BackupEvent::BackupFailedToStart:
- globalEvent = event;
- completed = 1;
- break;
- }
-}
void
MgmApiSession::startBackup(Parser<MgmApiSession>::Context &,
- Properties const &) {
+ Properties const &args) {
+ DBUG_ENTER("MgmApiSession::startBackup");
unsigned backupId;
+ Uint32 completed= 2;
int result;
- MgmtSrvr::BackupCallback prevCallback;
- prevCallback = m_mgmsrv.setCallback(completedCallback);
- completed = 0;
- result = m_mgmsrv.startBackup(backupId);
- if (result == 0){
-
- // Wait for the callback to call our condition
- // waitFor();
- while (completed == 0)
- NdbSleep_SecSleep(0);
-
- if (globalEvent.Event == MgmtSrvr::BackupEvent::BackupFailedToStart)
- result = globalEvent.FailedToStart.ErrorCode;
- else
- backupId = globalEvent.Completed.BackupId;
- }
-
- // restore old callback
- m_mgmsrv.setCallback(prevCallback);
-
- m_output->println("start backup reply");
- if(result != 0)
- m_output->println("result: %s(%d)", get_error_text(result), result);
- else{
- m_output->println("result: Ok");
- m_output->println("id: %d", backupId);
- }
- m_output->println("");
-
-}
-#endif
-
-void
-MgmApiSession::startBackup(Parser<MgmApiSession>::Context &,
- Properties const &) {
- unsigned backupId;
- int result;
+ args.get("completed", &completed);
- result = m_mgmsrv.startBackup(backupId, true);
+ result = m_mgmsrv.startBackup(backupId, completed);
m_output->println("start backup reply");
if(result != 0)
+ {
m_output->println("result: %s", get_error_text(result));
+ }
else{
m_output->println("result: Ok");
m_output->println("id: %d", backupId);
}
m_output->println("");
-
+ DBUG_VOID_RETURN;
}
void
@@ -767,43 +727,62 @@ MgmApiSession::bye(Parser<MgmApiSession>::Context &,
void
MgmApiSession::setClusterLogLevel(Parser<MgmApiSession>::Context &,
Properties const &args) {
- Uint32 node, level, category;
+ const char *reply= "set cluster loglevel reply";
+ Uint32 node, level, cat;
BaseString errorString;
SetLogLevelOrd logLevel;
int result;
+ DBUG_ENTER("MgmApiSession::setClusterLogLevel");
args.get("node", &node);
- args.get("category", &category);
+ args.get("category", &cat);
args.get("level", &level);
+ DBUG_PRINT("enter",("node=%d, category=%d, level=%d", node, cat, level));
+
/* XXX should use constants for this value */
if(level > 15) {
- m_output->println("set cluster loglevel reply");
- m_output->println("result: Invalid loglevel");
+ m_output->println(reply);
+ m_output->println("result: Invalid loglevel %d", level);
m_output->println("");
- return;
+ DBUG_VOID_RETURN;
}
- EventSubscribeReq req;
- req.blockRef = 0;
- req.noOfEntries = 1;
- req.theData[0] = (category << 16) | level;
- m_mgmsrv.m_log_level_requests.push_back(req);
-
- m_output->println("set cluster loglevel reply");
+ LogLevel::EventCategory category=
+ (LogLevel::EventCategory)(cat-(int)CFG_MIN_LOGLEVEL);
+
+ m_mgmsrv.m_event_listner.lock();
+ if (m_mgmsrv.m_event_listner[0].m_logLevel.setLogLevel(category,level))
+ {
+ m_output->println(reply);
+ m_output->println("result: Invalid category %d", category);
+ m_output->println("");
+ m_mgmsrv.m_event_listner.unlock();
+ DBUG_VOID_RETURN;
+ }
+ m_mgmsrv.m_event_listner.unlock();
+
+ {
+ LogLevel ll;
+ ll.setLogLevel(category,level);
+ m_mgmsrv.m_event_listner.update_max_log_level(ll);
+ }
+
+ m_output->println(reply);
m_output->println("result: Ok");
m_output->println("");
+ DBUG_VOID_RETURN;
}
void
MgmApiSession::setLogLevel(Parser<MgmApiSession>::Context &,
Properties const &args) {
- Uint32 node = 0, level = 0, category;
+ Uint32 node = 0, level = 0, cat;
BaseString errorString;
SetLogLevelOrd logLevel;
int result;
logLevel.clear();
args.get("node", &node);
- args.get("category", &category);
+ args.get("category", &cat);
args.get("level", &level);
/* XXX should use constants for this value */
@@ -814,12 +793,15 @@ MgmApiSession::setLogLevel(Parser<MgmApiSession>::Context &,
return;
}
- EventSubscribeReq req;
- req.blockRef = node;
- req.noOfEntries = 1;
- req.theData[0] = (category << 16) | level;
- m_mgmsrv.m_log_level_requests.push_back(req);
-
+ LogLevel::EventCategory category=
+ (LogLevel::EventCategory)(cat-(int)CFG_MIN_LOGLEVEL);
+
+ {
+ LogLevel ll;
+ ll.setLogLevel(category,level);
+ m_mgmsrv.m_event_listner.update_max_log_level(ll);
+ }
+
m_output->println("set loglevel reply");
m_output->println("result: Ok");
m_output->println("");
@@ -1190,10 +1172,12 @@ void
MgmApiSession::setLogFilter(Parser_t::Context &ctx,
const class Properties &args) {
Uint32 level;
+ Uint32 enable;
args.get("level", &level);
+ args.get("enable", &enable);
- int result = m_mgmsrv.setEventLogFilter(level);
+ int result = m_mgmsrv.setEventLogFilter(level, enable);
m_output->println("set logfilter reply");
m_output->println("result: %d", result);
@@ -1247,21 +1231,17 @@ operator<<(NdbOut& out, const LogLevel & ll)
}
void
-MgmStatService::log(int eventType, const Uint32* theData, NodeId nodeId){
+Ndb_mgmd_event_service::log(int eventType, const Uint32* theData, NodeId nodeId){
- Uint32 threshold = 0;
- LogLevel::EventCategory cat= LogLevel::llInvalid;
+ Uint32 threshold;
+ LogLevel::EventCategory cat;
+ Logger::LoggerLevel severity;
int i;
+ DBUG_ENTER("Ndb_mgmd_event_service::log");
+ DBUG_PRINT("enter",("eventType=%d, nodeid=%d", eventType, nodeId));
- for(i = 0; (unsigned)i<EventLogger::matrixSize; i++){
- if(EventLogger::matrix[i].eventType == eventType){
- cat = EventLogger::matrix[i].eventCategory;
- threshold = EventLogger::matrix[i].threshold;
- break;
- }
- }
- if (cat == LogLevel::llInvalid)
- return;
+ if (EventLoggerBase::event_lookup(eventType,cat,threshold,severity))
+ DBUG_VOID_RETURN;
char m_text[256];
EventLogger::getText(m_text, sizeof(m_text), eventType, theData, nodeId);
@@ -1270,7 +1250,7 @@ MgmStatService::log(int eventType, const Uint32* theData, NodeId nodeId){
m_clients.lock();
for(i = m_clients.size() - 1; i >= 0; i--){
if(threshold <= m_clients[i].m_logLevel.getLogLevel(cat)){
- if(m_clients[i].m_socket >= 0 &&
+ if(m_clients[i].m_socket != NDB_INVALID_SOCKET &&
println_socket(m_clients[i].m_socket,
MAX_WRITE_TIMEOUT, m_text) == -1){
copy.push_back(m_clients[i].m_socket);
@@ -1291,23 +1271,22 @@ MgmStatService::log(int eventType, const Uint32* theData, NodeId nodeId){
tmp.set_max(m_clients[i].m_logLevel);
}
m_clients.unlock();
-
- if(!(tmp == m_logLevel)){
- m_logLevel = tmp;
- EventSubscribeReq req;
- req = tmp;
- req.blockRef = 0;
- m_mgmsrv->m_log_level_requests.push_back(req);
- }
+ update_log_level(tmp);
}
+ DBUG_VOID_RETURN;
}
void
-MgmStatService::add_listener(const StatListener& client){
- m_clients.push_back(client);
- LogLevel tmp = m_logLevel;
- tmp.set_max(client.m_logLevel);
-
+Ndb_mgmd_event_service::update_max_log_level(const LogLevel &log_level)
+{
+ LogLevel tmp= m_logLevel;
+ tmp.set_max(log_level);
+ update_log_level(tmp);
+}
+
+void
+Ndb_mgmd_event_service::update_log_level(const LogLevel &tmp)
+{
if(!(tmp == m_logLevel)){
m_logLevel = tmp;
EventSubscribeReq req;
@@ -1318,13 +1297,21 @@ MgmStatService::add_listener(const StatListener& client){
}
void
-MgmStatService::stopSessions(){
+Ndb_mgmd_event_service::add_listener(const Event_listener& client){
+ m_clients.push_back(client);
+ update_max_log_level(client.m_logLevel);
+}
+
+void
+Ndb_mgmd_event_service::stop_sessions(){
+ m_clients.lock();
for(int i = m_clients.size() - 1; i >= 0; i--){
- if(m_clients[i].m_socket >= 0){
+ if(m_clients[i].m_socket != NDB_INVALID_SOCKET){
NDB_CLOSE_SOCKET(m_clients[i].m_socket);
m_clients.erase(i);
}
}
+ m_clients.unlock();
}
void
@@ -1358,7 +1345,7 @@ MgmApiSession::listen_event(Parser<MgmApiSession>::Context & ctx,
int result = 0;
BaseString msg;
- MgmStatService::StatListener le;
+ Ndb_mgmd_event_service::Event_listener le;
le.m_socket = m_socket;
Vector<BaseString> list;
@@ -1403,10 +1390,10 @@ MgmApiSession::listen_event(Parser<MgmApiSession>::Context & ctx,
goto done;
}
- m_mgmsrv.m_statisticsListner.add_listener(le);
+ m_mgmsrv.m_event_listner.add_listener(le);
m_stop = true;
- m_socket = -1;
+ m_socket = NDB_INVALID_SOCKET;
done:
m_output->println("listen event");
diff --git a/ndb/src/mgmsrv/Services.hpp b/ndb/src/mgmsrv/Services.hpp
index 6a5f06a659e..8627343b1cf 100644
--- a/ndb/src/mgmsrv/Services.hpp
+++ b/ndb/src/mgmsrv/Services.hpp
@@ -107,7 +107,7 @@ public:
m_mgmsrv = mgmsrv;
}
- MgmApiSession * newSession(NDB_SOCKET_TYPE socket){
+ SocketServer::Session * newSession(NDB_SOCKET_TYPE socket){
return new MgmApiSession(* m_mgmsrv, socket);
}
};
diff --git a/ndb/src/mgmsrv/SignalQueue.hpp b/ndb/src/mgmsrv/SignalQueue.hpp
index 76acaf2289a..bacbad53415 100644
--- a/ndb/src/mgmsrv/SignalQueue.hpp
+++ b/ndb/src/mgmsrv/SignalQueue.hpp
@@ -47,8 +47,8 @@ public:
NodeId nodeid = 0,
Uint32 timeout = DEFAULT_TIMEOUT);
template<class T> bool waitFor(Vector<T> &t,
- T *&handler,
- NdbApiSignal *&signal,
+ T **handler,
+ NdbApiSignal **signal,
Uint32 timeout = DEFAULT_TIMEOUT);
private:
NdbMutex *m_mutex; /* Locks all data in SignalQueue */
@@ -75,8 +75,8 @@ private:
template<class T> bool
SignalQueue::waitFor(Vector<T> &t,
- T *&handler,
- NdbApiSignal *&signal,
+ T **handler,
+ NdbApiSignal **signal,
Uint32 timeout) {
Guard g(m_mutex);
@@ -88,8 +88,8 @@ SignalQueue::waitFor(Vector<T> &t,
for(size_t i = 0; i < t.size(); i++) {
if(t[i].check(m_signalQueueHead->signal)) {
- handler = &t[i];
- signal = pop();
+ * handler = &t[i];
+ * signal = pop();
return true;
}
}
diff --git a/ndb/src/mgmsrv/main.cpp b/ndb/src/mgmsrv/main.cpp
index 64a2cb35c1f..64aca1d6709 100644
--- a/ndb/src/mgmsrv/main.cpp
+++ b/ndb/src/mgmsrv/main.cpp
@@ -91,41 +91,38 @@ extern EventLogger g_EventLogger;
extern int global_mgmt_server_check;
static char *opt_connect_str= 0;
+enum ndb_mgmd_options {
+ NDB_STD_OPTS_OPTIONS,
+ OPT_INTERACTIVE,
+ OPT_NO_NODEID_CHECKS,
+ OPT_NO_DAEMON
+};
+NDB_STD_OPTS_VARS;
+
static struct my_option my_long_options[] =
{
-#ifndef DBUG_OFF
- { "debug", '#', "Output debug log. Often this is 'd:t:o,filename'.",
- 0, 0, 0, GET_STR, OPT_ARG, 0, 0, 0, 0, 0, 0 },
-#endif
- { "usage", '?', "Display this help and exit.",
- 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0 },
- { "help", '?', "Display this help and exit.",
- 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0 },
- { "version", 'V', "Output version information and exit.", 0, 0, 0,
- GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0 },
- { "connect-string", 1023,
- "Set connect string for connecting to ndb_mgmd. "
- "<constr>=\"host=<hostname:port>[;nodeid=<id>]\". "
- "Overides specifying entries in NDB_CONNECTSTRING and config file",
- (gptr*) &opt_connect_str, (gptr*) &opt_connect_str, 0,
- GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0 },
+ NDB_STD_OPTS("ndb_mgmd"),
{ "config-file", 'f', "Specify cluster configuration file",
(gptr*) &glob.config_filename, (gptr*) &glob.config_filename, 0,
GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0 },
{ "daemon", 'd', "Run ndb_mgmd in daemon mode (default)",
(gptr*) &glob.daemon, (gptr*) &glob.daemon, 0,
GET_BOOL, NO_ARG, 1, 0, 0, 0, 0, 0 },
- { "interactive", 256, "Run interactive. Not supported but provided for testing purposes",
+ { "interactive", OPT_INTERACTIVE,
+ "Run interactive. Not supported but provided for testing purposes",
(gptr*) &glob.interactive, (gptr*) &glob.interactive, 0,
GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0 },
- { "no-nodeid-checks", 257, "Do not provide any node id checks",
+ { "no-nodeid-checks", OPT_NO_NODEID_CHECKS,
+ "Do not provide any node id checks",
(gptr*) &g_no_nodeid_checks, (gptr*) &g_no_nodeid_checks, 0,
GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0 },
- { "nodaemon", 258, "Don't run as daemon, but don't read from stdin",
+ { "nodaemon", OPT_NO_DAEMON,
+ "Don't run as daemon, but don't read from stdin",
(gptr*) &glob.non_interactive, (gptr*) &glob.non_interactive, 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}
};
+
static void short_usage_sub(void)
{
printf("Usage: %s [OPTIONS]\n", my_progname);
@@ -152,6 +149,13 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
case 'V':
print_version();
exit(0);
+ case OPT_NDB_SHM:
+#ifndef NDB_SHM_TRANSPORTER
+ printf("Warning: binary not compiled with shared memory support,\n"
+ "use configure option --with-ndb-shm to enable support.\n"
+ "Tcp connections will now be used instead\n");
+ opt_ndb_shm= 0;
+#endif
case '?':
usage();
exit(0);
@@ -200,7 +204,7 @@ int main(int argc, char** argv)
if (glob.mgmObject->init())
goto error_end;
- chdir(NdbConfig_get_path(0));
+ my_setwd(NdbConfig_get_path(0), MYF(0));
glob.localNodeId= glob.mgmObject->getOwnNodeId();
if (glob.localNodeId == 0) {
@@ -261,7 +265,9 @@ int main(int argc, char** argv)
}
}
+#ifndef NDB_WIN32
signal(SIGPIPE, SIG_IGN);
+#endif
{
BaseString error_string;
if(!glob.mgmObject->start(error_string)){