Commit 9d71c4f2 authored by unknown's avatar unknown

ndb - bug#22548, Data nodes fail during starting if MaxNoOfUniqueHashIndexes has upper limit.

added check in ndb_mgmd so that the sum of MaxNoOfTables, MaxNoOfOrderedIndexes, MaxNoOfUniqueHashIndexes and the number of System Tables must not overflow the max Uint32 number.


storage/ndb/src/mgmsrv/ConfigInfo.cpp:
  the sum of MaxNoOfTables, MaxNoOfOrderedIndexes, MaxNoOfUniqueHashIndexes and the number of System Tables must not overflow the max value of Uint32.
parent 72059a9b
...@@ -3308,6 +3308,30 @@ checkDbConstraints(InitConfigFileParser::Context & ctx, const char *){ ...@@ -3308,6 +3308,30 @@ checkDbConstraints(InitConfigFileParser::Context & ctx, const char *){
ctx.m_userProperties.put("NoOfReplicas", replicas); ctx.m_userProperties.put("NoOfReplicas", replicas);
} }
/**
* In kernel, will calculate the MaxNoOfMeataTables use the following sum:
* Uint32 noOfMetaTables = noOfTables + noOfOrderedIndexes +
* noOfUniqueHashIndexes + 2
* 2 is the number of the SysTables.
* So must check that the sum does't exceed the max value of Uint32.
*/
Uint32 noOfTables = 0,
noOfOrderedIndexes = 0,
noOfUniqueHashIndexes = 0;
ctx.m_currentSection->get("MaxNoOfTables", &noOfTables);
ctx.m_currentSection->get("MaxNoOfOrderedIndexes", &noOfOrderedIndexes);
ctx.m_currentSection->get("MaxNoOfUniqueHashIndexes", &noOfUniqueHashIndexes);
Uint64 sum= (Uint64)noOfTables + noOfOrderedIndexes + noOfUniqueHashIndexes;
if (sum > ((Uint32)~0 - 2)) {
ctx.reportError("The sum of MaxNoOfTables, MaxNoOfOrderedIndexes and"
" MaxNoOfUniqueHashIndexes must not exceed %u - [%s]"
" starting at line: %d",
((Uint32)~0 - 2), ctx.fname, ctx.m_sectionLineno);
return false;
}
return true; return true;
} }
......
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