summaryrefslogtreecommitdiff
path: root/ndb/src/kernel/blocks
diff options
context:
space:
mode:
authorunknown <tulin@dl145b.mysql.com>2005-05-04 15:13:00 +0200
committerunknown <tulin@dl145b.mysql.com>2005-05-04 15:13:00 +0200
commitf81661ba71b026e5e8dc635bc449c132609b6316 (patch)
tree6e93257a24ad11252e1e751ae829c2cdce6c3b01 /ndb/src/kernel/blocks
parent3d66af2ef364f076594cfb6cad316fabee6888ea (diff)
downloadmariadb-git-f81661ba71b026e5e8dc635bc449c132609b6316.tar.gz
testSuperPool.cpp:
Rename: ndb/src/kernel/vm/testSuperPool.cpp -> storage/ndb/src/kernel/vm/testSuperPool.cpp SuperPool.hpp: Rename: ndb/src/kernel/vm/SuperPool.hpp -> storage/ndb/src/kernel/vm/SuperPool.hpp SuperPool.cpp: Rename: ndb/src/kernel/vm/SuperPool.cpp -> storage/ndb/src/kernel/vm/SuperPool.cpp DbtupScan.cpp: Rename: ndb/src/kernel/blocks/dbtup/DbtupScan.cpp -> storage/ndb/src/kernel/blocks/dbtup/DbtupScan.cpp storage/ndb/src/kernel/blocks/dbtup/DbtupScan.cpp: Rename: ndb/src/kernel/blocks/dbtup/DbtupScan.cpp -> storage/ndb/src/kernel/blocks/dbtup/DbtupScan.cpp storage/ndb/src/kernel/vm/SuperPool.cpp: Rename: ndb/src/kernel/vm/SuperPool.cpp -> storage/ndb/src/kernel/vm/SuperPool.cpp storage/ndb/src/kernel/vm/SuperPool.hpp: Rename: ndb/src/kernel/vm/SuperPool.hpp -> storage/ndb/src/kernel/vm/SuperPool.hpp storage/ndb/src/kernel/vm/testSuperPool.cpp: Rename: ndb/src/kernel/vm/testSuperPool.cpp -> storage/ndb/src/kernel/vm/testSuperPool.cpp
Diffstat (limited to 'ndb/src/kernel/blocks')
-rw-r--r--ndb/src/kernel/blocks/dbtup/DbtupScan.cpp315
1 files changed, 0 insertions, 315 deletions
diff --git a/ndb/src/kernel/blocks/dbtup/DbtupScan.cpp b/ndb/src/kernel/blocks/dbtup/DbtupScan.cpp
deleted file mode 100644
index 396404faa8c..00000000000
--- a/ndb/src/kernel/blocks/dbtup/DbtupScan.cpp
+++ /dev/null
@@ -1,315 +0,0 @@
-/* Copyright (C) 2003 MySQL AB
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
-
-#define DBTUP_C
-#include "Dbtup.hpp"
-#include <signaldata/AccScan.hpp>
-#include <signaldata/NextScan.hpp>
-
-#undef jam
-#undef jamEntry
-#define jam() { jamLine(32000 + __LINE__); }
-#define jamEntry() { jamEntryLine(32000 + __LINE__); }
-
-void
-Dbtup::execACC_SCANREQ(Signal* signal)
-{
- jamEntry();
- const AccScanReq reqCopy = *(const AccScanReq*)signal->getDataPtr();
- const AccScanReq* const req = &reqCopy;
- ScanOpPtr scanPtr;
- scanPtr.i = RNIL;
- do {
- // find table and fragments
- TablerecPtr tablePtr;
- tablePtr.i = req->tableId;
- ptrCheckGuard(tablePtr, cnoOfTablerec, tablerec);
- FragrecordPtr fragPtr[2];
- Uint32 fragId = req->fragmentNo << 1;
- fragPtr[0].i = fragPtr[1].i = RNIL;
- getFragmentrec(fragPtr[0], fragId | 0, tablePtr.p);
- getFragmentrec(fragPtr[1], fragId | 1, tablePtr.p);
- ndbrequire(fragPtr[0].i != RNIL && fragPtr[1].i != RNIL);
- Fragrecord& frag = *fragPtr[0].p;
- // seize from pool and link to per-fragment list
- if (! frag.m_scanList.seize(scanPtr)) {
- jam();
- break;
- }
- new (scanPtr.p) ScanOp();
- ScanOp& scan = *scanPtr.p;
- scan.m_state = ScanOp::First;
- scan.m_userPtr = req->senderData;
- scan.m_userRef = req->senderRef;
- scan.m_tableId = tablePtr.i;
- scan.m_fragId = frag.fragmentId;
- scan.m_fragPtrI[0] = fragPtr[0].i;
- scan.m_fragPtrI[1] = fragPtr[1].i;
- scan.m_transId1 = req->transId1;
- scan.m_transId2 = req->transId2;
- // conf
- AccScanConf* const conf = (AccScanConf*)signal->getDataPtrSend();
- conf->scanPtr = req->senderData;
- conf->accPtr = scanPtr.i;
- conf->flag = AccScanConf::ZNOT_EMPTY_FRAGMENT;
- sendSignal(req->senderRef, GSN_ACC_SCANCONF, signal,
- AccScanConf::SignalLength, JBB);
- return;
- } while (0);
- if (scanPtr.i != RNIL) {
- jam();
- releaseScanOp(scanPtr);
- }
- // LQH does not handle REF
- signal->theData[0] = 0x313;
- sendSignal(req->senderRef, GSN_ACC_SCANREF, signal, 1, JBB);
-}
-
-void
-Dbtup::execNEXT_SCANREQ(Signal* signal)
-{
- jamEntry();
- const NextScanReq reqCopy = *(const NextScanReq*)signal->getDataPtr();
- const NextScanReq* const req = &reqCopy;
- ScanOpPtr scanPtr;
- c_scanOpPool.getPtr(scanPtr, req->accPtr);
- ScanOp& scan = *scanPtr.p;
- FragrecordPtr fragPtr;
- fragPtr.i = scan.m_fragPtrI[0];
- ptrCheckGuard(fragPtr, cnoOfFragrec, fragrecord);
- Fragrecord& frag = *fragPtr.p;
- switch (req->scanFlag) {
- case NextScanReq::ZSCAN_NEXT:
- jam();
- break;
- case NextScanReq::ZSCAN_NEXT_COMMIT:
- jam();
- break;
- case NextScanReq::ZSCAN_COMMIT:
- jam();
- {
- NextScanConf* const conf = (NextScanConf*)signal->getDataPtrSend();
- conf->scanPtr = scan.m_userPtr;
- unsigned signalLength = 1;
- sendSignal(scanPtr.p->m_userRef, GSN_NEXT_SCANCONF,
- signal, signalLength, JBB);
- return;
- }
- break;
- case NextScanReq::ZSCAN_CLOSE:
- jam();
- scanClose(signal, scanPtr);
- return;
- case NextScanReq::ZSCAN_NEXT_ABORT:
- jam();
- default:
- jam();
- ndbrequire(false);
- break;
- }
- // start looking for next scan result
- AccCheckScan* checkReq = (AccCheckScan*)signal->getDataPtrSend();
- checkReq->accPtr = scanPtr.i;
- checkReq->checkLcpStop = AccCheckScan::ZNOT_CHECK_LCP_STOP;
- EXECUTE_DIRECT(DBTUP, GSN_ACC_CHECK_SCAN, signal, AccCheckScan::SignalLength);
- jamEntry();
-}
-
-void
-Dbtup::execACC_CHECK_SCAN(Signal* signal)
-{
- jamEntry();
- const AccCheckScan reqCopy = *(const AccCheckScan*)signal->getDataPtr();
- const AccCheckScan* const req = &reqCopy;
- ScanOpPtr scanPtr;
- c_scanOpPool.getPtr(scanPtr, req->accPtr);
- ScanOp& scan = *scanPtr.p;
- FragrecordPtr fragPtr;
- fragPtr.i = scan.m_fragPtrI[0];
- ptrCheckGuard(fragPtr, cnoOfFragrec, fragrecord);
- Fragrecord& frag = *fragPtr.p;
- if (req->checkLcpStop == AccCheckScan::ZCHECK_LCP_STOP) {
- jam();
- signal->theData[0] = scan.m_userPtr;
- signal->theData[1] = true;
- EXECUTE_DIRECT(DBLQH, GSN_CHECK_LCP_STOP, signal, 2);
- jamEntry();
- return;
- }
- if (scan.m_state == ScanOp::First) {
- jam();
- scanFirst(signal, scanPtr);
- }
- if (scan.m_state == ScanOp::Next) {
- jam();
- scanNext(signal, scanPtr);
- }
- if (scan.m_state == ScanOp::Locked) {
- jam();
- const PagePos& pos = scan.m_scanPos;
- NextScanConf* const conf = (NextScanConf*)signal->getDataPtrSend();
- conf->scanPtr = scan.m_userPtr;
- conf->accOperationPtr = (Uint32)-1; // no lock returned
- conf->fragId = frag.fragmentId | pos.m_fragBit;
- conf->localKey[0] = (pos.m_pageId << MAX_TUPLES_BITS) |
- (pos.m_tupleNo << 1);
- conf->localKey[1] = 0;
- conf->localKeyLength = 1;
- unsigned signalLength = 6;
- Uint32 blockNo = refToBlock(scan.m_userRef);
- EXECUTE_DIRECT(blockNo, GSN_NEXT_SCANCONF, signal, signalLength);
- jamEntry();
- // next time look for next entry
- scan.m_state = ScanOp::Next;
- return;
- }
- if (scan.m_state == ScanOp::Last ||
- scan.m_state == ScanOp::Invalid) {
- jam();
- NextScanConf* const conf = (NextScanConf*)signal->getDataPtrSend();
- conf->scanPtr = scan.m_userPtr;
- conf->accOperationPtr = RNIL;
- conf->fragId = RNIL;
- unsigned signalLength = 3;
- sendSignal(scanPtr.p->m_userRef, GSN_NEXT_SCANCONF,
- signal, signalLength, JBB);
- return;
- }
- ndbrequire(false);
-}
-
-void
-Dbtup::scanFirst(Signal* signal, ScanOpPtr scanPtr)
-{
- ScanOp& scan = *scanPtr.p;
- // set to first fragment, first page, first tuple
- PagePos& pos = scan.m_scanPos;
- pos.m_fragId = scan.m_fragId;
- pos.m_fragBit = 0;
- pos.m_pageId = 0;
- pos.m_tupleNo = 0;
- // just before
- pos.m_match = false;
- // let scanNext() do the work
- scan.m_state = ScanOp::Next;
-}
-
-// TODO optimize this + index build
-void
-Dbtup::scanNext(Signal* signal, ScanOpPtr scanPtr)
-{
- ScanOp& scan = *scanPtr.p;
- PagePos& pos = scan.m_scanPos;
- TablerecPtr tablePtr;
- tablePtr.i = scan.m_tableId;
- ptrCheckGuard(tablePtr, cnoOfTablerec, tablerec);
- while (true) {
- // TODO time-slice here after X loops
- jam();
- // get fragment
- if (pos.m_fragBit == 2) {
- jam();
- scan.m_state = ScanOp::Last;
- break;
- }
- ndbrequire(pos.m_fragBit <= 1);
- FragrecordPtr fragPtr;
- fragPtr.i = scan.m_fragPtrI[pos.m_fragBit];
- ptrCheckGuard(fragPtr, cnoOfFragrec, fragrecord);
- Fragrecord& frag = *fragPtr.p;
- // get page
- PagePtr pagePtr;
- if (pos.m_pageId >= frag.noOfPages) {
- jam();
- pos.m_fragBit++;
- pos.m_pageId = 0;
- pos.m_tupleNo = 0;
- pos.m_match = false;
- continue;
- }
- Uint32 realPageId = getRealpid(fragPtr.p, pos.m_pageId);
- pagePtr.i = realPageId;
- ptrCheckGuard(pagePtr, cnoOfPage, page);
- const Uint32 pageState = pagePtr.p->pageWord[ZPAGE_STATE_POS];
- if (pageState != ZTH_MM_FREE &&
- pageState != ZTH_MM_FULL) {
- jam();
- pos.m_pageId++;
- pos.m_tupleNo = 0;
- pos.m_match = false;
- continue;
- }
- // get next tuple
- if (pos.m_match)
- pos.m_tupleNo++;
- pos.m_match = true;
- const Uint32 tupheadsize = tablePtr.p->tupheadsize;
- Uint32 pageOffset = ZPAGE_HEADER_SIZE + pos.m_tupleNo * tupheadsize;
- if (pageOffset + tupheadsize > ZWORDS_ON_PAGE) {
- jam();
- pos.m_pageId++;
- pos.m_tupleNo = 0;
- pos.m_match = false;
- continue;
- }
- // skip over free tuple
- bool isFree = false;
- if (pageState == ZTH_MM_FREE) {
- jam();
- if ((pagePtr.p->pageWord[pageOffset] >> 16) == tupheadsize) {
- Uint32 nextTuple = pagePtr.p->pageWord[ZFREELIST_HEADER_POS] >> 16;
- while (nextTuple != 0) {
- jam();
- if (nextTuple == pageOffset) {
- jam();
- isFree = true;
- break;
- }
- nextTuple = pagePtr.p->pageWord[nextTuple] & 0xffff;
- }
- }
- }
- if (isFree) {
- jam();
- continue;
- }
- // TODO check for operation and return latest in own tx
- scan.m_state = ScanOp::Locked;
- break;
- }
-}
-
-void
-Dbtup::scanClose(Signal* signal, ScanOpPtr scanPtr)
-{
- NextScanConf* const conf = (NextScanConf*)signal->getDataPtrSend();
- conf->scanPtr = scanPtr.p->m_userPtr;
- conf->accOperationPtr = RNIL;
- conf->fragId = RNIL;
- unsigned signalLength = 3;
- sendSignal(scanPtr.p->m_userRef, GSN_NEXT_SCANCONF,
- signal, signalLength, JBB);
- releaseScanOp(scanPtr);
-}
-
-void
-Dbtup::releaseScanOp(ScanOpPtr& scanPtr)
-{
- FragrecordPtr fragPtr;
- fragPtr.i = scanPtr.p->m_fragPtrI[0];
- ptrCheckGuard(fragPtr, cnoOfFragrec, fragrecord);
- fragPtr.p->m_scanList.release(scanPtr);
-}