4336 jonas oreland 2011-11-15 [merge]
ndb - merge 70 to 71
modified:
storage/ndb/include/kernel/ndb_limits.h
storage/ndb/include/mgmapi/mgmapi_config_parameters.h
storage/ndb/include/ndb_version.h.in
storage/ndb/src/kernel/blocks/dbacc/Dbacc.hpp
storage/ndb/src/kernel/blocks/dbacc/DbaccMain.cpp
storage/ndb/src/kernel/blocks/dbdih/Dbdih.hpp
storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp
storage/ndb/src/kernel/blocks/dblqh/Dblqh.hpp
storage/ndb/src/kernel/blocks/dblqh/DblqhCommon.cpp
storage/ndb/src/kernel/blocks/dblqh/DblqhCommon.hpp
storage/ndb/src/kernel/blocks/dblqh/DblqhInit.cpp
storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp
storage/ndb/src/kernel/blocks/dbspj/DbspjMain.cpp
storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp
storage/ndb/src/kernel/blocks/dbtup/DbtupDiskAlloc.cpp
storage/ndb/src/kernel/blocks/dbtup/DbtupExecQuery.cpp
storage/ndb/src/kernel/blocks/dbtup/DbtupGen.cpp
storage/ndb/src/kernel/blocks/dbtup/DbtupIndex.cpp
storage/ndb/src/kernel/blocks/dbtup/DbtupMeta.cpp
storage/ndb/src/kernel/blocks/dbtux/Dbtux.hpp
storage/ndb/src/kernel/vm/GlobalData.hpp
storage/ndb/src/kernel/vm/pc.hpp
4335 jonas oreland 2011-11-12 [merge]
ndb - merge 70 to 71
modified:
storage/ndb/src/kernel/vm/mt.cpp
=== modified file 'storage/ndb/include/kernel/ndb_limits.h'
--- a/storage/ndb/include/kernel/ndb_limits.h 2011-10-07 17:15:53 +0000
+++ b/storage/ndb/include/kernel/ndb_limits.h 2011-11-15 17:47:11 +0000
@@ -194,8 +194,9 @@
#define NDBMT_BLOCK_MASK ((1 << NDBMT_BLOCK_BITS) - 1)
#define NDBMT_BLOCK_INSTANCE_BITS 7
-#define MAX_NDBMT_LQH_WORKERS 4
-#define MAX_NDBMT_LQH_THREADS 4
+#define NDB_MAX_LOG_PARTS 4
+#define MAX_NDBMT_LQH_WORKERS NDB_MAX_LOG_PARTS
+#define MAX_NDBMT_LQH_THREADS NDB_MAX_LOG_PARTS
#define MAX_NDBMT_TC_THREADS 2
#define NDB_FILE_BUFFER_SIZE (256*1024)
=== modified file 'storage/ndb/include/mgmapi/mgmapi_config_parameters.h'
--- a/storage/ndb/include/mgmapi/mgmapi_config_parameters.h 2011-10-07 17:15:53 +0000
+++ b/storage/ndb/include/mgmapi/mgmapi_config_parameters.h 2011-11-15 17:47:11 +0000
@@ -68,6 +68,7 @@
#define CFG_DB_FILESYSTEM_PATH 125
#define CFG_DB_NO_REDOLOG_FILES 126
+#define CFG_DB_NO_REDOLOG_PARTS 632
#define CFG_DB_REDOLOG_FILE_SIZE 140
#define CFG_DB_LCP_DISC_PAGES_TUP 127
@@ -198,6 +199,7 @@
#define CFG_DB_MT_THREAD_CONFIG 628
#define CFG_DB_CRASH_ON_CORRUPTED_TUPLE 629
+/* 632 used for CFG_DB_NO_REDOLOG_PARTS */
#define CFG_NODE_ARBIT_RANK 200
#define CFG_NODE_ARBIT_DELAY 201
=== modified file 'storage/ndb/include/ndb_version.h.in'
--- a/storage/ndb/include/ndb_version.h.in 2011-07-04 16:30:34 +0000
+++ b/storage/ndb/include/ndb_version.h.in 2011-11-15 17:47:11 +0000
@@ -693,4 +693,25 @@ ndbd_get_config_supported(Uint32 x)
return x >= NDBD_GET_CONFIG_SUPPORT_71;
}
+#define NDBD_CONFIGURABLE_LOG_PARTS_70 NDB_MAKE_VERSION(7,0,29)
+#define NDBD_CONFIGURABLE_LOG_PARTS_71 NDB_MAKE_VERSION(7,1,18)
+#define NDBD_CONFIGURABLE_LOG_PARTS_72 NDB_MAKE_VERSION(7,2,3)
+
+static
+inline
+int
+ndb_configurable_log_parts(Uint32 x)
+{
+ const Uint32 major = (x >> 16) & 0xFF;
+ const Uint32 minor = (x >> 8) & 0xFF;
+
+ if (major == 7 && minor < 2)
+ {
+ if (minor == 0)
+ return x >= NDBD_CONFIGURABLE_LOG_PARTS_70;
+ else if (minor == 1)
+ return x >= NDBD_CONFIGURABLE_LOG_PARTS_71;
+ }
+ return x >= NDBD_CONFIGURABLE_LOG_PARTS_72;
+}
#endif
=== modified file 'storage/ndb/src/kernel/blocks/dbacc/Dbacc.hpp'
--- a/storage/ndb/src/kernel/blocks/dbacc/Dbacc.hpp 2011-06-30 15:59:25 +0000
+++ b/storage/ndb/src/kernel/blocks/dbacc/Dbacc.hpp 2011-11-14 09:18:48 +0000
@@ -624,8 +624,8 @@ struct ScanRec {
/* TABREC */
/* --------------------------------------------------------------------------------- */
struct Tabrec {
- Uint32 fragholder[MAX_FRAG_PER_NODE];
- Uint32 fragptrholder[MAX_FRAG_PER_NODE];
+ Uint32 fragholder[MAX_FRAG_PER_LQH];
+ Uint32 fragptrholder[MAX_FRAG_PER_LQH];
Uint32 tabUserPtr;
BlockReference tabUserRef;
Uint32 tabUserGsn;
=== modified file 'storage/ndb/src/kernel/blocks/dbacc/DbaccMain.cpp'
--- a/storage/ndb/src/kernel/blocks/dbacc/DbaccMain.cpp 2011-06-30 15:59:25 +0000
+++ b/storage/ndb/src/kernel/blocks/dbacc/DbaccMain.cpp 2011-11-14 09:18:48 +0000
@@ -481,7 +481,7 @@ void Dbacc::initialiseTableRec(Signal* s
for (tabptr.i = 0; tabptr.i < ctablesize; tabptr.i++) {
refresh_watch_dog();
ptrAss(tabptr, tabrec);
- for (Uint32 i = 0; i < MAX_FRAG_PER_NODE; i++) {
+ for (Uint32 i = 0; i < NDB_ARRAY_SIZE(tabptr.p->fragholder); i++) {
tabptr.p->fragholder[i] = RNIL;
tabptr.p->fragptrholder[i] = RNIL;
}//for
@@ -653,7 +653,7 @@ Dbacc::execDROP_FRAG_REQ(Signal* signal)
tabPtr.p->tabUserPtr = req->senderData;
tabPtr.p->tabUserGsn = GSN_DROP_FRAG_REQ;
- for (Uint32 i = 0; i < MAX_FRAG_PER_NODE; i++)
+ for (Uint32 i = 0; i < NDB_ARRAY_SIZE(tabPtr.p->fragholder); i++)
{
jam();
if (tabPtr.p->fragholder[i] == req->fragId)
@@ -677,7 +677,7 @@ void Dbacc::releaseRootFragResources(Sig
if (tabPtr.p->tabUserGsn == GSN_DROP_TAB_REQ)
{
jam();
- for (Uint32 i = 0; i < MAX_FRAG_PER_NODE; i++)
+ for (Uint32 i = 0; i < NDB_ARRAY_SIZE(tabPtr.p->fragholder); i++)
{
jam();
if (tabPtr.p->fragholder[i] != RNIL)
@@ -857,7 +857,7 @@ void Dbacc::releaseFragRecord(Signal* si
/* -------------------------------------------------------------------------- */
bool Dbacc::addfragtotab(Signal* signal, Uint32 rootIndex, Uint32 fid)
{
- for (Uint32 i = 0; i < MAX_FRAG_PER_NODE; i++) {
+ for (Uint32 i = 0; i < NDB_ARRAY_SIZE(tabptr.p->fragholder); i++) {
jam();
if (tabptr.p->fragholder[i] == RNIL) {
jam();
@@ -2493,7 +2493,7 @@ void Dbacc::execACC_LOCKREQ(Signal* sign
ptrCheckGuard(tabptr, ctablesize, tabrec);
// find fragment (TUX will know it)
if (req->fragPtrI == RNIL) {
- for (Uint32 i = 0; i < MAX_FRAG_PER_NODE; i++) {
+ for (Uint32 i = 0; i < NDB_ARRAY_SIZE(tabptr.p->fragholder); i++) {
jam();
if (tabptr.p->fragholder[i] == req->fragId){
jam();
@@ -7590,7 +7590,7 @@ void Dbacc::takeOutReadyScanQueue(Signal
bool Dbacc::getfragmentrec(Signal* signal, FragmentrecPtr& rootPtr, Uint32 fid)
{
- for (Uint32 i = 0; i < MAX_FRAG_PER_NODE; i++) {
+ for (Uint32 i = 0; i < NDB_ARRAY_SIZE(tabptr.p->fragholder); i++) {
jam();
if (tabptr.p->fragholder[i] == fid) {
jam();
=== modified file 'storage/ndb/src/kernel/blocks/dbdih/Dbdih.hpp'
--- a/storage/ndb/src/kernel/blocks/dbdih/Dbdih.hpp 2011-06-30 15:59:25 +0000
+++ b/storage/ndb/src/kernel/blocks/dbdih/Dbdih.hpp 2011-11-14 09:18:48 +0000
@@ -520,7 +520,7 @@ public:
// Each entry in this array contains a reference to 16 fragment records in a
// row. Thus finding the correct record is very quick provided the fragment id.
//-----------------------------------------------------------------------------
- Uint32 startFid[MAX_NDB_NODES * MAX_FRAG_PER_NODE / NO_OF_FRAGS_PER_CHUNK];
+ Uint32 startFid[MAX_NDB_NODES * MAX_FRAG_PER_LQH / NO_OF_FRAGS_PER_CHUNK];
Uint32 tabFile[2];
Uint32 connectrec;
=== modified file 'storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp'
--- a/storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp 2011-10-28 16:37:39 +0000
+++ b/storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp 2011-11-15 17:47:11 +0000
@@ -7485,6 +7485,8 @@ void Dbdih::execCREATE_FRAGMENTATION_REQ
Uint32 err = 0;
const Uint32 defaultFragments =
c_fragments_per_node * cnoOfNodeGroups * cnoReplicas;
+ const Uint32 maxFragments =
+ MAX_FRAG_PER_LQH * getLqhWorkers() * cnoOfNodeGroups * cnoReplicas;
do {
NodeGroupRecordPtr NGPtr;
@@ -7506,11 +7508,15 @@ void Dbdih::execCREATE_FRAGMENTATION_REQ
case DictTabInfo::AllNodesMediumTable:
jam();
noOfFragments = 2 * defaultFragments;
+ if (noOfFragments > maxFragments)
+ noOfFragments = maxFragments;
set_default_node_groups(signal, noOfFragments);
break;
case DictTabInfo::AllNodesLargeTable:
jam();
noOfFragments = 4 * defaultFragments;
+ if (noOfFragments > maxFragments)
+ noOfFragments = maxFragments;
set_default_node_groups(signal, noOfFragments);
break;
case DictTabInfo::SingleFragment:
@@ -7863,7 +7869,7 @@ void Dbdih::execDIADDTABREQ(Signal* sign
}
union {
- Uint16 fragments[2 + MAX_FRAG_PER_NODE*MAX_REPLICAS*MAX_NDB_NODES];
+ Uint16 fragments[2 + MAX_FRAG_PER_LQH*MAX_REPLICAS*MAX_NDB_NODES];
Uint32 align;
};
(void)align; // kill warning
=== modified file 'storage/ndb/src/kernel/blocks/dblqh/Dblqh.hpp'
--- a/storage/ndb/src/kernel/blocks/dblqh/Dblqh.hpp 2011-10-28 09:56:57 +0000
+++ b/storage/ndb/src/kernel/blocks/dblqh/Dblqh.hpp 2011-11-14 12:02:56 +0000
@@ -111,6 +111,9 @@ class Lgman;
#define ZPOS_PREV_PAGE_NO 19
#define ZPOS_IN_FREE_LIST 20
+/* Specify number of log parts used to enable use of more LQH threads */
+#define ZPOS_NO_LOG_PARTS 21
+
/* ------------------------------------------------------------------------- */
/* CONSTANTS FOR THE VARIOUS REPLICA AND NODE TYPES. */
/* ------------------------------------------------------------------------- */
@@ -1929,8 +1932,8 @@ public:
,TABLE_READ_ONLY = 9
};
- UintR fragrec[MAX_FRAG_PER_NODE];
- Uint16 fragid[MAX_FRAG_PER_NODE];
+ UintR fragrec[MAX_FRAG_PER_LQH];
+ Uint16 fragid[MAX_FRAG_PER_LQH];
/**
* Status of the table
*/
@@ -2834,7 +2837,6 @@ private:
UintR cfirstfreeLcpLoc;
UintR clcpFileSize;
-#define ZLOG_PART_FILE_SIZE 4
LogPartRecord *logPartRecord;
LogPartRecordPtr logPartPtr;
UintR clogPartFileSize;
=== modified file 'storage/ndb/src/kernel/blocks/dblqh/DblqhCommon.cpp'
--- a/storage/ndb/src/kernel/blocks/dblqh/DblqhCommon.cpp 2011-06-30 15:59:25 +0000
+++ b/storage/ndb/src/kernel/blocks/dblqh/DblqhCommon.cpp 2011-11-14 12:02:56 +0000
@@ -20,6 +20,7 @@
NdbLogPartInfo::NdbLogPartInfo(Uint32 instanceNo)
{
+ LogParts = globalData.ndbLogParts;
lqhWorkers = globalData.ndbMtLqhWorkers;
partCount = 0;
partMask.clear();
=== modified file 'storage/ndb/src/kernel/blocks/dblqh/DblqhCommon.hpp'
--- a/storage/ndb/src/kernel/blocks/dblqh/DblqhCommon.hpp 2011-06-30 15:59:25 +0000
+++ b/storage/ndb/src/kernel/blocks/dblqh/DblqhCommon.hpp 2011-11-14 12:02:56 +0000
@@ -22,7 +22,10 @@
#include <Bitmask.hpp>
/*
- * Log part id is from DBDIH. Number of log parts is fixed as 4.
+ * Log part id is from DBDIH. Number of log parts is configurable with a
+ * maximum setting and minimum of 4 parts. The below description assumes
+ * 4 parts.
+ *
* A log part is identified by log part number (0-3)
*
* log part number = log part id % 4
@@ -38,12 +41,12 @@
* instance (main instance 0 or worker instances 1-4).
*/
struct NdbLogPartInfo {
- enum { LogParts = 4 };
+ Uint32 LogParts;
NdbLogPartInfo(Uint32 instanceNo);
Uint32 lqhWorkers;
Uint32 partCount;
- Uint16 partNo[LogParts];
- Bitmask<(LogParts+31)/32> partMask;
+ Uint16 partNo[NDB_MAX_LOG_PARTS];
+ Bitmask<(NDB_MAX_LOG_PARTS+31)/32> partMask;
Uint32 partNoFromId(Uint32 lpid) const;
bool partNoOwner(Uint32 lpno) const;
bool partNoOwner(Uint32 tabId, Uint32 fragId);
=== modified file 'storage/ndb/src/kernel/blocks/dblqh/DblqhInit.cpp'
--- a/storage/ndb/src/kernel/blocks/dblqh/DblqhInit.cpp 2011-06-30 15:59:25 +0000
+++ b/storage/ndb/src/kernel/blocks/dblqh/DblqhInit.cpp 2011-11-14 12:02:56 +0000
@@ -36,9 +36,7 @@ void Dblqh::initData()
clcpFileSize = ZNO_CONCURRENT_LCP;
clfoFileSize = 0;
clogFileFileSize = 0;
-
- NdbLogPartInfo lpinfo(instance());
- clogPartFileSize = lpinfo.partCount;
+ clogPartFileSize = 0; // Not valid until READ_CONFIG
cpageRefFileSize = ZPAGE_REF_FILE_SIZE;
cscanrecFileSize = 0;
@@ -117,7 +115,7 @@ void Dblqh::initRecords()
logPartRecord = (LogPartRecord*)allocRecord("LogPartRecord",
sizeof(LogPartRecord),
- clogPartFileSize);
+ NDB_MAX_LOG_PARTS);
logFileRecord = (LogFileRecord*)allocRecord("LogFileRecord",
sizeof(LogFileRecord),
=== modified file 'storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp'
--- a/storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp 2011-11-10 14:23:53 +0000
+++ b/storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp 2011-11-15 17:47:11 +0000
@@ -1219,7 +1219,40 @@ void Dblqh::execREAD_CONFIG_REQ(Signal*
const ndb_mgm_configuration_iterator * p =
m_ctx.m_config.getOwnConfigIterator();
ndbrequire(p != 0);
-
+
+ clogPartFileSize = 4;
+
+ Uint32 nodeLogParts = 4;
+ ndb_mgm_get_int_parameter(p, CFG_DB_NO_REDOLOG_PARTS,
+ &nodeLogParts);
+ globalData.ndbLogParts = nodeLogParts;
+ ndbrequire(nodeLogParts <= NDB_MAX_LOG_PARTS);
+ {
+ NdbLogPartInfo lpinfo(instance());
+ clogPartFileSize = lpinfo.partCount; // How many are this instance responsible for...
+ }
+
+ if (globalData.ndbMtLqhWorkers > nodeLogParts)
+ {
+ char buf[255];
+ BaseString::snprintf(buf, sizeof(buf),
+ "Trying to start %d LQH workers with only %d log parts, try initial"
+ " node restart to be able to use more LQH workers.",
+ globalData.ndbMtLqhWorkers, nodeLogParts);
+ progError(__LINE__, NDBD_EXIT_INVALID_CONFIG, buf);
+ }
+ if (nodeLogParts != 4 &&
+ nodeLogParts != 8 &&
+ nodeLogParts != 16)
+ {
+ char buf[255];
+ BaseString::snprintf(buf, sizeof(buf),
+ "Trying to start with %d log parts, number of log parts can"
+ " only be set to 4, 8 or 16.",
+ nodeLogParts);
+ progError(__LINE__, NDBD_EXIT_INVALID_CONFIG, buf);
+ }
+
cnoLogFiles = 8;
ndbrequire(!ndb_mgm_get_int_parameter(p, CFG_DB_NO_REDOLOG_FILES,
&cnoLogFiles));
@@ -1889,7 +1922,7 @@ void Dblqh::execLQHFRAGREQ(Signal* signa
ptrCheckGuard(tTablePtr, ctabrecFileSize, tablerec);
FragrecordPtr tFragPtr;
tFragPtr.i = RNIL;
- for (Uint32 i = 0; i < MAX_FRAG_PER_NODE; i++) {
+ for (Uint32 i = 0; i < NDB_ARRAY_SIZE(tTablePtr.p->fragid); i++) {
if (tTablePtr.p->fragid[i] == fragptr.p->fragId) {
jam();
tFragPtr.i = tTablePtr.p->fragrec[i];
@@ -2633,7 +2666,7 @@ void Dblqh::removeTable(Uint32 tableId)
tabptr.i = tableId;
ptrCheckGuard(tabptr, ctabrecFileSize, tablerec);
- for (Uint32 i = 0; i < MAX_FRAG_PER_NODE; i++) {
+ for (Uint32 i = 0; i < NDB_ARRAY_SIZE(tabptr.p->fragid); i++) {
jam();
if (tabptr.p->fragid[i] != ZNIL) {
jam();
@@ -2778,7 +2811,7 @@ Dblqh::wait_reorg_suma_filter_enabled(Si
void
Dblqh::commit_reorg(TablerecPtr tablePtr)
{
- for (Uint32 i = 0; i < MAX_FRAG_PER_NODE; i++)
+ for (Uint32 i = 0; i < NDB_ARRAY_SIZE(tablePtr.p->fragrec); i++)
{
jam();
Ptr<Fragrecord> fragPtr;
@@ -14644,7 +14677,7 @@ void Dblqh::initGcpRecLab(Signal* signal
}//for
// initialize un-used part
Uint32 Ti;
- for (Ti = clogPartFileSize; Ti < ZLOG_PART_FILE_SIZE; Ti++) {
+ for (Ti = clogPartFileSize; Ti < NDB_MAX_LOG_PARTS; Ti++) {
gcpPtr.p->gcpFilePtr[Ti] = ZNIL;
gcpPtr.p->gcpPageNo[Ti] = ZNIL;
gcpPtr.p->gcpSyncReady[Ti] = FALSE;
@@ -15698,7 +15731,10 @@ void Dblqh::initWriteEndLab(Signal* sign
/*---------------------------------------------------------------------------*/
/* PAGE ZERO IN FILE ZERO MUST SET LOG LAP TO ONE SINCE IT HAS STARTED */
/* WRITING TO THE LOG, ALSO GLOBAL CHECKPOINTS ARE SET TO ZERO. */
+/* Set number of log parts used to ensure we use correct number of log parts */
+/* at system restart. Was previously hardcoded to 4. */
/*---------------------------------------------------------------------------*/
+ logPagePtr.p->logPageWord[ZPOS_NO_LOG_PARTS]= globalData.ndbLogParts;
logPagePtr.p->logPageWord[ZPOS_LOG_LAP] = 1;
logPagePtr.p->logPageWord[ZPOS_MAX_GCI_STARTED] = 0;
logPagePtr.p->logPageWord[ZPOS_MAX_GCI_COMPLETED] = 0;
@@ -15881,6 +15917,8 @@ void Dblqh::initLogpage(Signal* signal)
{
TcConnectionrecPtr ilpTcConnectptr;
+ /* Ensure all non-used header words are zero */
+ bzero(logPagePtr.p, sizeof(Uint32) * ZPAGE_HEADER_SIZE);
logPagePtr.p->logPageWord[ZPOS_LOG_LAP] = logPartPtr.p->logLap;
logPagePtr.p->logPageWord[ZPOS_MAX_GCI_COMPLETED] =
logPartPtr.p->logPartNewestCompletedGCI;
@@ -16423,6 +16461,35 @@ void Dblqh::openSrFrontpageLab(Signal* s
* -------------------------------------------------------------------------- */
void Dblqh::readSrFrontpageLab(Signal* signal)
{
+ Uint32 num_parts_used;
+ if (!ndb_configurable_log_parts(logPagePtr.p->logPageWord[ZPOS_VERSION])) {
+ jam();
+ num_parts_used= 4;
+ }
+ else
+ {
+ jam();
+ num_parts_used = logPagePtr.p->logPageWord[ZPOS_NO_LOG_PARTS];
+ }
+ /* Verify that number of log parts >= number of LQH workers */
+ if (globalData.ndbMtLqhWorkers > num_parts_used) {
+ char buf[255];
+ BaseString::snprintf(buf, sizeof(buf),
+ "Trying to start %d LQH workers with only %d log parts, try initial"
+ " node restart to be able to use more LQH workers.",
+ globalData.ndbMtLqhWorkers, num_parts_used);
+ progError(__LINE__, NDBD_EXIT_INVALID_CONFIG, buf);
+ }
+ if (num_parts_used != globalData.ndbLogParts)
+ {
+ char buf[255];
+ BaseString::snprintf(buf, sizeof(buf),
+ "Can only change NoOfLogParts through initial node restart, old"
+ " value of NoOfLogParts = %d, tried using %d",
+ num_parts_used, globalData.ndbLogParts);
+ progError(__LINE__, NDBD_EXIT_INVALID_CONFIG, buf);
+ }
+
Uint32 fileNo = logPagePtr.p->logPageWord[ZPAGE_HEADER_SIZE + ZPOS_FILE_NO];
if (fileNo == 0) {
jam();
@@ -20050,7 +20117,7 @@ void Dblqh::deleteFragrec(Uint32 fragId)
{
Uint32 indexFound= RNIL;
fragptr.i = RNIL;
- for (Uint32 i = 0; i < MAX_FRAG_PER_NODE; i++) {
+ for (Uint32 i = 0; i < NDB_ARRAY_SIZE(tabptr.p->fragid); i++) {
jam();
if (tabptr.p->fragid[i] == fragId) {
fragptr.i = tabptr.p->fragrec[i];
@@ -20265,7 +20332,7 @@ Dblqh::getFirstInLogQueue(Signal* signal
/* ---------------------------------------------------------------- */
bool Dblqh::getFragmentrec(Signal* signal, Uint32 fragId)
{
- for (Uint32 i = 0; i < MAX_FRAG_PER_NODE; i++) {
+ for (Uint32 i = 0; i < NDB_ARRAY_SIZE(tabptr.p->fragid); i++) {
jam();
if (tabptr.p->fragid[i] == fragId) {
fragptr.i = tabptr.p->fragrec[i];
@@ -20328,7 +20395,7 @@ void Dblqh::initialiseGcprec(Signal* sig
if (cgcprecFileSize != 0) {
for (gcpPtr.i = 0; gcpPtr.i < cgcprecFileSize; gcpPtr.i++) {
ptrAss(gcpPtr, gcpRecord);
- for (tigpIndex = 0; tigpIndex < ZLOG_PART_FILE_SIZE; tigpIndex++) {
+ for (tigpIndex = 0; tigpIndex < NDB_MAX_LOG_PARTS; tigpIndex++) {
gcpPtr.p->gcpLogPartState[tigpIndex] = ZIDLE;
gcpPtr.p->gcpSyncReady[tigpIndex] = ZFALSE;
}//for
@@ -20616,7 +20683,7 @@ void Dblqh::initialiseTabrec(Signal* sig
tabptr.p->tableStatus = Tablerec::NOT_DEFINED;
tabptr.p->usageCountR = 0;
tabptr.p->usageCountW = 0;
- for (Uint32 i = 0; i < MAX_FRAG_PER_NODE; i++) {
+ for (Uint32 i = 0; i < NDB_ARRAY_SIZE(tabptr.p->fragid); i++) {
tabptr.p->fragid[i] = ZNIL;
tabptr.p->fragrec[i] = RNIL;
}//for
@@ -20886,7 +20953,7 @@ bool Dblqh::insertFragrec(Signal* signal
terrorCode = ZNO_FREE_FRAGMENTREC;
return false;
}
- for (Uint32 i = 0; i < MAX_FRAG_PER_NODE; i++) {
+ for (Uint32 i = 0; i < NDB_ARRAY_SIZE(tabptr.p->fragid); i++) {
jam();
if (tabptr.p->fragid[i] == ZNIL) {
jam();
@@ -22579,7 +22646,7 @@ Dblqh::execDUMP_STATE_ORD(Signal* signal
i, tabPtr.p->tableStatus,
tabPtr.p->usageCountR, tabPtr.p->usageCountW);
- for (Uint32 j = 0; j<MAX_FRAG_PER_NODE; j++)
+ for (Uint32 j = 0; j<NDB_ARRAY_SIZE(tabPtr.p->fragrec); j++)
{
FragrecordPtr fragPtr;
if ((fragPtr.i = tabPtr.p->fragrec[j]) != RNIL)
=== modified file 'storage/ndb/src/kernel/blocks/dbspj/DbspjMain.cpp'
--- a/storage/ndb/src/kernel/blocks/dbspj/DbspjMain.cpp 2011-11-10 14:23:53 +0000
+++ b/storage/ndb/src/kernel/blocks/dbspj/DbspjMain.cpp 2011-11-15 17:47:11 +0000
@@ -1532,7 +1532,17 @@ Dbspj::releaseNodeRows(Ptr<Request> requ
releaseRow(requestPtr, pos);
cnt++;
}
- treeNodePtr.p->m_row_map.init();
+
+ // Release the (now empty) RowMap
+ RowMap& map = treeNodePtr.p->m_row_map;
+ if (!map.isNull())
+ {
+ jam();
+ RowRef ref;
+ map.copyto(ref);
+ releaseRow(requestPtr, ref); // Map was allocated in row memory
+ map.init();
+ }
DEBUG("RowMapIterator: released " << cnt << " rows!");
}
}
=== modified file 'storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp'
--- a/storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp 2011-10-07 16:12:13 +0000
+++ b/storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp 2011-11-14 09:18:48 +0000
@@ -1135,8 +1135,8 @@ ArrayPool<TupTriggerData> c_triggerPool;
// List of ordered indexes
DLList<TupTriggerData> tuxCustomTriggers;
- Uint32 fragid[MAX_FRAG_PER_NODE];
- Uint32 fragrec[MAX_FRAG_PER_NODE];
+ Uint32 fragid[MAX_FRAG_PER_LQH];
+ Uint32 fragrec[MAX_FRAG_PER_LQH];
union {
struct {
=== modified file 'storage/ndb/src/kernel/blocks/dbtup/DbtupDiskAlloc.cpp'
--- a/storage/ndb/src/kernel/blocks/dbtup/DbtupDiskAlloc.cpp 2011-02-01 23:27:25 +0000
+++ b/storage/ndb/src/kernel/blocks/dbtup/DbtupDiskAlloc.cpp 2011-11-14 09:18:48 +0000
@@ -1546,7 +1546,7 @@ Dbtup::disk_restart_undo(Signal* signal,
Ptr<Tablerec> tabPtr;
tabPtr.i= rec->m_table;
ptrCheckGuard(tabPtr, cnoOfTablerec, tablerec);
- for(Uint32 i = 0; i<MAX_FRAG_PER_NODE; i++)
+ for(Uint32 i = 0; i<NDB_ARRAY_SIZE(tabPtr.p->fragrec); i++)
if (tabPtr.p->fragrec[i] != RNIL)
disk_restart_undo_lcp(tabPtr.i, tabPtr.p->fragid[i],
Fragrecord::UC_CREATE, 0);
@@ -1566,7 +1566,7 @@ Dbtup::disk_restart_undo(Signal* signal,
Ptr<Tablerec> tabPtr;
tabPtr.i= rec->m_table;
ptrCheckGuard(tabPtr, cnoOfTablerec, tablerec);
- for(Uint32 i = 0; i<MAX_FRAG_PER_NODE; i++)
+ for(Uint32 i = 0; i<NDB_ARRAY_SIZE(tabPtr.p->fragrec); i++)
if (tabPtr.p->fragrec[i] != RNIL)
disk_restart_undo_lcp(tabPtr.i, tabPtr.p->fragid[i],
Fragrecord::UC_CREATE, 0);
=== modified file 'storage/ndb/src/kernel/blocks/dbtup/DbtupExecQuery.cpp'
--- a/storage/ndb/src/kernel/blocks/dbtup/DbtupExecQuery.cpp 2011-10-07 16:12:13 +0000
+++ b/storage/ndb/src/kernel/blocks/dbtup/DbtupExecQuery.cpp 2011-11-14 09:18:48 +0000
@@ -3920,7 +3920,7 @@ Dbtup::validate_page(Tablerec* regTabPtr
if(mm_vars == 0)
return;
- for(Uint32 F= 0; F<MAX_FRAG_PER_NODE; F++)
+ for(Uint32 F= 0; F<NDB_ARRAY_SIZE(regTabPtr->fragrec); F++)
{
FragrecordPtr fragPtr;
=== modified file 'storage/ndb/src/kernel/blocks/dbtup/DbtupGen.cpp'
--- a/storage/ndb/src/kernel/blocks/dbtup/DbtupGen.cpp 2011-10-07 16:12:13 +0000
+++ b/storage/ndb/src/kernel/blocks/dbtup/DbtupGen.cpp 2011-11-14 09:18:48 +0000
@@ -43,9 +43,10 @@ extern EventLogger * g_eventLogger;
void Dbtup::initData()
{
- cnoOfFragrec = MAX_FRAG_PER_NODE;
- cnoOfFragoprec = MAX_FRAG_PER_NODE;
- cnoOfAlterTabOps = MAX_FRAG_PER_NODE;
+ TablerecPtr tablePtr;
+ cnoOfFragrec = NDB_ARRAY_SIZE(tablePtr.p->fragrec);
+ cnoOfFragoprec = NDB_ARRAY_SIZE(tablePtr.p->fragrec);
+ cnoOfAlterTabOps = NDB_ARRAY_SIZE(tablePtr.p->fragrec);
c_maxTriggersPerTable = ZDEFAULT_MAX_NO_TRIGGERS_PER_TABLE;
c_noOfBuildIndexRec = 32;
@@ -772,7 +773,7 @@ void Dbtup::initializeTablerec()
void
Dbtup::initTab(Tablerec* const regTabPtr)
{
- for (Uint32 i = 0; i < MAX_FRAG_PER_NODE; i++) {
+ for (Uint32 i = 0; i < NDB_ARRAY_SIZE(regTabPtr->fragid); i++) {
regTabPtr->fragid[i] = RNIL;
regTabPtr->fragrec[i] = RNIL;
}//for
@@ -870,7 +871,7 @@ void Dbtup::execTUPSEIZEREQ(Signal* sign
return;
}//Dbtup::execTUPSEIZEREQ()
-#define printFragment(t){ for(Uint32 i = 0; i < MAX_FRAG_PER_NODE;i++){\
+#define printFragment(t){ for(Uint32 i = 0; i < NDB_ARRAY_SIZE(t.p->fragid);i++){ \
ndbout_c("table = %d fragid[%d] = %d fragrec[%d] = %d", \
t.i, t.p->fragid[i], i, t.p->fragrec[i]); }}
=== modified file 'storage/ndb/src/kernel/blocks/dbtup/DbtupIndex.cpp'
--- a/storage/ndb/src/kernel/blocks/dbtup/DbtupIndex.cpp 2011-06-30 15:59:25 +0000
+++ b/storage/ndb/src/kernel/blocks/dbtup/DbtupIndex.cpp 2011-11-14 09:18:48 +0000
@@ -552,14 +552,14 @@ Dbtup::buildIndex(Signal* signal, Uint32
do {
// get fragment
FragrecordPtr fragPtr;
- if (buildPtr.p->m_fragNo == MAX_FRAG_PER_NODE) {
+ if (buildPtr.p->m_fragNo == NDB_ARRAY_SIZE(tablePtr.p->fragrec)) {
jam();
// build ready
buildIndexReply(signal, buildPtr.p);
c_buildIndexList.release(buildPtr);
return;
}
- ndbrequire(buildPtr.p->m_fragNo < MAX_FRAG_PER_NODE);
+ ndbrequire(buildPtr.p->m_fragNo < NDB_ARRAY_SIZE(tablePtr.p->fragrec));
fragPtr.i= tablePtr.p->fragrec[buildPtr.p->m_fragNo];
if (fragPtr.i == RNIL) {
jam();
@@ -809,7 +809,8 @@ Dbtup::execALTER_TAB_CONF(Signal* signal
else
{
jam();
- ndbrequire(buildPtr.p->m_fragNo >= MAX_FRAG_PER_NODE);
+ TablerecPtr tablePtr;
+ ndbrequire(buildPtr.p->m_fragNo >= NDB_ARRAY_SIZE(tablePtr.p->fragid));
buildIndexReply(signal, buildPtr.p);
c_buildIndexList.release(buildPtr);
return;
@@ -830,7 +831,7 @@ Dbtup::buildIndexOffline_table_readonly(
tablePtr.i= buildReq->tableId;
ptrCheckGuard(tablePtr, cnoOfTablerec, tablerec);
- for (;buildPtr.p->m_fragNo < MAX_FRAG_PER_NODE;
+ for (;buildPtr.p->m_fragNo < NDB_ARRAY_SIZE(tablePtr.p->fragrec);
buildPtr.p->m_fragNo++)
{
jam();
@@ -906,7 +907,7 @@ Dbtup::mt_scan_init(Uint32 tableId, Uint
FragrecordPtr fragPtr;
fragPtr.i = RNIL;
- for (Uint32 i = 0; i<MAX_FRAG_PER_NODE; i++)
+ for (Uint32 i = 0; i<NDB_ARRAY_SIZE(tablePtr.p->fragid); i++)
{
if (tablePtr.p->fragid[i] == fragId)
{
@@ -1011,8 +1012,10 @@ Dbtup::execBUILD_INDX_IMPL_REF(Signal* s
ndbrequire(buildPtr.p->m_outstanding);
buildPtr.p->m_outstanding--;
+ TablerecPtr tablePtr;
buildPtr.p->m_errorCode = (BuildIndxImplRef::ErrorCode)err;
- buildPtr.p->m_fragNo = MAX_FRAG_PER_NODE; // No point in starting any more
+ // No point in starting any more
+ buildPtr.p->m_fragNo = NDB_ARRAY_SIZE(tablePtr.p->fragrec);
buildIndexOffline_table_readonly(signal, ptr);
}
=== modified file 'storage/ndb/src/kernel/blocks/dbtup/DbtupMeta.cpp'
--- a/storage/ndb/src/kernel/blocks/dbtup/DbtupMeta.cpp 2011-09-01 18:42:31 +0000
+++ b/storage/ndb/src/kernel/blocks/dbtup/DbtupMeta.cpp 2011-11-14 09:18:48 +0000
@@ -910,7 +910,7 @@ bool Dbtup::addfragtotab(Tablerec* const
Uint32 fragId,
Uint32 fragIndex)
{
- for (Uint32 i = 0; i < MAX_FRAG_PER_NODE; i++) {
+ for (Uint32 i = 0; i < NDB_ARRAY_SIZE(regTabPtr->fragid); i++) {
jam();
if (regTabPtr->fragid[i] == RNIL) {
jam();
@@ -926,7 +926,7 @@ void Dbtup::getFragmentrec(FragrecordPtr
Uint32 fragId,
Tablerec* const regTabPtr)
{
- for (Uint32 i = 0; i < MAX_FRAG_PER_NODE; i++) {
+ for (Uint32 i = 0; i < NDB_ARRAY_SIZE(regTabPtr->fragid); i++) {
jam();
if (regTabPtr->fragid[i] == fragId) {
jam();
@@ -1015,7 +1015,7 @@ Dbtup::execALTER_TAB_REQ(Signal *signal)
case AlterTabReq::AlterTableSumaEnable:
{
FragrecordPtr regFragPtr;
- for (Uint32 i = 0; i < MAX_FRAG_PER_NODE; i++)
+ for (Uint32 i = 0; i < NDB_ARRAY_SIZE(regTabPtr.p->fragrec); i++)
{
jam();
if ((regFragPtr.i = regTabPtr.p->fragrec[i]) != RNIL)
@@ -1044,7 +1044,7 @@ Dbtup::execALTER_TAB_REQ(Signal *signal)
Uint32 gci = signal->theData[signal->getLength() - 1];
regTabPtr.p->m_reorg_suma_filter.m_gci_hi = gci;
FragrecordPtr regFragPtr;
- for (Uint32 i = 0; i < MAX_FRAG_PER_NODE; i++)
+ for (Uint32 i = 0; i < NDB_ARRAY_SIZE(regTabPtr.p->fragrec); i++)
{
jam();
if ((regFragPtr.i = regTabPtr.p->fragrec[i]) != RNIL)
@@ -1320,7 +1320,7 @@ Dbtup::handleAlterTableCommit(Signal *si
if (AlterTableReq::getReorgFragFlag(req->changeMask))
{
FragrecordPtr regFragPtr;
- for (Uint32 i = 0; i < MAX_FRAG_PER_NODE; i++)
+ for (Uint32 i = 0; i < NDB_ARRAY_SIZE(regTabPtr->fragrec); i++)
{
jam();
if ((regFragPtr.i = regTabPtr->fragrec[i]) != RNIL)
@@ -1363,7 +1363,7 @@ Dbtup::handleAlterTableComplete(Signal *
if (AlterTableReq::getReorgCompleteFlag(req->changeMask))
{
FragrecordPtr regFragPtr;
- for (Uint32 i = 0; i < MAX_FRAG_PER_NODE; i++)
+ for (Uint32 i = 0; i < NDB_ARRAY_SIZE(regTabPtr->fragrec); i++)
{
jam();
if ((regFragPtr.i = regTabPtr->fragrec[i]) != RNIL)
@@ -1892,7 +1892,7 @@ void Dbtup::releaseAlterTabOpRec(AlterTa
void Dbtup::deleteFragTab(Tablerec* const regTabPtr, Uint32 fragId)
{
- for (Uint32 i = 0; i < MAX_FRAG_PER_NODE; i++) {
+ for (Uint32 i = 0; i < NDB_ARRAY_SIZE(regTabPtr->fragid); i++) {
jam();
if (regTabPtr->fragid[i] == fragId) {
jam();
@@ -1991,7 +1991,7 @@ void Dbtup::releaseFragment(Signal* sign
Uint32 fragIndex = RNIL;
Uint32 fragId = RNIL;
Uint32 i = 0;
- for (i = 0; i < MAX_FRAG_PER_NODE; i++) {
+ for (i = 0; i < NDB_ARRAY_SIZE(tabPtr.p->fragid); i++) {
jam();
if (tabPtr.p->fragid[i] != RNIL) {
jam();
@@ -2464,11 +2464,11 @@ Dbtup::drop_fragment_fsremove_done(Signa
Uint32 logfile_group_id = fragPtr.p->m_logfile_group_id ;
Uint32 i;
- for(i= 0; i<MAX_FRAG_PER_NODE; i++)
+ for(i= 0; i<NDB_ARRAY_SIZE(tabPtr.p->fragrec); i++)
if(tabPtr.p->fragrec[i] == fragPtr.i)
break;
- ndbrequire(i != MAX_FRAG_PER_NODE);
+ ndbrequire(i != NDB_ARRAY_SIZE(tabPtr.p->fragrec));
tabPtr.p->fragid[i]= RNIL;
tabPtr.p->fragrec[i]= RNIL;
releaseFragrec(fragPtr);
@@ -2694,7 +2694,7 @@ Dbtup::execDROP_FRAG_REQ(Signal* signal)
tabPtr.p->m_dropTable.tabUserPtr = req->senderData;
Uint32 fragIndex = RNIL;
- for (Uint32 i = 0; i < MAX_FRAG_PER_NODE; i++)
+ for (Uint32 i = 0; i < NDB_ARRAY_SIZE(tabPtr.p->fragid); i++)
{
jam();
if (tabPtr.p->fragid[i] == req->fragId)
=== modified file 'storage/ndb/src/kernel/blocks/dbtux/Dbtux.hpp'
--- a/storage/ndb/src/kernel/blocks/dbtux/Dbtux.hpp 2011-10-13 09:02:21 +0000
+++ b/storage/ndb/src/kernel/blocks/dbtux/Dbtux.hpp 2011-11-14 09:18:48 +0000
@@ -120,7 +120,7 @@ public:
private:
// sizes are in words (Uint32)
- STATIC_CONST( MaxIndexFragments = MAX_FRAG_PER_NODE );
+ STATIC_CONST( MaxIndexFragments = MAX_FRAG_PER_LQH );
STATIC_CONST( MaxIndexAttributes = MAX_ATTRIBUTES_IN_INDEX );
STATIC_CONST( MaxAttrDataSize = 2 * MAX_ATTRIBUTES_IN_INDEX + MAX_KEY_SIZE_IN_WORDS );
STATIC_CONST( MaxXfrmDataSize = MaxAttrDataSize * MAX_XFRM_MULTIPLY);
=== modified file 'storage/ndb/src/kernel/vm/GlobalData.hpp'
--- a/storage/ndb/src/kernel/vm/GlobalData.hpp 2011-09-15 20:21:59 +0000
+++ b/storage/ndb/src/kernel/vm/GlobalData.hpp 2011-11-14 12:02:56 +0000
@@ -75,6 +75,7 @@ struct GlobalData {
Uint32 ndbMtLqhWorkers;
Uint32 ndbMtLqhThreads;
Uint32 ndbMtTcThreads;
+ Uint32 ndbLogParts;
GlobalData(){
theSignalId = 0;
@@ -85,6 +86,7 @@ struct GlobalData {
ndbMtLqhWorkers = 0;
ndbMtLqhThreads = 0;
ndbMtTcThreads = 0;
+ ndbLogParts = 0;
#ifdef GCP_TIMER_HACK
gcp_timer_limit = 0;
#endif
=== modified file 'storage/ndb/src/kernel/vm/pc.hpp'
--- a/storage/ndb/src/kernel/vm/pc.hpp 2011-06-30 15:59:25 +0000
+++ b/storage/ndb/src/kernel/vm/pc.hpp 2011-11-14 09:18:48 +0000
@@ -165,7 +165,7 @@
// need large value.
/* ------------------------------------------------------------------------- */
#define NO_OF_FRAG_PER_NODE 1
-#define MAX_FRAG_PER_NODE 8
+#define MAX_FRAG_PER_LQH 8
/**
* DIH allocates fragments in chunk for fast find of fragment record.
No bundle (reason: useless for push emails).
| Thread |
|---|
| • bzr push into mysql-5.1-telco-7.1 branch (jonas.oreland:4335 to 4336) | jonas oreland | 16 Nov |