From: Pekka Nousiainen Date: May 30 2011 8:24am Subject: bzr push into mysql-5.1-telco-7.0-wl4124-new0 branch (pekka.nousiainen:4385 to 4387) WL#4124 List-Archive: http://lists.mysql.com/commits/138403 Message-Id: <20110530082453.8F4305586A@sama.localdomain> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit 4387 Pekka Nousiainen 2011-05-30 wl#4124 d03_systab.diff revert NDBCNTR and use TRIX modified: storage/ndb/src/kernel/blocks/ndbcntr/Ndbcntr.hpp storage/ndb/src/kernel/blocks/ndbcntr/NdbcntrInit.cpp storage/ndb/src/kernel/blocks/ndbcntr/NdbcntrMain.cpp storage/ndb/src/kernel/blocks/ndbcntr/NdbcntrSysTable.cpp storage/ndb/src/kernel/blocks/trix/Trix.cpp storage/ndb/src/kernel/blocks/trix/Trix.hpp 4386 Pekka Nousiainen 2011-05-30 wl#4124 d02_systab.diff minimal kernel-side patch modified: storage/ndb/src/kernel/blocks/ndbcntr/NdbcntrSysTable.cpp storage/ndb/src/kernel/blocks/trix/Trix.cpp 4385 Pekka Nousiainen 2011-05-30 treename modified: .bzr-mysql/default.conf === modified file 'storage/ndb/src/kernel/blocks/ndbcntr/Ndbcntr.hpp' --- a/storage/ndb/src/kernel/blocks/ndbcntr/Ndbcntr.hpp 2011-05-19 09:16:32 +0000 +++ b/storage/ndb/src/kernel/blocks/ndbcntr/Ndbcntr.hpp 2011-05-30 08:24:14 +0000 @@ -117,18 +117,6 @@ public: bool keyFlag; bool nullable; }; - struct SysIndex { - const char* name; - Uint32 columnCount; - Uint32 columnList[4]; - // DictTabInfo - DictTabInfo::TableType indexType; - bool indexLoggedFlag; - // saved id (initially set only at creating node) - mutable Uint32 tableId; - mutable Uint32 indexId; - mutable Uint32 indexVersion; - }; struct SysTable { const char* name; unsigned columnCount; @@ -137,21 +125,27 @@ public: DictTabInfo::TableType tableType; DictTabInfo::FragmentType fragmentType; bool tableLoggedFlag; - // indexes - Uint32 indexCount; - const SysIndex** indexList; - // saved id (initially set only at creating node) + // saved table id mutable Uint32 tableId; mutable Uint32 tableVersion; }; + struct SysIndex { + const char* name; + const SysTable* primaryTable; + Uint32 columnCount; + Uint32 columnList[4]; + // DictTabInfo + DictTabInfo::TableType indexType; + DictTabInfo::FragmentType fragmentType; + bool indexLoggedFlag; + // saved index table id + mutable Uint32 indexId; + }; static const SysTable* g_sysTableList[]; static const unsigned g_sysTableCount; // the system tables static const SysTable g_sysTable_SYSTAB_0; static SysTable g_sysTable_NDBEVENTS_0; - static const SysTable g_sysTable_NDBIS_HEAD; - static const SysTable g_sysTable_NDBIS_SAMPLE; - static const SysIndex g_sysIndex_NDBIS_SAMPLE_X1; // schema trans Uint32 c_schemaTransId; Uint32 c_schemaTransKey; @@ -201,8 +195,6 @@ private: void execSCHEMA_TRANS_END_REF(Signal* signal); void execCREATE_TABLE_REF(Signal* signal); void execCREATE_TABLE_CONF(Signal* signal); - void execCREATE_INDX_REF(Signal* signal); - void execCREATE_INDX_CONF(Signal* signal); void execCREATE_HASH_MAP_REF(Signal* signal); void execCREATE_HASH_MAP_CONF(Signal* signal); void execCREATE_FILEGROUP_REF(Signal* signal); @@ -252,8 +244,7 @@ private: void systemErrorLab(Signal* signal, int line); void createHashMap(Signal*, Uint32 index); - void createSystableLab(Signal* signal, Uint32 ti); - void createSysindexLab(Signal* signal, Uint32 ti, Uint32 xi); + void createSystableLab(Signal* signal, unsigned index); void createDDObjects(Signal*, unsigned index); void crSystab7Lab(Signal* signal); void crSystab8Lab(Signal* signal); === modified file 'storage/ndb/src/kernel/blocks/ndbcntr/NdbcntrInit.cpp' --- a/storage/ndb/src/kernel/blocks/ndbcntr/NdbcntrInit.cpp 2011-05-19 09:16:32 +0000 +++ b/storage/ndb/src/kernel/blocks/ndbcntr/NdbcntrInit.cpp 2011-05-30 08:24:14 +0000 @@ -87,8 +87,6 @@ Ndbcntr::Ndbcntr(Block_context& ctx): addRecSignal(GSN_SCHEMA_TRANS_END_REF, &Ndbcntr::execSCHEMA_TRANS_END_REF); addRecSignal(GSN_CREATE_TABLE_REF, &Ndbcntr::execCREATE_TABLE_REF); addRecSignal(GSN_CREATE_TABLE_CONF, &Ndbcntr::execCREATE_TABLE_CONF); - addRecSignal(GSN_CREATE_INDX_REF, &Ndbcntr::execCREATE_INDX_REF); - addRecSignal(GSN_CREATE_INDX_CONF, &Ndbcntr::execCREATE_INDX_CONF); addRecSignal(GSN_CREATE_HASH_MAP_REF, &Ndbcntr::execCREATE_HASH_MAP_REF); addRecSignal(GSN_CREATE_HASH_MAP_CONF, &Ndbcntr::execCREATE_HASH_MAP_CONF); addRecSignal(GSN_CREATE_FILEGROUP_REF, &Ndbcntr::execCREATE_FILEGROUP_REF); === modified file 'storage/ndb/src/kernel/blocks/ndbcntr/NdbcntrMain.cpp' --- a/storage/ndb/src/kernel/blocks/ndbcntr/NdbcntrMain.cpp 2011-05-19 09:16:32 +0000 +++ b/storage/ndb/src/kernel/blocks/ndbcntr/NdbcntrMain.cpp 2011-05-30 08:24:14 +0000 @@ -24,7 +24,6 @@ #include #include #include -#include #include #include #include @@ -2407,16 +2406,16 @@ Ndbcntr::execCREATE_FILE_CONF(Signal* si createDDObjects(signal, conf->senderData + 1); } -void Ndbcntr::createSystableLab(Signal* signal, Uint32 ti) +void Ndbcntr::createSystableLab(Signal* signal, unsigned index) { - if (ti >= g_sysTableCount) { - ndbassert(ti == g_sysTableCount); + if (index >= g_sysTableCount) { + ndbassert(index == g_sysTableCount); createDDObjects(signal, 0); return; } - const SysTable& table = *g_sysTableList[ti]; - Uint32 propPage[1024]; - LinearWriter w(propPage, 1024); + const SysTable& table = *g_sysTableList[index]; + Uint32 propPage[256]; + LinearWriter w(propPage, 256); // XXX remove commented-out lines later @@ -2437,8 +2436,7 @@ void Ndbcntr::createSystableLab(Signal* w.add(DictTabInfo::HashMapObjectId, c_hashMapId); w.add(DictTabInfo::HashMapVersion, c_hashMapVersion); - Uint32 i; - for (i = 0; i < table.columnCount; i++) { + for (unsigned i = 0; i < table.columnCount; i++) { const SysColumn& column = table.columnList[i]; ndbassert(column.pos == i); w.add(DictTabInfo::AttributeName, column.name); @@ -2447,13 +2445,11 @@ void Ndbcntr::createSystableLab(Signal* w.add(DictTabInfo::AttributeStorageType, (Uint32)NDB_STORAGETYPE_MEMORY); switch(column.type){ - case DictTabInfo::ExtVarchar: case DictTabInfo::ExtVarbinary: jam(); w.add(DictTabInfo::AttributeArrayType, (Uint32)NDB_ARRAYTYPE_SHORT_VAR); break; - case DictTabInfo::ExtLongvarchar: case DictTabInfo::ExtLongvarbinary: jam(); w.add(DictTabInfo::AttributeArrayType, @@ -2479,12 +2475,10 @@ void Ndbcntr::createSystableLab(Signal* CreateTableReq* const req = (CreateTableReq*)signal->getDataPtrSend(); req->clientRef = reference(); - req->clientData = ti; + req->clientData = index; req->requestInfo = 0; req->transId = c_schemaTransId; req->transKey = c_schemaTransKey; - - D("create table" << V(ti) << V(table.name)); sendSignal(DBDICT_REF, GSN_CREATE_TABLE_REQ, signal, CreateTableReq::SignalLength, JBB, ptr, 1); return; @@ -2493,9 +2487,6 @@ void Ndbcntr::createSystableLab(Signal* void Ndbcntr::execCREATE_TABLE_REF(Signal* signal) { jamEntry(); - const CreateTableRef* ref = (const CreateTableRef*)signal->getDataPtr(); - ndbout << "CreateTableRef" << " errorCode=" << ref->errorCode - << " errorLine=" << ref->errorLine << endl; progError(__LINE__,NDBD_EXIT_NDBREQUIRE, "CREATE_TABLE_REF"); return; }//Ndbcntr::execDICTTABREF() @@ -2504,92 +2495,14 @@ void Ndbcntr::execCREATE_TABLE_CONF(Sign { jamEntry(); const CreateTableConf* conf = (const CreateTableConf*)signal->getDataPtr(); + //csystabId = conf->tableId; ndbrequire(conf->transId == c_schemaTransId); - const Uint32 ti = conf->clientData; - ndbrequire(ti < g_sysTableCount); - const SysTable& table = *g_sysTableList[ti]; + ndbrequire(conf->senderData < g_sysTableCount); + const SysTable& table = *g_sysTableList[conf->senderData]; table.tableId = conf->tableId; table.tableVersion = conf->tableVersion; - createSysindexLab(signal, ti, 0); - return; -}//Ndbcntr::execDICTTABCONF() - -void Ndbcntr::createSysindexLab(Signal* signal, Uint32 ti, Uint32 xi) -{ - ndbrequire(ti < g_sysTableCount); - const SysTable& table = *g_sysTableList[ti]; - if (xi >= table.indexCount) { - ndbassert(xi == table.indexCount); - createSystableLab(signal, ti + 1); - return; - } - - ndbrequire(table.indexList[xi] != 0); - const SysIndex& index = *table.indexList[xi]; - CreateIndxReq* const req = (CreateIndxReq*)signal->getDataPtrSend(); - req->clientRef = reference(); - req->clientData = ti | (xi << 8); - req->transId = c_schemaTransId; - req->transKey = c_schemaTransKey; - req->requestInfo = 0; - req->tableId = table.tableId; - req->tableVersion = table.tableVersion; - req->indexType = index.indexType; - req->online = 1; - - LinearSectionPtr ptr[3]; - - Uint32 attr[1 + 32]; - attr[0] = index.columnCount; - memcpy(&attr[1], index.columnList, index.columnCount * 4); - ptr[0].p = attr; - ptr[0].sz = 1 + index.columnCount; - - Uint32 propPage[256]; - LinearWriter w(propPage, 256); - w.first(); - char name[MAX_TAB_NAME_SIZE]; - sprintf(name, index.name, table.tableId); - w.add(DictTabInfo::TableName, name); - w.add(DictTabInfo::TableLoggedFlag, index.indexLoggedFlag); - w.add(DictTabInfo::TableEnd, (Uint32)true); - Uint32 length = w.getWordsUsed(); - ptr[1].p = &propPage[0]; - ptr[1].sz = length; - - D("create index" << V(ti) << V(xi) << V(name)); - sendSignal(DBDICT_REF, GSN_CREATE_INDX_REQ, signal, - CreateIndxReq::SignalLength, JBB, ptr, 2); -} - -void Ndbcntr::execCREATE_INDX_REF(Signal* signal) -{ - jamEntry(); - const CreateIndxRef* ref = (const CreateIndxRef*)signal->getDataPtr(); - ndbout << "CreateIndxRef" << " errorCode=" << ref->errorCode - << " errorLine=" << ref->errorLine << endl; - progError(__LINE__,NDBD_EXIT_NDBREQUIRE, "CREATE_INDX_REF"); - return; -}//Ndbcntr::execDICTTABREF() - -void Ndbcntr::execCREATE_INDX_CONF(Signal* signal) -{ - jamEntry(); - const CreateIndxConf* conf = (const CreateIndxConf*)signal->getDataPtr(); - ndbrequire(conf->transId == c_schemaTransId); - - const Uint32 ti = conf->clientData & 0xFF; - const Uint32 xi = conf->clientData >> 8; - ndbrequire(ti < g_sysTableCount); - const SysTable& table = *g_sysTableList[ti]; - ndbrequire(xi < table.indexCount); - ndbrequire(table.indexList[xi] != 0); - const SysIndex& index = *table.indexList[xi]; - - index.tableId = table.tableId; - index.indexId = conf->indexId; - index.indexVersion = conf->indexVersion; - createSysindexLab(signal, ti, xi + 1); + createSystableLab(signal, conf->senderData + 1); + //startInsertTransactions(signal); return; }//Ndbcntr::execDICTTABCONF() === modified file 'storage/ndb/src/kernel/blocks/ndbcntr/NdbcntrSysTable.cpp' --- a/storage/ndb/src/kernel/blocks/ndbcntr/NdbcntrSysTable.cpp 2011-05-19 09:16:32 +0000 +++ b/storage/ndb/src/kernel/blocks/ndbcntr/NdbcntrSysTable.cpp 2011-05-30 08:24:14 +0000 @@ -39,7 +39,7 @@ Ndbcntr::g_sysTable_SYSTAB_0 = { arrayLength(column_SYSTAB_0), column_SYSTAB_0, DictTabInfo::SystemTable, DictTabInfo::HashMapPartition, - true, 0, 0, ~0, ~0 + true, ~0, ~0 }; // NDB$EVENTS_0 @@ -90,113 +90,7 @@ Ndbcntr::g_sysTable_NDBEVENTS_0 = { arrayLength(column_NDBEVENTS_0), column_NDBEVENTS_0, DictTabInfo::SystemTable, DictTabInfo::HashMapPartition, - true, 0, 0, ~0, ~0 -}; - -// NDB$IS_HEAD - -static const Ndbcntr::SysColumn -column_NDBIS_HEAD[] = { - // key must be first - { 0, "INDEX_ID", - DictTabInfo::ExtUnsigned, 1, - true, false - }, - { 1, "INDEX_VERSION", - DictTabInfo::ExtUnsigned, 1, - true, false - }, - // table - { 2, "TABLE_ID", - DictTabInfo::ExtUnsigned, 1, - false, false - }, - { 3, "FRAG_COUNT", - DictTabInfo::ExtUnsigned, 1, - false, false - }, - { 4, "VALUE_FORMAT", - DictTabInfo::ExtUnsigned, 1, - false, false - }, - // current sample - { 5, "SAMPLE_VERSION", - DictTabInfo::ExtUnsigned, 1, - false, false - }, - { 6, "LOAD_TIME", - DictTabInfo::ExtUnsigned, 1, - false, false - }, - { 7, "SAMPLE_COUNT", - DictTabInfo::ExtUnsigned, 1, - false, false - }, - { 8, "KEY_BYTES", - DictTabInfo::ExtUnsigned, 1, - false, false - } -}; - -const Ndbcntr::SysTable -Ndbcntr::g_sysTable_NDBIS_HEAD = { - "sys/def/NDB$IS_HEAD", - arrayLength(column_NDBIS_HEAD), column_NDBIS_HEAD, - DictTabInfo::SystemTable, - DictTabInfo::HashMapPartition, - true, 0, 0, ~0, ~0 -}; - -// NDB$IS_SAMPLE - -static const Ndbcntr::SysColumn -column_NDBIS_SAMPLE[] = { - // key must be first - { 0, "INDEX_ID", - DictTabInfo::ExtUnsigned, 1, - true, false - }, - { 1, "INDEX_VERSION", - DictTabInfo::ExtUnsigned, 1, - true, false - }, - { 2, "SAMPLE_VERSION", - DictTabInfo::ExtUnsigned, 1, - true, false - }, - { 3, "STAT_KEY", - DictTabInfo::ExtLongvarbinary, MAX_INDEX_STAT_KEY_SIZE * 4, - true, false - }, - // value - { 4, "STAT_VALUE", - DictTabInfo::ExtLongvarbinary, MAX_INDEX_STAT_VALUE_CSIZE * 4, - false, false - } -}; - -const Ndbcntr::SysIndex -Ndbcntr::g_sysIndex_NDBIS_SAMPLE_X1 = { - "sys/def/%u/NDB$IS_SAMPLE_X1", - 3, { 0, 1, 2, ~0 }, - DictTabInfo::OrderedIndex, - false, ~0, ~0, ~0 -}; - -static const Ndbcntr::SysIndex* -index_NDBIS_SAMPLE[] = { - &Ndbcntr::g_sysIndex_NDBIS_SAMPLE_X1 -}; - -const Ndbcntr::SysTable -Ndbcntr::g_sysTable_NDBIS_SAMPLE = { - "sys/def/NDB$IS_SAMPLE", - arrayLength(column_NDBIS_SAMPLE), column_NDBIS_SAMPLE, - DictTabInfo::SystemTable, - DictTabInfo::HashMapPartition, - true, - arrayLength(index_NDBIS_SAMPLE), index_NDBIS_SAMPLE, - ~0, ~0 + true, ~0, ~0 }; // all @@ -204,9 +98,7 @@ Ndbcntr::g_sysTable_NDBIS_SAMPLE = { const Ndbcntr::SysTable* Ndbcntr::g_sysTableList[] = { &g_sysTable_SYSTAB_0, - &g_sysTable_NDBEVENTS_0, - &g_sysTable_NDBIS_HEAD, - &g_sysTable_NDBIS_SAMPLE + &g_sysTable_NDBEVENTS_0 }; //TODO Backup needs this info to allocate appropriate number of records === modified file 'storage/ndb/src/kernel/blocks/trix/Trix.cpp' --- a/storage/ndb/src/kernel/blocks/trix/Trix.cpp 2011-05-25 15:03:11 +0000 +++ b/storage/ndb/src/kernel/blocks/trix/Trix.cpp 2011-05-30 08:24:14 +0000 @@ -116,9 +116,6 @@ Trix::Trix(Block_context& ctx) : // index stats sys tables c_statGetMetaDone = false; - c_statMetaHead = &Ndbcntr::g_sysTable_NDBIS_HEAD; - c_statMetaSample = &Ndbcntr::g_sysTable_NDBIS_SAMPLE; - c_statMetaSampleX1 = &Ndbcntr::g_sysIndex_NDBIS_SAMPLE_X1; } /** @@ -1695,6 +1692,79 @@ Trix::execINDEX_STAT_IMPL_REQ(Signal* si // sys tables metadata +const Trix::SysColumn +Trix::g_statMetaHead_column[] = { + { 0, "INDEX_ID", + true + }, + { 1, "INDEX_VERSION", + true + }, + { 2, "TABLE_ID", + false + }, + { 3, "FRAG_COUNT", + false + }, + { 4, "VALUE_FORMAT", + false + }, + { 5, "SAMPLE_VERSION", + false + }, + { 6, "LOAD_TIME", + false + }, + { 7, "SAMPLE_COUNT", + false + }, + { 8, "KEY_BYTES", + false + } +}; + +const Trix::SysColumn +Trix::g_statMetaSample_column[] = { + { 0, "INDEX_ID", + true + }, + { 1, "INDEX_VERSION", + true + }, + { 2, "SAMPLE_VERSION", + true + }, + { 3, "STAT_KEY", + true + }, + { 4, "STAT_VALUE", + false + } +}; + +const Trix::SysTable +Trix::g_statMetaHead = { + "sys/def/NDB$IS_HEAD", + ~(Uint32)0, + sizeof(g_statMetaHead_column)/sizeof(g_statMetaHead_column[0]), + g_statMetaHead_column +}; + +const Trix::SysTable +Trix::g_statMetaSample = { + "sys/def/NDB$IS_SAMPLE", + ~(Uint32)0, + sizeof(g_statMetaSample_column)/sizeof(g_statMetaSample_column[0]), + g_statMetaSample_column +}; + +const Trix::SysIndex +Trix::g_statMetaSampleX1 = { + "sys/def/%u/NDB$IS_SAMPLE_X1", + ~(Uint32)0, + ~(Uint32)0 +}; + void Trix::statMetaGetHead(Signal* signal, StatOp& stat) { @@ -1702,7 +1772,7 @@ Trix::statMetaGetHead(Signal* signal, St StatOp::Meta& meta = stat.m_meta; meta.m_cb.m_callbackFunction = safe_cast(&Trix::statMetaGetHeadCB); meta.m_cb.m_callbackData = stat.m_ownPtrI; - const char* name = Ndbcntr::g_sysTable_NDBIS_HEAD.name; + const char* name = g_statMetaHead.name; sendGetTabInfoReq(signal, stat, name); } @@ -1718,7 +1788,7 @@ Trix::statMetaGetHeadCB(Signal* signal, statOpError(signal, stat, ret, __LINE__); return; } - c_statMetaHead->tableId = meta.m_conf.tableId; + g_statMetaHead.tableId = meta.m_conf.tableId; statMetaGetSample(signal, stat); } @@ -1729,7 +1799,7 @@ Trix::statMetaGetSample(Signal* signal, StatOp::Meta& meta = stat.m_meta; meta.m_cb.m_callbackFunction = safe_cast(&Trix::statMetaGetSampleCB); meta.m_cb.m_callbackData = stat.m_ownPtrI; - const char* name = Ndbcntr::g_sysTable_NDBIS_SAMPLE.name; + const char* name = g_statMetaSample.name; sendGetTabInfoReq(signal, stat, name); } @@ -1745,7 +1815,7 @@ Trix::statMetaGetSampleCB(Signal* signal statOpError(signal, stat, ret, __LINE__); return; } - c_statMetaSample->tableId = meta.m_conf.tableId; + g_statMetaSample.tableId = meta.m_conf.tableId; statMetaGetSampleX1(signal, stat); } @@ -1756,9 +1826,9 @@ Trix::statMetaGetSampleX1(Signal* signal StatOp::Meta& meta = stat.m_meta; meta.m_cb.m_callbackFunction = safe_cast(&Trix::statMetaGetSampleX1CB); meta.m_cb.m_callbackData = stat.m_ownPtrI; - const char* name_fmt = Ndbcntr::g_sysIndex_NDBIS_SAMPLE_X1.name; + const char* name_fmt = g_statMetaSampleX1.name; char name[MAX_TAB_NAME_SIZE]; - BaseString::snprintf(name, sizeof(name), name_fmt, c_statMetaSample->tableId); + BaseString::snprintf(name, sizeof(name), name_fmt, g_statMetaSample.tableId); sendGetTabInfoReq(signal, stat, name); } @@ -1774,8 +1844,8 @@ Trix::statMetaGetSampleX1CB(Signal* sign statOpError(signal, stat, ret, __LINE__); return; } - c_statMetaSampleX1->tableId = c_statMetaSample->tableId; - c_statMetaSampleX1->indexId = meta.m_conf.tableId; + g_statMetaSampleX1.tableId = g_statMetaSample.tableId; + g_statMetaSampleX1.indexId = meta.m_conf.tableId; statGetMetaDone(signal, stat); } @@ -1849,7 +1919,7 @@ Trix::statGetMetaDone(Signal* signal, St SubscriptionRecord* subRec = c_theSubscriptions.getPtr(stat.m_subRecPtrI); D("statGetMetaDone" << V(stat)); - c_statGetMetaDone = true; + // c_statGetMetaDone = true; subRec->requestType = STAT_UTIL; // fill in constant part @@ -1872,7 +1942,7 @@ Trix::statHeadRead(Signal* signal, StatO util.m_not_found = false; util.m_cb.m_callbackFunction = safe_cast(&Trix::statHeadReadCB); util.m_cb.m_callbackData = stat.m_ownPtrI; - send.m_sysTable = c_statMetaHead; + send.m_sysTable = &g_statMetaHead; send.m_operationType = UtilPrepareReq::Read; statUtilPrepare(signal, stat); } @@ -1899,7 +1969,7 @@ Trix::statHeadInsert(Signal* signal, Sta util.m_cb.m_callbackFunction = safe_cast(&Trix::statHeadInsertCB); util.m_cb.m_callbackData = stat.m_ownPtrI; - send.m_sysTable = c_statMetaHead; + send.m_sysTable = &g_statMetaHead; send.m_operationType = UtilPrepareReq::Insert; statUtilPrepare(signal, stat); } @@ -1923,7 +1993,7 @@ Trix::statHeadUpdate(Signal* signal, Sta util.m_cb.m_callbackFunction = safe_cast(&Trix::statHeadUpdateCB); util.m_cb.m_callbackData = stat.m_ownPtrI; - send.m_sysTable = c_statMetaHead; + send.m_sysTable = &g_statMetaHead; send.m_operationType = UtilPrepareReq::Update; statUtilPrepare(signal, stat); } @@ -1947,7 +2017,7 @@ Trix::statHeadDelete(Signal* signal, Sta util.m_cb.m_callbackFunction = safe_cast(&Trix::statHeadDeleteCB); util.m_cb.m_callbackData = stat.m_ownPtrI; - send.m_sysTable = c_statMetaHead; + send.m_sysTable = &g_statMetaHead; send.m_operationType = UtilPrepareReq::Delete; statUtilPrepare(signal, stat); } @@ -2076,7 +2146,7 @@ Trix::statUtilExecuteConf(Signal* signal } releaseSections(handle); - const Ndbcntr::SysTable& sysTable = *send.m_sysTable; + const SysTable& sysTable = *send.m_sysTable; for (Uint32 i = 0; i < sysTable.columnCount; i++) { jam(); @@ -2297,7 +2367,7 @@ Trix::statCleanPrepare(Signal* signal, S subRec->subscriptionKey = rand(); subRec->prepareId = RNIL; subRec->indexType = 0; // not used - subRec->sourceTableId = c_statMetaSampleX1->indexId; + subRec->sourceTableId = g_statMetaSampleX1.indexId; subRec->targetTableId = RNIL; subRec->noOfIndexColumns = ao_size; subRec->noOfKeyColumns = 0; @@ -2349,7 +2419,7 @@ Trix::statCleanPrepare(Signal* signal, S clean.m_boundSize = 3 * clean.m_boundCount; // TRIX traps the CONF - send.m_sysTable = c_statMetaSample; + send.m_sysTable = &g_statMetaSample; send.m_operationType = UtilPrepareReq::Delete; statSendPrepare(signal, stat); } @@ -2418,7 +2488,7 @@ Trix::statCleanExecute(Signal* signal, S } // TRIX traps the CONF - send.m_sysTable = c_statMetaSample; + send.m_sysTable = &g_statMetaSample; send.m_operationType = UtilPrepareReq::Delete; send.m_prepareId = subRec->prepareId; subRec->expectedConf++; @@ -2522,7 +2592,7 @@ Trix::statScanPrepare(Signal* signal, St ao_buf.append(ao_list, ao_size); // TRIX traps the CONF - send.m_sysTable = c_statMetaSample; + send.m_sysTable = &g_statMetaSample; send.m_operationType = UtilPrepareReq::Insert; statSendPrepare(signal, stat); } @@ -2590,7 +2660,7 @@ Trix::statScanExecute(Signal* signal, St } // TRIX traps the CONF - send.m_sysTable = c_statMetaSample; + send.m_sysTable = &g_statMetaSample; send.m_operationType = UtilPrepareReq::Insert; send.m_prepareId = subRec->prepareId; subRec->expectedConf++; @@ -2698,7 +2768,7 @@ Trix::statSendPrepare(Signal* signal, St { StatOp::Send& send = stat.m_send; const IndexStatImplReq* req = &stat.m_req; - const Ndbcntr::SysTable& sysTable = *send.m_sysTable; + const SysTable& sysTable = *send.m_sysTable; D("statSendPrepare" << V(stat)); UtilPrepareReq* utilReq = @@ -2717,7 +2787,7 @@ Trix::statSendPrepare(Signal* signal, St Uint32 i; for (i = 0; i < sysTable.columnCount; i++) { - const Ndbcntr::SysColumn& c = sysTable.columnList[i]; + const SysColumn& c = sysTable.columnList[i]; switch (send.m_operationType) { case UtilPrepareReq::Read: case UtilPrepareReq::Insert: @@ -2749,7 +2819,7 @@ Trix::statSendExecute(Signal* signal, St D("statSendExecute" << V(stat)); StatOp::Send& send = stat.m_send; StatOp::Attr& attr = stat.m_attr; - const Ndbcntr::SysTable& sysTable = *send.m_sysTable; + const SysTable& sysTable = *send.m_sysTable; UtilExecuteReq* utilReq = (UtilExecuteReq*)signal->getDataPtrSend(); @@ -2768,7 +2838,7 @@ Trix::statSendExecute(Signal* signal, St attr.m_dataSize = 0; for (Uint32 i = 0; i < sysTable.columnCount; i++) { - const Ndbcntr::SysColumn& c = sysTable.columnList[i]; + const SysColumn& c = sysTable.columnList[i]; switch (send.m_operationType) { case UtilPrepareReq::Read: case UtilPrepareReq::Insert: @@ -2819,11 +2889,11 @@ Trix::statDataPtr(StatOp& stat, Uint32 i StatOp::Data& data = stat.m_data; StatOp::Send& send = stat.m_send; - const Ndbcntr::SysTable& sysTable = *send.m_sysTable; + const SysTable& sysTable = *send.m_sysTable; ndbrequire(i < sysTable.columnCount); - const Ndbcntr::SysColumn& c = sysTable.columnList[i]; + const SysColumn& c = sysTable.columnList[i]; - if (&sysTable == c_statMetaHead) + if (&sysTable == &g_statMetaHead) { switch (i) { case 0: @@ -2869,7 +2939,7 @@ Trix::statDataPtr(StatOp& stat, Uint32 i return; } - if (&sysTable == c_statMetaSample) + if (&sysTable == &g_statMetaSample) { switch (i) { case 0: === modified file 'storage/ndb/src/kernel/blocks/trix/Trix.hpp' --- a/storage/ndb/src/kernel/blocks/trix/Trix.hpp 2011-05-19 09:38:03 +0000 +++ b/storage/ndb/src/kernel/blocks/trix/Trix.hpp 2011-05-30 08:24:14 +0000 @@ -28,7 +28,6 @@ #include #include #include -#include #define ZNOT_FOUND 626 // Error codes @@ -172,9 +171,27 @@ private: */ bool c_statGetMetaDone; - const Ndbcntr::SysTable* c_statMetaHead; - const Ndbcntr::SysTable* c_statMetaSample; - const Ndbcntr::SysIndex* c_statMetaSampleX1; + struct SysColumn { + Uint32 pos; + const char* name; + bool keyFlag; + }; + struct SysTable { + const char* name; + mutable Uint32 tableId; + const Uint32 columnCount; + const SysColumn* columnList; + }; + struct SysIndex { + const char* name; + mutable Uint32 tableId; + mutable Uint32 indexId; + }; + static const SysColumn g_statMetaHead_column[]; + static const SysColumn g_statMetaSample_column[]; + static const SysTable g_statMetaHead; + static const SysTable g_statMetaSample; + static const SysIndex g_statMetaSampleX1; struct StatOp { struct Meta { @@ -233,7 +250,7 @@ private: struct Drop { }; struct Send { - const Ndbcntr::SysTable* m_sysTable; + const SysTable* m_sysTable; Uint32 m_operationType; // UtilPrepareReq::OperationTypeValue Uint32 m_prepareId; Send() {} No bundle (reason: useless for push emails).