diff options
Diffstat (limited to 'ndb/src/kernel/blocks/dbtup/DbtupGen.cpp')
-rw-r--r-- | ndb/src/kernel/blocks/dbtup/DbtupGen.cpp | 97 |
1 files changed, 64 insertions, 33 deletions
diff --git a/ndb/src/kernel/blocks/dbtup/DbtupGen.cpp b/ndb/src/kernel/blocks/dbtup/DbtupGen.cpp index af516d53a24..66e98bd2805 100644 --- a/ndb/src/kernel/blocks/dbtup/DbtupGen.cpp +++ b/ndb/src/kernel/blocks/dbtup/DbtupGen.cpp @@ -75,25 +75,8 @@ Dbtup::Dbtup(const class Configuration & conf) c_storedProcPool(), c_buildIndexList(c_buildIndexPool) { - Uint32 log_page_size= 0; BLOCK_CONSTRUCTOR(Dbtup); - const ndb_mgm_configuration_iterator * p = conf.getOwnConfigIterator(); - ndbrequire(p != 0); - - ndb_mgm_get_int_parameter(p, CFG_DB_UNDO_DATA_BUFFER, - &log_page_size); - - /** - * Always set page size in half MBytes - */ - cnoOfUndoPage= (log_page_size / sizeof(UndoPage)); - Uint32 mega_byte_part= cnoOfUndoPage & 15; - if (mega_byte_part != 0) { - jam(); - cnoOfUndoPage+= (16 - mega_byte_part); - } - addRecSignal(GSN_DEBUG_SIG, &Dbtup::execDEBUG_SIG); addRecSignal(GSN_CONTINUEB, &Dbtup::execCONTINUEB); @@ -137,7 +120,28 @@ Dbtup::Dbtup(const class Configuration & conf) // Ordered index related addRecSignal(GSN_BUILDINDXREQ, &Dbtup::execBUILDINDXREQ); + // Tup scan + addRecSignal(GSN_ACC_SCANREQ, &Dbtup::execACC_SCANREQ); + addRecSignal(GSN_NEXT_SCANREQ, &Dbtup::execNEXT_SCANREQ); + addRecSignal(GSN_ACC_CHECK_SCAN, &Dbtup::execACC_CHECK_SCAN); + initData(); + + attrbufrec = 0; + checkpointInfo = 0; + diskBufferSegmentInfo = 0; + fragoperrec = 0; + fragrecord = 0; + hostBuffer = 0; + localLogInfo = 0; + operationrec = 0; + page = 0; + pageRange = 0; + pendingFileOpenInfo = 0; + restartInfoRecord = 0; + tablerec = 0; + tableDescriptor = 0; + undoPage = 0; }//Dbtup::Dbtup() Dbtup::~Dbtup() @@ -598,6 +602,20 @@ void Dbtup::execREAD_CONFIG_REQ(Signal* signal) theConfiguration.getOwnConfigIterator(); ndbrequire(p != 0); + Uint32 log_page_size= 0; + ndb_mgm_get_int_parameter(p, CFG_DB_UNDO_DATA_BUFFER, + &log_page_size); + + /** + * Always set page size in half MBytes + */ + cnoOfUndoPage= (log_page_size / sizeof(UndoPage)); + Uint32 mega_byte_part= cnoOfUndoPage & 15; + if (mega_byte_part != 0) { + jam(); + cnoOfUndoPage+= (16 - mega_byte_part); + } + ndbrequire(!ndb_mgm_get_int_parameter(p, CFG_TUP_FRAG, &cnoOfFragrec)); ndbrequire(!ndb_mgm_get_int_parameter(p, CFG_TUP_OP_RECS, &cnoOfOprec)); @@ -617,12 +635,19 @@ void Dbtup::execREAD_CONFIG_REQ(Signal* signal) ndbrequire(!ndb_mgm_get_int_parameter(p, CFG_DB_NO_TRIGGERS, &noOfTriggers)); + Uint32 nScanOp; // use TUX config for now + ndbrequire(!ndb_mgm_get_int_parameter(p, CFG_TUX_SCAN_OP, &nScanOp)); + + cnoOfTabDescrRec = (cnoOfTabDescrRec & 0xFFFFFFF0) + 16; + + initRecords(); + c_storedProcPool.setSize(noOfStoredProc); c_buildIndexPool.setSize(c_noOfBuildIndexRec); c_triggerPool.setSize(noOfTriggers); + c_scanOpPool.setSize(nScanOp); - initRecords(); czero = 0; cminusOne = czero - 1; clastBitMask = 1; @@ -644,7 +669,22 @@ void Dbtup::execREAD_CONFIG_REQ(Signal* signal) void Dbtup::initRecords() { + unsigned i; + // Records with dynamic sizes + page = (Page*)allocRecord("Page", + sizeof(Page), + cnoOfPage, + false); + + undoPage = (UndoPage*)allocRecord("UndoPage", + sizeof(UndoPage), + cnoOfUndoPage); + + operationrec = (Operationrec*)allocRecord("Operationrec", + sizeof(Operationrec), + cnoOfOprec); + attrbufrec = (Attrbufrec*)allocRecord("Attrbufrec", sizeof(Attrbufrec), cnoOfAttrbufrec); @@ -665,6 +705,11 @@ void Dbtup::initRecords() fragrecord = (Fragrecord*)allocRecord("Fragrecord", sizeof(Fragrecord), cnoOfFragrec); + + for (i = 0; i<cnoOfFragrec; i++) { + void * p = &fragrecord[i]; + new (p) Fragrecord(c_scanOpPool); + } hostBuffer = (HostBuffer*)allocRecord("HostBuffer", sizeof(HostBuffer), @@ -674,15 +719,6 @@ void Dbtup::initRecords() sizeof(LocalLogInfo), cnoOfParallellUndoFiles); - operationrec = (Operationrec*)allocRecord("Operationrec", - sizeof(Operationrec), - cnoOfOprec); - - page = (Page*)allocRecord("Page", - sizeof(Page), - cnoOfPage, - false); - pageRange = (PageRange*)allocRecord("PageRange", sizeof(PageRange), cnoOfPageRangeRec); @@ -702,7 +738,7 @@ void Dbtup::initRecords() sizeof(Tablerec), cnoOfTablerec); - for(unsigned i = 0; i<cnoOfTablerec; i++) { + for (i = 0; i<cnoOfTablerec; i++) { void * p = &tablerec[i]; new (p) Tablerec(c_triggerPool); } @@ -712,11 +748,6 @@ void Dbtup::initRecords() sizeof(TableDescriptor), cnoOfTabDescrRec); - undoPage = (UndoPage*)allocRecord("UndoPage", - sizeof(UndoPage), - cnoOfUndoPage); - - // Initialize BAT for interface to file system NewVARIABLE* bat = allocateBat(3); bat[1].WA = &page->pageWord[0]; |