mirror of
https://github.com/MariaDB/server.git
synced 2025-08-07 00:04:31 +03:00
Merge tulin@bk-internal.mysql.com:/home/bk/mysql-4.1
into poseidon.bredbandsbolaget.se:/home/tomas/mysql-4.1
This commit is contained in:
@@ -73,63 +73,5 @@ ExecuteOnComputer: 6
|
|||||||
Id: 14
|
Id: 14
|
||||||
ExecuteOnComputer: 7
|
ExecuteOnComputer: 7
|
||||||
|
|
||||||
# Mgmtsrvr connections
|
[TCP DEFAULT]
|
||||||
|
|
||||||
[TCP]
|
|
||||||
NodeId1: 1
|
|
||||||
NodeId2: 2
|
|
||||||
PortNumber: CHOOSE_PORT_BASE02
|
PortNumber: CHOOSE_PORT_BASE02
|
||||||
|
|
||||||
[TCP]
|
|
||||||
NodeId1: 1
|
|
||||||
NodeId2: 3
|
|
||||||
PortNumber: CHOOSE_PORT_BASE03
|
|
||||||
|
|
||||||
# Ndb nodes connections
|
|
||||||
|
|
||||||
[TCP]
|
|
||||||
NodeId1: 2
|
|
||||||
NodeId2: 3
|
|
||||||
PortNumber: CHOOSE_PORT_BASE04
|
|
||||||
|
|
||||||
# Api connections
|
|
||||||
|
|
||||||
[TCP]
|
|
||||||
NodeId1: 11
|
|
||||||
NodeId2: 2
|
|
||||||
PortNumber: CHOOSE_PORT_BASE05
|
|
||||||
|
|
||||||
[TCP]
|
|
||||||
NodeId1: 11
|
|
||||||
NodeId2: 3
|
|
||||||
PortNumber: CHOOSE_PORT_BASE06
|
|
||||||
|
|
||||||
[TCP]
|
|
||||||
NodeId1: 12
|
|
||||||
NodeId2: 2
|
|
||||||
PortNumber: CHOOSE_PORT_BASE07
|
|
||||||
|
|
||||||
[TCP]
|
|
||||||
NodeId1: 12
|
|
||||||
NodeId2: 3
|
|
||||||
PortNumber: CHOOSE_PORT_BASE08
|
|
||||||
|
|
||||||
[TCP]
|
|
||||||
NodeId1: 13
|
|
||||||
NodeId2: 2
|
|
||||||
PortNumber: CHOOSE_PORT_BASE09
|
|
||||||
|
|
||||||
[TCP]
|
|
||||||
NodeId1: 13
|
|
||||||
NodeId2: 3
|
|
||||||
PortNumber: CHOOSE_PORT_BASE10
|
|
||||||
|
|
||||||
[TCP]
|
|
||||||
NodeId1: 14
|
|
||||||
NodeId2: 2
|
|
||||||
PortNumber: CHOOSE_PORT_BASE11
|
|
||||||
|
|
||||||
[TCP]
|
|
||||||
NodeId1: 14
|
|
||||||
NodeId2: 3
|
|
||||||
PortNumber: CHOOSE_PORT_BASE12
|
|
||||||
|
@@ -143,6 +143,19 @@ ConfigInfo::m_SectionRules[] = {
|
|||||||
};
|
};
|
||||||
const int ConfigInfo::m_NoOfRules = sizeof(m_SectionRules)/sizeof(SectionRule);
|
const int ConfigInfo::m_NoOfRules = sizeof(m_SectionRules)/sizeof(SectionRule);
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Config Rules declarations
|
||||||
|
****************************************************************************/
|
||||||
|
bool addNodeConnections(Vector<ConfigInfo::ConfigRuleSection>§ions,
|
||||||
|
struct InitConfigFileParser::Context &ctx,
|
||||||
|
const char * ruleData);
|
||||||
|
|
||||||
|
const ConfigInfo::ConfigRule
|
||||||
|
ConfigInfo::m_ConfigRules[] = {
|
||||||
|
{ addNodeConnections, 0 },
|
||||||
|
{ 0, 0 }
|
||||||
|
};
|
||||||
|
|
||||||
struct DepricationTransform {
|
struct DepricationTransform {
|
||||||
const char * m_section;
|
const char * m_section;
|
||||||
const char * m_oldName;
|
const char * m_oldName;
|
||||||
@@ -1525,7 +1538,7 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
|
|||||||
ConfigInfo::USED,
|
ConfigInfo::USED,
|
||||||
false,
|
false,
|
||||||
ConfigInfo::INT,
|
ConfigInfo::INT,
|
||||||
MANDATORY,
|
2202,
|
||||||
0,
|
0,
|
||||||
0x7FFFFFFF },
|
0x7FFFFFFF },
|
||||||
|
|
||||||
@@ -2712,13 +2725,13 @@ checkMandatory(InitConfigFileParser::Context & ctx, const char * data){
|
|||||||
* Transform a string "NodeidX" (e.g. "uppsala.32")
|
* Transform a string "NodeidX" (e.g. "uppsala.32")
|
||||||
* into a Uint32 "NodeIdX" (e.g. 32) and a string "SystemX" (e.g. "uppsala").
|
* into a Uint32 "NodeIdX" (e.g. 32) and a string "SystemX" (e.g. "uppsala").
|
||||||
*/
|
*/
|
||||||
bool fixNodeId(InitConfigFileParser::Context & ctx, const char * data){
|
bool fixNodeId(InitConfigFileParser::Context & ctx, const char * data)
|
||||||
|
{
|
||||||
char buf[] = "NodeIdX"; buf[6] = data[sizeof("NodeI")];
|
char buf[] = "NodeIdX"; buf[6] = data[sizeof("NodeI")];
|
||||||
char sysbuf[] = "SystemX"; sysbuf[6] = data[sizeof("NodeI")];
|
char sysbuf[] = "SystemX"; sysbuf[6] = data[sizeof("NodeI")];
|
||||||
const char* nodeId;
|
const char* nodeId;
|
||||||
require(ctx.m_currentSection->get(buf, &nodeId));
|
require(ctx.m_currentSection->get(buf, &nodeId));
|
||||||
|
|
||||||
char tmpLine[MAX_LINE_LENGTH];
|
char tmpLine[MAX_LINE_LENGTH];
|
||||||
strncpy(tmpLine, nodeId, MAX_LINE_LENGTH);
|
strncpy(tmpLine, nodeId, MAX_LINE_LENGTH);
|
||||||
char* token1 = strtok(tmpLine, ".");
|
char* token1 = strtok(tmpLine, ".");
|
||||||
@@ -2739,7 +2752,6 @@ bool fixNodeId(InitConfigFileParser::Context & ctx, const char * data){
|
|||||||
require(ctx.m_currentSection->put(buf, id, true));
|
require(ctx.m_currentSection->put(buf, id, true));
|
||||||
require(ctx.m_currentSection->put(sysbuf, token1));
|
require(ctx.m_currentSection->put(sysbuf, token1));
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2862,9 +2874,9 @@ fixPortNumber(InitConfigFileParser::Context & ctx, const char * data){
|
|||||||
Uint32 adder = 0;
|
Uint32 adder = 0;
|
||||||
ctx.m_userProperties.get("PortNumberAdder", &adder);
|
ctx.m_userProperties.get("PortNumberAdder", &adder);
|
||||||
Uint32 base = 0;
|
Uint32 base = 0;
|
||||||
if(!ctx.m_userDefaults->get("PortNumber", &base) &&
|
if(!(ctx.m_userDefaults && ctx.m_userDefaults->get("PortNumber", &base)) &&
|
||||||
!ctx.m_systemDefaults->get("PortNumber", &base)){
|
!ctx.m_systemDefaults->get("PortNumber", &base)){
|
||||||
return true;
|
return false;
|
||||||
}
|
}
|
||||||
ctx.m_currentSection->put("PortNumber", base + adder);
|
ctx.m_currentSection->put("PortNumber", base + adder);
|
||||||
adder++;
|
adder++;
|
||||||
@@ -3144,3 +3156,88 @@ saveInConfigValues(InitConfigFileParser::Context & ctx, const char * data){
|
|||||||
} while(0);
|
} while(0);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
addNodeConnections(Vector<ConfigInfo::ConfigRuleSection>§ions,
|
||||||
|
struct InitConfigFileParser::Context &ctx,
|
||||||
|
const char * ruleData)
|
||||||
|
{
|
||||||
|
Properties * props= ctx.m_config;
|
||||||
|
Properties p_connections;
|
||||||
|
Properties p_connections2;
|
||||||
|
|
||||||
|
for (Uint32 i = 0;; i++){
|
||||||
|
const Properties * tmp;
|
||||||
|
Uint32 nodeId1, nodeId2;
|
||||||
|
|
||||||
|
if(!props->get("Connection", i, &tmp)) break;
|
||||||
|
|
||||||
|
if(!tmp->get("NodeId1", &nodeId1)) continue;
|
||||||
|
p_connections.put("", nodeId1, nodeId1);
|
||||||
|
if(!tmp->get("NodeId2", &nodeId2)) continue;
|
||||||
|
p_connections.put("", nodeId2, nodeId2);
|
||||||
|
|
||||||
|
p_connections2.put("", nodeId1 + nodeId2<<16, nodeId1);
|
||||||
|
p_connections2.put("", nodeId2 + nodeId1<<16, nodeId2);
|
||||||
|
}
|
||||||
|
|
||||||
|
Uint32 nNodes;
|
||||||
|
ctx.m_userProperties.get("NoOfNodes", &nNodes);
|
||||||
|
|
||||||
|
Properties p_db_nodes;
|
||||||
|
Properties p_api_mgm_nodes;
|
||||||
|
|
||||||
|
Uint32 i_db= 0, i_api_mgm= 0;
|
||||||
|
for (Uint32 i= 0, n= 0; n < nNodes; i++){
|
||||||
|
const Properties * tmp;
|
||||||
|
if(!props->get("Node", i, &tmp)) continue;
|
||||||
|
n++;
|
||||||
|
|
||||||
|
const char * type;
|
||||||
|
if(!tmp->get("Type", &type)) continue;
|
||||||
|
|
||||||
|
if (strcmp(type,"DB") == 0)
|
||||||
|
p_db_nodes.put("", i_db++, i);
|
||||||
|
else if (strcmp(type,"API") == 0 ||
|
||||||
|
strcmp(type,"MGM") == 0)
|
||||||
|
p_api_mgm_nodes.put("", i_api_mgm++, i);
|
||||||
|
}
|
||||||
|
|
||||||
|
Uint32 nodeId1, nodeId2, dummy;
|
||||||
|
|
||||||
|
for (Uint32 i= 0; p_db_nodes.get("", i, &nodeId1); i++){
|
||||||
|
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;
|
||||||
|
char buf[16];
|
||||||
|
snprintf(buf, sizeof(buf), "%u", nodeId1);
|
||||||
|
s.m_sectionData->put("NodeId1", buf);
|
||||||
|
snprintf(buf, sizeof(buf), "%u", nodeId2);
|
||||||
|
s.m_sectionData->put("NodeId2", buf);
|
||||||
|
sections.push_back(s);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (Uint32 i= 0; p_api_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;
|
||||||
|
ConfigInfo::ConfigRuleSection s;
|
||||||
|
s.m_sectionType= BaseString("TCP");
|
||||||
|
s.m_sectionData= new Properties;
|
||||||
|
char buf[16];
|
||||||
|
snprintf(buf, sizeof(buf), "%u", nodeId1);
|
||||||
|
s.m_sectionData->put("NodeId1", buf);
|
||||||
|
snprintf(buf, sizeof(buf), "%u", nodeId2);
|
||||||
|
s.m_sectionData->put("NodeId2", buf);
|
||||||
|
sections.push_back(s);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
@@ -71,6 +71,21 @@ public:
|
|||||||
const char * m_ruleData;
|
const char * m_ruleData;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Entry for config rule
|
||||||
|
*/
|
||||||
|
struct ConfigRuleSection {
|
||||||
|
BaseString m_sectionType;
|
||||||
|
Properties * m_sectionData;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ConfigRule {
|
||||||
|
bool (* m_configRule)(Vector<ConfigRuleSection>&,
|
||||||
|
struct InitConfigFileParser::Context &,
|
||||||
|
const char * m_ruleData);
|
||||||
|
const char * m_ruleData;
|
||||||
|
};
|
||||||
|
|
||||||
ConfigInfo();
|
ConfigInfo();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -113,6 +128,7 @@ private:
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
static const SectionRule m_SectionRules[];
|
static const SectionRule m_SectionRules[];
|
||||||
|
static const ConfigRule m_ConfigRules[];
|
||||||
static const int m_NoOfRules;
|
static const int m_NoOfRules;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -163,6 +163,30 @@ InitConfigFileParser::parseConfig(FILE * file) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for(size_t i = 0; ConfigInfo::m_ConfigRules[i].m_configRule != 0; i++){
|
||||||
|
ctx.type = InitConfigFileParser::Undefined;
|
||||||
|
ctx.m_currentSection = 0;
|
||||||
|
ctx.m_userDefaults = 0;
|
||||||
|
ctx.m_currentInfo = 0;
|
||||||
|
ctx.m_systemDefaults = 0;
|
||||||
|
|
||||||
|
Vector<ConfigInfo::ConfigRuleSection> tmp;
|
||||||
|
if(!(* ConfigInfo::m_ConfigRules[i].m_configRule)(tmp, ctx,
|
||||||
|
ConfigInfo::m_ConfigRules[i].m_ruleData))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
for(size_t j = 0; j<tmp.size(); j++){
|
||||||
|
snprintf(ctx.fname, sizeof(ctx.fname), tmp[j].m_sectionType.c_str());
|
||||||
|
ctx.type = InitConfigFileParser::Section;
|
||||||
|
ctx.m_currentSection = tmp[j].m_sectionData;
|
||||||
|
ctx.m_userDefaults = getSection(ctx.fname, ctx.m_defaults);
|
||||||
|
ctx.m_currentInfo = m_info->getInfo(ctx.fname);
|
||||||
|
ctx.m_systemDefaults = m_info->getDefaults(ctx.fname);
|
||||||
|
if(!storeSection(ctx))
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Uint32 nConnections = 0;
|
Uint32 nConnections = 0;
|
||||||
Uint32 nComputers = 0;
|
Uint32 nComputers = 0;
|
||||||
Uint32 nNodes = 0;
|
Uint32 nNodes = 0;
|
||||||
@@ -499,28 +523,22 @@ bool
|
|||||||
InitConfigFileParser::storeSection(Context& ctx){
|
InitConfigFileParser::storeSection(Context& ctx){
|
||||||
if(ctx.m_currentSection == NULL)
|
if(ctx.m_currentSection == NULL)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
for(int i = strlen(ctx.fname) - 1; i>=0; i--){
|
for(int i = strlen(ctx.fname) - 1; i>=0; i--){
|
||||||
ctx.fname[i] = toupper(ctx.fname[i]);
|
ctx.fname[i] = toupper(ctx.fname[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
snprintf(ctx.pname, sizeof(ctx.pname), ctx.fname);
|
snprintf(ctx.pname, sizeof(ctx.pname), ctx.fname);
|
||||||
|
|
||||||
char buf[255];
|
char buf[255];
|
||||||
if(ctx.type == InitConfigFileParser::Section)
|
if(ctx.type == InitConfigFileParser::Section)
|
||||||
snprintf(buf, sizeof(buf), "%s", ctx.fname);
|
snprintf(buf, sizeof(buf), "%s", ctx.fname);
|
||||||
if(ctx.type == InitConfigFileParser::DefaultSection)
|
if(ctx.type == InitConfigFileParser::DefaultSection)
|
||||||
snprintf(buf, sizeof(buf), "%s DEFAULT", ctx.fname);
|
snprintf(buf, sizeof(buf), "%s DEFAULT", ctx.fname);
|
||||||
|
|
||||||
snprintf(ctx.fname, sizeof(ctx.fname), buf);
|
snprintf(ctx.fname, sizeof(ctx.fname), buf);
|
||||||
if(ctx.type == InitConfigFileParser::Section){
|
if(ctx.type == InitConfigFileParser::Section){
|
||||||
for(int i = 0; i<m_info->m_NoOfRules; i++){
|
for(int i = 0; i<m_info->m_NoOfRules; i++){
|
||||||
const ConfigInfo::SectionRule & rule = m_info->m_SectionRules[i];
|
const ConfigInfo::SectionRule & rule = m_info->m_SectionRules[i];
|
||||||
if(!strcmp(rule.m_section, "*") || !strcmp(rule.m_section, ctx.fname)){
|
if(!strcmp(rule.m_section, "*") || !strcmp(rule.m_section, ctx.fname))
|
||||||
if(!(* rule.m_sectionRule)(ctx, rule.m_ruleData)){
|
if(!(* rule.m_sectionRule)(ctx, rule.m_ruleData))
|
||||||
return false;
|
return false;
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user