Loading ndb/include/kernel/signaldata/TupAccess.hpp +3 −3 Original line number Diff line number Diff line Loading @@ -130,7 +130,7 @@ private: * Operate on entire tuple. Used by TUX where the table has a single * Uint32 array attribute representing an index tree node. * * XXX this signal will be replaced by method in TUP * XXX this signal is no longer used by TUX and can be removed */ class TupStoreTh { friend class Dbtup; Loading @@ -155,8 +155,8 @@ private: Uint32 tableId; Uint32 fragId; Uint32 fragPtrI; Uint32 tupAddr; // no longer used Uint32 tupVersion; // no longer used Uint32 tupAddr; Uint32 tupVersion; Uint32 pageId; Uint32 pageOffset; Uint32 bufferId; Loading ndb/src/kernel/blocks/dbtup/Dbtup.hpp +8 −0 Original line number Diff line number Diff line Loading @@ -996,6 +996,14 @@ public: Dbtup(const class Configuration &); virtual ~Dbtup(); /* * TUX index in TUP has single Uint32 array attribute which stores an * index node. TUX uses following methods. */ int tuxAllocNode(Signal* signal, Uint32 fragPtrI, Uint32& pageId, Uint32& pageOffset, Uint32*& node); void tuxFreeNode(Signal* signal, Uint32 fragPtrI, Uint32 pageId, Uint32 pageOffset, Uint32* node); void tuxGetNode(Uint32 fragPtrI, Uint32 pageId, Uint32 pageOffset, Uint32*& node); private: BLOCK_DEFINES(Dbtup); Loading ndb/src/kernel/blocks/dbtup/DbtupIndex.cpp +58 −0 Original line number Diff line number Diff line Loading @@ -179,6 +179,64 @@ Dbtup::execTUP_QUERY_TH(Signal* signal) return; } int Dbtup::tuxAllocNode(Signal* signal, Uint32 fragPtrI, Uint32& pageId, Uint32& pageOffset, Uint32*& node) { FragrecordPtr fragPtr; fragPtr.i = fragPtrI; ptrCheckGuard(fragPtr, cnoOfFragrec, fragrecord); TablerecPtr tablePtr; tablePtr.i = fragPtr.p->fragTableId; ptrCheckGuard(tablePtr, cnoOfTablerec, tablerec); PagePtr pagePtr; terrorCode = 0; if (! allocTh(fragPtr.p, tablePtr.p, NORMAL_PAGE, signal, pageOffset, pagePtr)) { jam(); ndbrequire(terrorCode != 0); return terrorCode; } pageId = pagePtr.i; Uint32 attrDescIndex = tablePtr.p->tabDescriptor + (0 << ZAD_LOG_SIZE); Uint32 attrDataOffset = AttributeOffset::getOffset(tableDescriptor[attrDescIndex + 1].tabDescr); node = &pagePtr.p->pageWord[pageOffset] + attrDataOffset; return 0; } void Dbtup::tuxFreeNode(Signal* signal, Uint32 fragPtrI, Uint32 pageId, Uint32 pageOffset, Uint32* node) { FragrecordPtr fragPtr; fragPtr.i = fragPtrI; ptrCheckGuard(fragPtr, cnoOfFragrec, fragrecord); TablerecPtr tablePtr; tablePtr.i = fragPtr.p->fragTableId; ptrCheckGuard(tablePtr, cnoOfTablerec, tablerec); PagePtr pagePtr; pagePtr.i = pageId; ptrCheckGuard(pagePtr, cnoOfPage, page); Uint32 attrDescIndex = tablePtr.p->tabDescriptor + (0 << ZAD_LOG_SIZE); Uint32 attrDataOffset = AttributeOffset::getOffset(tableDescriptor[attrDescIndex + 1].tabDescr); ndbrequire(node == &pagePtr.p->pageWord[pageOffset] + attrDataOffset); freeTh(fragPtr.p, tablePtr.p, signal, pagePtr.p, pageOffset); } void Dbtup::tuxGetNode(Uint32 fragPtrI, Uint32 pageId, Uint32 pageOffset, Uint32*& node) { FragrecordPtr fragPtr; fragPtr.i = fragPtrI; ptrCheckGuard(fragPtr, cnoOfFragrec, fragrecord); TablerecPtr tablePtr; tablePtr.i = fragPtr.p->fragTableId; ptrCheckGuard(tablePtr, cnoOfTablerec, tablerec); PagePtr pagePtr; pagePtr.i = pageId; ptrCheckGuard(pagePtr, cnoOfPage, page); Uint32 attrDescIndex = tablePtr.p->tabDescriptor + (0 << ZAD_LOG_SIZE); Uint32 attrDataOffset = AttributeOffset::getOffset(tableDescriptor[attrDescIndex + 1].tabDescr); node = &pagePtr.p->pageWord[pageOffset] + attrDataOffset; } void Dbtup::execTUP_STORE_TH(Signal* signal) { Loading ndb/src/kernel/blocks/dbtux/Dbtux.hpp +6 −0 Original line number Diff line number Diff line Loading @@ -25,6 +25,9 @@ #include <DataBuffer.hpp> #include <md5_hash.hpp> // big brother #include <Dbtup.hpp> // signal classes #include <signaldata/DictTabInfo.hpp> #include <signaldata/TuxContinueB.hpp> Loading Loading @@ -92,6 +95,9 @@ public: Dbtux(const Configuration& conf); virtual ~Dbtux(); // pointer to TUP instance in this thread Dbtup* c_tup; private: // sizes are in words (Uint32) static const unsigned MaxIndexFragments = 2 * NO_OF_FRAG_PER_NODE; Loading ndb/src/kernel/blocks/dbtux/DbtuxGen.cpp +4 −1 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ Dbtux::Dbtux(const Configuration& conf) : SimulatedBlock(DBTUX, conf), c_tup(0), c_descPageList(RNIL), #ifdef VM_TRACE debugFile(0), Loading Loading @@ -123,6 +124,8 @@ Dbtux::execSTTOR(Signal* signal) case 1: jam(); CLEAR_ERROR_INSERT_VALUE; c_tup = (Dbtup*)globalData.getBlock(DBTUP); ndbrequire(c_tup != 0); break; case 3: jam(); Loading Loading @@ -180,7 +183,7 @@ Dbtux::execREAD_CONFIG_REQ(Signal* signal) c_scanBoundPool.setSize(nScanBoundWords); /* * Index id is physical array index. We seize and initialize all * index records now. This assumes ArrayPool is an array. * index records now. */ IndexPtr indexPtr; while (1) { Loading Loading
ndb/include/kernel/signaldata/TupAccess.hpp +3 −3 Original line number Diff line number Diff line Loading @@ -130,7 +130,7 @@ private: * Operate on entire tuple. Used by TUX where the table has a single * Uint32 array attribute representing an index tree node. * * XXX this signal will be replaced by method in TUP * XXX this signal is no longer used by TUX and can be removed */ class TupStoreTh { friend class Dbtup; Loading @@ -155,8 +155,8 @@ private: Uint32 tableId; Uint32 fragId; Uint32 fragPtrI; Uint32 tupAddr; // no longer used Uint32 tupVersion; // no longer used Uint32 tupAddr; Uint32 tupVersion; Uint32 pageId; Uint32 pageOffset; Uint32 bufferId; Loading
ndb/src/kernel/blocks/dbtup/Dbtup.hpp +8 −0 Original line number Diff line number Diff line Loading @@ -996,6 +996,14 @@ public: Dbtup(const class Configuration &); virtual ~Dbtup(); /* * TUX index in TUP has single Uint32 array attribute which stores an * index node. TUX uses following methods. */ int tuxAllocNode(Signal* signal, Uint32 fragPtrI, Uint32& pageId, Uint32& pageOffset, Uint32*& node); void tuxFreeNode(Signal* signal, Uint32 fragPtrI, Uint32 pageId, Uint32 pageOffset, Uint32* node); void tuxGetNode(Uint32 fragPtrI, Uint32 pageId, Uint32 pageOffset, Uint32*& node); private: BLOCK_DEFINES(Dbtup); Loading
ndb/src/kernel/blocks/dbtup/DbtupIndex.cpp +58 −0 Original line number Diff line number Diff line Loading @@ -179,6 +179,64 @@ Dbtup::execTUP_QUERY_TH(Signal* signal) return; } int Dbtup::tuxAllocNode(Signal* signal, Uint32 fragPtrI, Uint32& pageId, Uint32& pageOffset, Uint32*& node) { FragrecordPtr fragPtr; fragPtr.i = fragPtrI; ptrCheckGuard(fragPtr, cnoOfFragrec, fragrecord); TablerecPtr tablePtr; tablePtr.i = fragPtr.p->fragTableId; ptrCheckGuard(tablePtr, cnoOfTablerec, tablerec); PagePtr pagePtr; terrorCode = 0; if (! allocTh(fragPtr.p, tablePtr.p, NORMAL_PAGE, signal, pageOffset, pagePtr)) { jam(); ndbrequire(terrorCode != 0); return terrorCode; } pageId = pagePtr.i; Uint32 attrDescIndex = tablePtr.p->tabDescriptor + (0 << ZAD_LOG_SIZE); Uint32 attrDataOffset = AttributeOffset::getOffset(tableDescriptor[attrDescIndex + 1].tabDescr); node = &pagePtr.p->pageWord[pageOffset] + attrDataOffset; return 0; } void Dbtup::tuxFreeNode(Signal* signal, Uint32 fragPtrI, Uint32 pageId, Uint32 pageOffset, Uint32* node) { FragrecordPtr fragPtr; fragPtr.i = fragPtrI; ptrCheckGuard(fragPtr, cnoOfFragrec, fragrecord); TablerecPtr tablePtr; tablePtr.i = fragPtr.p->fragTableId; ptrCheckGuard(tablePtr, cnoOfTablerec, tablerec); PagePtr pagePtr; pagePtr.i = pageId; ptrCheckGuard(pagePtr, cnoOfPage, page); Uint32 attrDescIndex = tablePtr.p->tabDescriptor + (0 << ZAD_LOG_SIZE); Uint32 attrDataOffset = AttributeOffset::getOffset(tableDescriptor[attrDescIndex + 1].tabDescr); ndbrequire(node == &pagePtr.p->pageWord[pageOffset] + attrDataOffset); freeTh(fragPtr.p, tablePtr.p, signal, pagePtr.p, pageOffset); } void Dbtup::tuxGetNode(Uint32 fragPtrI, Uint32 pageId, Uint32 pageOffset, Uint32*& node) { FragrecordPtr fragPtr; fragPtr.i = fragPtrI; ptrCheckGuard(fragPtr, cnoOfFragrec, fragrecord); TablerecPtr tablePtr; tablePtr.i = fragPtr.p->fragTableId; ptrCheckGuard(tablePtr, cnoOfTablerec, tablerec); PagePtr pagePtr; pagePtr.i = pageId; ptrCheckGuard(pagePtr, cnoOfPage, page); Uint32 attrDescIndex = tablePtr.p->tabDescriptor + (0 << ZAD_LOG_SIZE); Uint32 attrDataOffset = AttributeOffset::getOffset(tableDescriptor[attrDescIndex + 1].tabDescr); node = &pagePtr.p->pageWord[pageOffset] + attrDataOffset; } void Dbtup::execTUP_STORE_TH(Signal* signal) { Loading
ndb/src/kernel/blocks/dbtux/Dbtux.hpp +6 −0 Original line number Diff line number Diff line Loading @@ -25,6 +25,9 @@ #include <DataBuffer.hpp> #include <md5_hash.hpp> // big brother #include <Dbtup.hpp> // signal classes #include <signaldata/DictTabInfo.hpp> #include <signaldata/TuxContinueB.hpp> Loading Loading @@ -92,6 +95,9 @@ public: Dbtux(const Configuration& conf); virtual ~Dbtux(); // pointer to TUP instance in this thread Dbtup* c_tup; private: // sizes are in words (Uint32) static const unsigned MaxIndexFragments = 2 * NO_OF_FRAG_PER_NODE; Loading
ndb/src/kernel/blocks/dbtux/DbtuxGen.cpp +4 −1 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ Dbtux::Dbtux(const Configuration& conf) : SimulatedBlock(DBTUX, conf), c_tup(0), c_descPageList(RNIL), #ifdef VM_TRACE debugFile(0), Loading Loading @@ -123,6 +124,8 @@ Dbtux::execSTTOR(Signal* signal) case 1: jam(); CLEAR_ERROR_INSERT_VALUE; c_tup = (Dbtup*)globalData.getBlock(DBTUP); ndbrequire(c_tup != 0); break; case 3: jam(); Loading Loading @@ -180,7 +183,7 @@ Dbtux::execREAD_CONFIG_REQ(Signal* signal) c_scanBoundPool.setSize(nScanBoundWords); /* * Index id is physical array index. We seize and initialize all * index records now. This assumes ArrayPool is an array. * index records now. */ IndexPtr indexPtr; while (1) { Loading