From: Frazer Clement Date: April 24 2012 3:20pm Subject: bzr push into mysql-5.1-telco-7.1 branch (frazer.clement:4534 to 4535) List-Archive: http://lists.mysql.com/commits/143639 Message-Id: <201204241520.q3OFKe2k026203@acsmt358.oracle.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit 4535 Frazer Clement 2012-04-24 [merge] Merge 7.0->7.1 modified: storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp storage/ndb/src/kernel/vm/ArrayPool.hpp 4534 Frazer Clement 2012-04-24 [merge] Merge 7.0->7.1 modified: storage/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp === modified file 'storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp' --- a/storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp 2012-02-02 20:59:13 +0000 +++ b/storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp 2012-04-24 15:13:35 +0000 @@ -22788,7 +22788,7 @@ Dblqh::execDUMP_STATE_ORD(Signal* signal ScanRecordPtr sp; sp.i = recordNo; - c_scanRecordPool.getPtr(sp); + c_scanRecordPool.getPtrIgnoreAlloc(sp); infoEvent("Dblqh::ScanRecord[%d]: state=%d, type=%d, " "complStatus=%d, scanNodeId=%d", sp.i, @@ -22818,6 +22818,10 @@ Dblqh::execDUMP_STATE_ORD(Signal* signal sp.p->scanTcWaiting, sp.p->scanTcrec, sp.p->scanKeyinfoFlag); + infoEvent(" LcpScan=%d RowId(%u:%u)", + sp.p->lcpScan, + sp.p->m_row_id.m_page_no, + sp.p->m_row_id.m_page_idx); return; } if(dumpState->args[0] == DumpStateOrd::LqhDumpLcpState){ @@ -22845,6 +22849,28 @@ Dblqh::execDUMP_STATE_ORD(Signal* signal infoEvent(" m_EMPTY_LCP_REQ=%s", TlcpPtr.p->m_EMPTY_LCP_REQ.getText(buf)); + if ((signal->length() == 2) && + (dumpState->args[1] == 0)) + { + /* Dump reserved LCP scan rec */ + /* As there's only one, we'll do a tight loop here */ + infoEvent(" dumping reserved scan records"); + for (Uint32 rec=0; rec < cscanrecFileSize; rec++) + { + ScanRecordPtr sp; + sp.i = rec; + c_scanRecordPool.getPtrIgnoreAlloc(sp); + + if (sp.p->m_reserved && + sp.p->lcpScan) + { + dumpState->args[0] = DumpStateOrd::LqhDumpOneScanRec; + dumpState->args[1] = rec; + execDUMP_STATE_ORD(signal); + } + } + } + return; } if (dumpState->args[0] == DumpStateOrd::LQHLogFileInitStatus){ === modified file 'storage/ndb/src/kernel/vm/ArrayPool.hpp' --- a/storage/ndb/src/kernel/vm/ArrayPool.hpp 2012-01-11 13:16:31 +0000 +++ b/storage/ndb/src/kernel/vm/ArrayPool.hpp 2012-04-24 15:10:04 +0000 @@ -99,6 +99,7 @@ public: void getPtr(ConstPtr &) const; void getPtr(Ptr &, bool CrashOnBoundaryError); void getPtr(ConstPtr &, bool CrashOnBoundaryError) const; + void getPtrIgnoreAlloc(Ptr &); /** * Get pointer for i value @@ -723,6 +724,26 @@ ArrayPool::getConstPtr(Uint32 i, bool return 0; } } + +/** + getPtrIgnoreAlloc + + getPtr, without array_guard /theAllocatedBitmask checks + Useful when looking at elements in the pool which may or may not + be allocated. + Retains the range check. +*/ +template +inline +void +ArrayPool::getPtrIgnoreAlloc(Ptr & ptr){ + Uint32 i = ptr.i; + if(likely (i < size)){ + ptr.p = &theArray[i]; + } else { + ErrorReporter::handleAssert("ArrayPool::getPtr", __FILE__, __LINE__); + } +} /** * Allocate an object from pool - update Ptr No bundle (reason: useless for push emails).