Commit 45c94a28 authored by unknown's avatar unknown

enables case insensitivity in ndb config file

parent a8f24dc7
...@@ -55,7 +55,7 @@ public: ...@@ -55,7 +55,7 @@ public:
static const char delimiter = ':'; static const char delimiter = ':';
static const char version[]; static const char version[];
Properties(); Properties(bool case_insensitive= false);
Properties(const Properties &); Properties(const Properties &);
Properties(const Property *, int len); Properties(const Property *, int len);
virtual ~Properties(); virtual ~Properties();
......
...@@ -160,14 +160,14 @@ const int ConfigInfo::m_NoOfRules = sizeof(m_SectionRules)/sizeof(SectionRule); ...@@ -160,14 +160,14 @@ const int ConfigInfo::m_NoOfRules = sizeof(m_SectionRules)/sizeof(SectionRule);
* Config Rules declarations * Config Rules declarations
****************************************************************************/ ****************************************************************************/
static bool add_node_connections(Vector<ConfigInfo::ConfigRuleSection>&sections, static bool add_node_connections(Vector<ConfigInfo::ConfigRuleSection>&sections,
struct InitConfigFileParser::Context &ctx, struct InitConfigFileParser::Context &ctx,
const char * rule_data); const char * rule_data);
static bool add_server_ports(Vector<ConfigInfo::ConfigRuleSection>&sections, static bool add_server_ports(Vector<ConfigInfo::ConfigRuleSection>&sections,
struct InitConfigFileParser::Context &ctx, struct InitConfigFileParser::Context &ctx,
const char * rule_data); const char * rule_data);
static bool check_node_vs_replicas(Vector<ConfigInfo::ConfigRuleSection>&sections, static bool check_node_vs_replicas(Vector<ConfigInfo::ConfigRuleSection>&sections,
struct InitConfigFileParser::Context &ctx, struct InitConfigFileParser::Context &ctx,
const char * rule_data); const char * rule_data);
const ConfigInfo::ConfigRule const ConfigInfo::ConfigRule
ConfigInfo::m_ConfigRules[] = { ConfigInfo::m_ConfigRules[] = {
...@@ -439,7 +439,7 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = { ...@@ -439,7 +439,7 @@ const ConfigInfo::ParamInfo ConfigInfo::m_ParamInfo[] = {
8192, 8192,
0, 0,
MAX_INT_RNIL MAX_INT_RNIL
}, },
{ {
CFG_DB_NO_TRIGGERS, CFG_DB_NO_TRIGGERS,
...@@ -1892,21 +1892,19 @@ const int ConfigInfo::m_NoOfParams = sizeof(m_ParamInfo) / sizeof(ParamInfo); ...@@ -1892,21 +1892,19 @@ const int ConfigInfo::m_NoOfParams = sizeof(m_ParamInfo) / sizeof(ParamInfo);
****************************************************************************/ ****************************************************************************/
static void require(bool v) { if(!v) abort();} static void require(bool v) { if(!v) abort();}
ConfigInfo::ConfigInfo() { ConfigInfo::ConfigInfo()
: m_info(true), m_systemDefaults(true)
{
int i; int i;
Properties *section; Properties *section;
const Properties *oldpinfo; const Properties *oldpinfo;
m_info.setCaseInsensitiveNames(true);
m_systemDefaults.setCaseInsensitiveNames(true);
for (i=0; i<m_NoOfParams; i++) { for (i=0; i<m_NoOfParams; i++) {
const ParamInfo & param = m_ParamInfo[i]; const ParamInfo & param = m_ParamInfo[i];
// Create new section if it did not exist // Create new section if it did not exist
if (!m_info.getCopy(param._section, &section)) { if (!m_info.getCopy(param._section, &section)) {
Properties newsection; Properties newsection(true);
newsection.setCaseInsensitiveNames(true);
m_info.put(param._section, &newsection); m_info.put(param._section, &newsection);
} }
...@@ -1914,7 +1912,7 @@ ConfigInfo::ConfigInfo() { ...@@ -1914,7 +1912,7 @@ ConfigInfo::ConfigInfo() {
m_info.getCopy(param._section, &section); m_info.getCopy(param._section, &section);
// Create pinfo (parameter info) entry // Create pinfo (parameter info) entry
Properties pinfo; Properties pinfo(true);
pinfo.put("Id", param._paramId); pinfo.put("Id", param._paramId);
pinfo.put("Fname", param._fname); pinfo.put("Fname", param._fname);
pinfo.put("Description", param._description); pinfo.put("Description", param._description);
...@@ -1942,8 +1940,7 @@ ConfigInfo::ConfigInfo() { ...@@ -1942,8 +1940,7 @@ ConfigInfo::ConfigInfo() {
if(param._type != ConfigInfo::SECTION){ if(param._type != ConfigInfo::SECTION){
Properties * p; Properties * p;
if(!m_systemDefaults.getCopy(param._section, &p)){ if(!m_systemDefaults.getCopy(param._section, &p)){
p = new Properties(); p = new Properties(true);
p->setCaseInsensitiveNames(true);
} }
if(param._type != STRING && if(param._type != STRING &&
param._default != UNDEFINED && param._default != UNDEFINED &&
...@@ -2834,7 +2831,7 @@ fixDepricated(InitConfigFileParser::Context & ctx, const char * data){ ...@@ -2834,7 +2831,7 @@ fixDepricated(InitConfigFileParser::Context & ctx, const char * data){
* Transform old values to new values * Transform old values to new values
* Transform new values to old values (backward compatible) * Transform new values to old values (backward compatible)
*/ */
Properties tmp; Properties tmp(true);
Properties::Iterator it(ctx.m_currentSection); Properties::Iterator it(ctx.m_currentSection);
for (name = it.first(); name != NULL; name = it.next()) { for (name = it.first(); name != NULL; name = it.next()) {
const DepricationTransform * p = &f_deprication[0]; const DepricationTransform * p = &f_deprication[0];
...@@ -2966,8 +2963,8 @@ add_node_connections(Vector<ConfigInfo::ConfigRuleSection>&sections, ...@@ -2966,8 +2963,8 @@ add_node_connections(Vector<ConfigInfo::ConfigRuleSection>&sections,
{ {
Uint32 i; Uint32 i;
Properties * props= ctx.m_config; Properties * props= ctx.m_config;
Properties p_connections; Properties p_connections(true);
Properties p_connections2; Properties p_connections2(true);
for (i = 0;; i++){ for (i = 0;; i++){
const Properties * tmp; const Properties * tmp;
...@@ -2987,8 +2984,8 @@ add_node_connections(Vector<ConfigInfo::ConfigRuleSection>&sections, ...@@ -2987,8 +2984,8 @@ add_node_connections(Vector<ConfigInfo::ConfigRuleSection>&sections,
Uint32 nNodes; Uint32 nNodes;
ctx.m_userProperties.get("NoOfNodes", &nNodes); ctx.m_userProperties.get("NoOfNodes", &nNodes);
Properties p_db_nodes; Properties p_db_nodes(true);
Properties p_api_mgm_nodes; Properties p_api_mgm_nodes(true);
Uint32 i_db= 0, i_api_mgm= 0, n; Uint32 i_db= 0, i_api_mgm= 0, n;
for (i= 0, n= 0; n < nNodes; i++){ for (i= 0, n= 0; n < nNodes; i++){
...@@ -3014,7 +3011,7 @@ add_node_connections(Vector<ConfigInfo::ConfigRuleSection>&sections, ...@@ -3014,7 +3011,7 @@ add_node_connections(Vector<ConfigInfo::ConfigRuleSection>&sections,
if(!p_connections2.get("", nodeId1+nodeId2<<16, &dummy)) { if(!p_connections2.get("", nodeId1+nodeId2<<16, &dummy)) {
ConfigInfo::ConfigRuleSection s; ConfigInfo::ConfigRuleSection s;
s.m_sectionType= BaseString("TCP"); s.m_sectionType= BaseString("TCP");
s.m_sectionData= new Properties; s.m_sectionData= new Properties(true);
char buf[16]; char buf[16];
snprintf(buf, sizeof(buf), "%u", nodeId1); snprintf(buf, sizeof(buf), "%u", nodeId1);
s.m_sectionData->put("NodeId1", buf); s.m_sectionData->put("NodeId1", buf);
...@@ -3031,7 +3028,7 @@ add_node_connections(Vector<ConfigInfo::ConfigRuleSection>&sections, ...@@ -3031,7 +3028,7 @@ add_node_connections(Vector<ConfigInfo::ConfigRuleSection>&sections,
if(!p_db_nodes.get("", j, &nodeId2)) break; if(!p_db_nodes.get("", j, &nodeId2)) break;
ConfigInfo::ConfigRuleSection s; ConfigInfo::ConfigRuleSection s;
s.m_sectionType= BaseString("TCP"); s.m_sectionType= BaseString("TCP");
s.m_sectionData= new Properties; s.m_sectionData= new Properties(true);
char buf[16]; char buf[16];
snprintf(buf, sizeof(buf), "%u", nodeId1); snprintf(buf, sizeof(buf), "%u", nodeId1);
s.m_sectionData->put("NodeId1", buf); s.m_sectionData->put("NodeId1", buf);
...@@ -3052,7 +3049,7 @@ static bool add_server_ports(Vector<ConfigInfo::ConfigRuleSection>&sections, ...@@ -3052,7 +3049,7 @@ static bool add_server_ports(Vector<ConfigInfo::ConfigRuleSection>&sections,
{ {
#if 0 #if 0
Properties * props= ctx.m_config; Properties * props= ctx.m_config;
Properties computers; Properties computers(true);
Uint32 port_base = NDB_BASE_PORT+2; Uint32 port_base = NDB_BASE_PORT+2;
Uint32 nNodes; Uint32 nNodes;
......
...@@ -43,10 +43,10 @@ InitConfigFileParser::~InitConfigFileParser() { ...@@ -43,10 +43,10 @@ InitConfigFileParser::~InitConfigFileParser() {
// Read Config File // Read Config File
//**************************************************************************** //****************************************************************************
InitConfigFileParser::Context::Context(const ConfigInfo * info) InitConfigFileParser::Context::Context(const ConfigInfo * info)
: m_configValues(1000, 20) { : m_configValues(1000, 20), m_userProperties(true) {
m_config = new Properties(); m_config = new Properties(true);
m_defaults = new Properties(); m_defaults = new Properties(true);
} }
InitConfigFileParser::Context::~Context(){ InitConfigFileParser::Context::~Context(){
...@@ -115,7 +115,7 @@ InitConfigFileParser::parseConfig(FILE * file) { ...@@ -115,7 +115,7 @@ InitConfigFileParser::parseConfig(FILE * file) {
snprintf(ctx.fname, sizeof(ctx.fname), section); free(section); snprintf(ctx.fname, sizeof(ctx.fname), section); free(section);
ctx.type = InitConfigFileParser::DefaultSection; ctx.type = InitConfigFileParser::DefaultSection;
ctx.m_sectionLineno = ctx.m_lineno; ctx.m_sectionLineno = ctx.m_lineno;
ctx.m_currentSection = new Properties(); ctx.m_currentSection = new Properties(true);
ctx.m_userDefaults = NULL; ctx.m_userDefaults = NULL;
ctx.m_currentInfo = m_info->getInfo(ctx.fname); ctx.m_currentInfo = m_info->getInfo(ctx.fname);
ctx.m_systemDefaults = m_info->getDefaults(ctx.fname); ctx.m_systemDefaults = m_info->getDefaults(ctx.fname);
...@@ -137,7 +137,7 @@ InitConfigFileParser::parseConfig(FILE * file) { ...@@ -137,7 +137,7 @@ InitConfigFileParser::parseConfig(FILE * file) {
free(section); free(section);
ctx.type = InitConfigFileParser::Section; ctx.type = InitConfigFileParser::Section;
ctx.m_sectionLineno = ctx.m_lineno; ctx.m_sectionLineno = ctx.m_lineno;
ctx.m_currentSection = new Properties(); ctx.m_currentSection = new Properties(true);
ctx.m_userDefaults = getSection(ctx.fname, ctx.m_defaults); ctx.m_userDefaults = getSection(ctx.fname, ctx.m_defaults);
ctx.m_currentInfo = m_info->getInfo(ctx.fname); ctx.m_currentInfo = m_info->getInfo(ctx.fname);
ctx.m_systemDefaults = m_info->getDefaults(ctx.fname); ctx.m_systemDefaults = m_info->getDefaults(ctx.fname);
......
...@@ -56,7 +56,7 @@ class PropertiesImpl { ...@@ -56,7 +56,7 @@ class PropertiesImpl {
PropertiesImpl(const PropertiesImpl &); // Not implemented PropertiesImpl(const PropertiesImpl &); // Not implemented
PropertiesImpl& operator=(const PropertiesImpl&); // Not implemented PropertiesImpl& operator=(const PropertiesImpl&); // Not implemented
public: public:
PropertiesImpl(Properties *); PropertiesImpl(Properties *, bool case_insensitive);
PropertiesImpl(Properties *, const PropertiesImpl &); PropertiesImpl(Properties *, const PropertiesImpl &);
~PropertiesImpl(); ~PropertiesImpl();
...@@ -69,6 +69,7 @@ class PropertiesImpl { ...@@ -69,6 +69,7 @@ class PropertiesImpl {
bool m_insensitive; bool m_insensitive;
int (* compare)(const char *s1, const char *s2); int (* compare)(const char *s1, const char *s2);
void setCaseInsensitiveNames(bool value);
void grow(int sizeToAdd); void grow(int sizeToAdd);
PropertyImpl * get(const char * name) const; PropertyImpl * get(const char * name) const;
...@@ -113,9 +114,9 @@ Property::~Property(){ ...@@ -113,9 +114,9 @@ Property::~Property(){
/** /**
* Methods for Properties * Methods for Properties
*/ */
Properties::Properties(){ Properties::Properties(bool case_insensitive){
parent = 0; parent = 0;
impl = new PropertiesImpl(this); impl = new PropertiesImpl(this, case_insensitive);
} }
Properties::Properties(const Properties & org){ Properties::Properties(const Properties & org){
...@@ -124,7 +125,7 @@ Properties::Properties(const Properties & org){ ...@@ -124,7 +125,7 @@ Properties::Properties(const Properties & org){
} }
Properties::Properties(const Property * anArray, int arrayLen){ Properties::Properties(const Property * anArray, int arrayLen){
impl = new PropertiesImpl(this); impl = new PropertiesImpl(this, false);
put(anArray, arrayLen); put(anArray, arrayLen);
} }
...@@ -479,13 +480,12 @@ Properties::unpack(const Uint32 * buf, Uint32 bufLen){ ...@@ -479,13 +480,12 @@ Properties::unpack(const Uint32 * buf, Uint32 bufLen){
/** /**
* Methods for PropertiesImpl * Methods for PropertiesImpl
*/ */
PropertiesImpl::PropertiesImpl(Properties * p){ PropertiesImpl::PropertiesImpl(Properties * p, bool case_insensitive){
this->properties = p; this->properties = p;
items = 0; items = 0;
size = 25; size = 25;
content = new PropertyImpl * [size]; content = new PropertyImpl * [size];
this->m_insensitive = false; setCaseInsensitiveNames(case_insensitive);
this->compare = strcmp;
} }
PropertiesImpl::PropertiesImpl(Properties * p, const PropertiesImpl & org){ PropertiesImpl::PropertiesImpl(Properties * p, const PropertiesImpl & org){
...@@ -506,6 +506,15 @@ PropertiesImpl::~PropertiesImpl(){ ...@@ -506,6 +506,15 @@ PropertiesImpl::~PropertiesImpl(){
delete [] content; delete [] content;
} }
void
PropertiesImpl::setCaseInsensitiveNames(bool value){
m_insensitive = value;
if(value)
compare = strcasecmp;
else
compare = strcmp;
}
void void
PropertiesImpl::grow(int sizeToAdd){ PropertiesImpl::grow(int sizeToAdd){
PropertyImpl ** newContent = new PropertyImpl * [size + sizeToAdd]; PropertyImpl ** newContent = new PropertyImpl * [size + sizeToAdd];
...@@ -523,9 +532,11 @@ PropertiesImpl::get(const char * name) const { ...@@ -523,9 +532,11 @@ PropertiesImpl::get(const char * name) const {
return 0; return 0;
} }
for(unsigned int i = 0; i<tmp->items; i++) for(unsigned int i = 0; i<tmp->items; i++) {
if((* compare)(tmp->content[i]->name, short_name) == 0) if((* compare)(tmp->content[i]->name, short_name) == 0)
return tmp->content[i]; return tmp->content[i];
}
return 0; return 0;
} }
...@@ -1110,11 +1121,7 @@ Properties::getCopy(const char * name, Uint32 no, Properties ** value) const { ...@@ -1110,11 +1121,7 @@ Properties::getCopy(const char * name, Uint32 no, Properties ** value) const {
void void
Properties::setCaseInsensitiveNames(bool value){ Properties::setCaseInsensitiveNames(bool value){
impl->m_insensitive = value; impl->setCaseInsensitiveNames(value);
if(value)
impl->compare = strcasecmp;
else
impl->compare = strcmp;
} }
bool bool
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment