Commit 9fb5e5d0 authored by lzhou/zhl@dev3-63.(none)'s avatar lzhou/zhl@dev3-63.(none)

Merge lzhou@bk-internal.mysql.com:/home/bk/mysql-5.1-new-ndb-bj

into  dev3-63.(none):/home/zhl/mysql/mysql-5.1/bug26307
parents afd6dbbc be4db499
...@@ -32,6 +32,82 @@ ...@@ -32,6 +32,82 @@
#include <../pgman.hpp> #include <../pgman.hpp>
#include <../tsman.hpp> #include <../tsman.hpp>
// jams
#undef jam
#undef jamEntry
#ifdef DBTUP_BUFFER_CPP
#define jam() jamLine(10000 + __LINE__)
#define jamEntry() jamEntryLine(10000 + __LINE__)
#endif
#ifdef DBTUP_ROUTINES_CPP
#define jam() jamLine(15000 + __LINE__)
#define jamEntry() jamEntryLine(15000 + __LINE__)
#endif
#ifdef DBTUP_COMMIT_CPP
#define jam() jamLine(20000 + __LINE__)
#define jamEntry() jamEntryLine(20000 + __LINE__)
#endif
#ifdef DBTUP_FIXALLOC_CPP
#define jam() jamLine(25000 + __LINE__)
#define jamEntry() jamEntryLine(25000 + __LINE__)
#endif
#ifdef DBTUP_TRIGGER_CPP
#define jam() jamLine(30000 + __LINE__)
#define jamEntry() jamEntryLine(30000 + __LINE__)
#endif
#ifdef DBTUP_ABORT_CPP
#define jam() jamLine(35000 + __LINE__)
#define jamEntry() jamEntryLine(35000 + __LINE__)
#endif
#ifdef DBTUP_PAGE_MAP_CPP
#define jam() jamLine(40000 + __LINE__)
#define jamEntry() jamEntryLine(40000 + __LINE__)
#endif
#ifdef DBTUP_PAG_MAN_CPP
#define jam() jamLine(45000 + __LINE__)
#define jamEntry() jamEntryLine(45000 + __LINE__)
#endif
#ifdef DBTUP_STORE_PROC_DEF_CPP
#define jam() jamLine(50000 + __LINE__)
#define jamEntry() jamEntryLine(50000 + __LINE__)
#endif
#ifdef DBTUP_META_CPP
#define jam() jamLine(55000 + __LINE__)
#define jamEntry() jamEntryLine(55000 + __LINE__)
#endif
#ifdef DBTUP_TAB_DES_MAN_CPP
#define jam() jamLine(60000 + __LINE__)
#define jamEntry() jamEntryLine(60000 + __LINE__)
#endif
#ifdef DBTUP_GEN_CPP
#define jam() jamLine(65000 + __LINE__)
#define jamEntry() jamEntryLine(65000 + __LINE__)
#endif
#ifdef DBTUP_INDEX_CPP
#define jam() jamLine(70000 + __LINE__)
#define jamEntry() jamEntryLine(70000 + __LINE__)
#endif
#ifdef DBTUP_DEBUG_CPP
#define jam() jamLine(75000 + __LINE__)
#define jamEntry() jamEntryLine(75000 + __LINE__)
#endif
#ifdef DBTUP_VAR_ALLOC_CPP
#define jam() jamLine(80000 + __LINE__)
#define jamEntry() jamEntryLine(80000 + __LINE__)
#endif
#ifdef DBTUP_SCAN_CPP
#define jam() jamLine(85000 + __LINE__)
#define jamEntry() jamEntryLine(85000 + __LINE__)
#endif
#ifdef DBTUP_DISK_ALLOC_CPP
#define jam() jamLine(90000 + __LINE__)
#define jamEntry() jamEntryLine(90000 + __LINE__)
#endif
#ifndef jam
#define jam() jamLine(__LINE__)
#define jamEntry() jamEntryLine(__LINE__)
#endif
#ifdef VM_TRACE #ifdef VM_TRACE
inline const char* dbgmask(const Bitmask<MAXNROFATTRIBUTESINWORDS>& bm) { inline const char* dbgmask(const Bitmask<MAXNROFATTRIBUTESINWORDS>& bm) {
static int i=0; static char buf[5][200]; static int i=0; static char buf[5][200];
...@@ -70,22 +146,23 @@ inline const Uint32* ALIGN_WORD(const void* ptr) ...@@ -70,22 +146,23 @@ inline const Uint32* ALIGN_WORD(const void* ptr)
// only reports the line number in the file it currently is located in. // only reports the line number in the file it currently is located in.
// //
// DbtupExecQuery.cpp 0 // DbtupExecQuery.cpp 0
// DbtupBuffer.cpp 2000 // DbtupBuffer.cpp 10000
// DbtupRoutines.cpp 3000 // DbtupRoutines.cpp 15000
// DbtupCommit.cpp 5000 // DbtupCommit.cpp 20000
// DbtupFixAlloc.cpp 6000 // DbtupFixAlloc.cpp 25000
// DbtupTrigger.cpp 7000 // DbtupTrigger.cpp 30000
// DbtupAbort.cpp 9000 // DbtupAbort.cpp 35000
// DbtupPageMap.cpp 14000 // DbtupPageMap.cpp 40000
// DbtupPagMan.cpp 16000 // DbtupPagMan.cpp 45000
// DbtupStoredProcDef.cpp 18000 // DbtupStoredProcDef.cpp 50000
// DbtupMeta.cpp 20000 // DbtupMeta.cpp 55000
// DbtupTabDesMan.cpp 22000 // DbtupTabDesMan.cpp 60000
// DbtupGen.cpp 24000 // DbtupGen.cpp 65000
// DbtupIndex.cpp 28000 // DbtupIndex.cpp 70000
// DbtupDebug.cpp 30000 // DbtupDebug.cpp 75000
// DbtupVarAlloc.cpp 32000 // DbtupVarAlloc.cpp 80000
// DbtupScan.cpp 33000 // DbtupScan.cpp 85000
// DbtupDiskAlloc.cpp 90000
//------------------------------------------------------------------ //------------------------------------------------------------------
/* /*
......
...@@ -14,21 +14,19 @@ ...@@ -14,21 +14,19 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#define DBTUP_C #define DBTUP_C
#define DBTUP_ABORT_CPP
#include "Dbtup.hpp" #include "Dbtup.hpp"
#include <RefConvert.hpp> #include <RefConvert.hpp>
#include <ndb_limits.h> #include <ndb_limits.h>
#include <pc.hpp> #include <pc.hpp>
#define ljam() { jamLine(9000 + __LINE__); }
#define ljamEntry() { jamEntryLine(9000 + __LINE__); }
void Dbtup::freeAllAttrBuffers(Operationrec* const regOperPtr) void Dbtup::freeAllAttrBuffers(Operationrec* const regOperPtr)
{ {
if (regOperPtr->storedProcedureId == RNIL) { if (regOperPtr->storedProcedureId == RNIL) {
ljam(); jam();
freeAttrinbufrec(regOperPtr->firstAttrinbufrec); freeAttrinbufrec(regOperPtr->firstAttrinbufrec);
} else { } else {
ljam(); jam();
StoredProcPtr storedPtr; StoredProcPtr storedPtr;
c_storedProcPool.getPtr(storedPtr, (Uint32)regOperPtr->storedProcedureId); c_storedProcPool.getPtr(storedPtr, (Uint32)regOperPtr->storedProcedureId);
ndbrequire(storedPtr.p->storedCode == ZSCAN_PROCEDURE); ndbrequire(storedPtr.p->storedCode == ZSCAN_PROCEDURE);
...@@ -46,7 +44,7 @@ void Dbtup::freeAttrinbufrec(Uint32 anAttrBuf) ...@@ -46,7 +44,7 @@ void Dbtup::freeAttrinbufrec(Uint32 anAttrBuf)
Uint32 RnoFree = cnoFreeAttrbufrec; Uint32 RnoFree = cnoFreeAttrbufrec;
localAttrBufPtr.i = anAttrBuf; localAttrBufPtr.i = anAttrBuf;
while (localAttrBufPtr.i != RNIL) { while (localAttrBufPtr.i != RNIL) {
ljam(); jam();
ptrCheckGuard(localAttrBufPtr, cnoOfAttrbufrec, attrbufrec); ptrCheckGuard(localAttrBufPtr, cnoOfAttrbufrec, attrbufrec);
Ttemp = localAttrBufPtr.p->attrbuf[ZBUF_NEXT]; Ttemp = localAttrBufPtr.p->attrbuf[ZBUF_NEXT];
localAttrBufPtr.p->attrbuf[ZBUF_NEXT] = cfirstfreeAttrbufrec; localAttrBufPtr.p->attrbuf[ZBUF_NEXT] = cfirstfreeAttrbufrec;
...@@ -62,7 +60,7 @@ void Dbtup::freeAttrinbufrec(Uint32 anAttrBuf) ...@@ -62,7 +60,7 @@ void Dbtup::freeAttrinbufrec(Uint32 anAttrBuf)
*/ */
void Dbtup::execTUP_ABORTREQ(Signal* signal) void Dbtup::execTUP_ABORTREQ(Signal* signal)
{ {
ljamEntry(); jamEntry();
do_tup_abortreq(signal, 0); do_tup_abortreq(signal, 0);
} }
...@@ -80,7 +78,7 @@ void Dbtup::do_tup_abortreq(Signal* signal, Uint32 flags) ...@@ -80,7 +78,7 @@ void Dbtup::do_tup_abortreq(Signal* signal, Uint32 flags)
(trans_state == TRANS_ERROR_WAIT_TUPKEYREQ) || (trans_state == TRANS_ERROR_WAIT_TUPKEYREQ) ||
(trans_state == TRANS_IDLE)); (trans_state == TRANS_IDLE));
if (regOperPtr.p->op_struct.op_type == ZREAD) { if (regOperPtr.p->op_struct.op_type == ZREAD) {
ljam(); jam();
freeAllAttrBuffers(regOperPtr.p); freeAllAttrBuffers(regOperPtr.p);
initOpConnection(regOperPtr.p); initOpConnection(regOperPtr.p);
return; return;
...@@ -94,7 +92,7 @@ void Dbtup::do_tup_abortreq(Signal* signal, Uint32 flags) ...@@ -94,7 +92,7 @@ void Dbtup::do_tup_abortreq(Signal* signal, Uint32 flags)
if (get_tuple_state(regOperPtr.p) == TUPLE_PREPARED) if (get_tuple_state(regOperPtr.p) == TUPLE_PREPARED)
{ {
ljam(); jam();
if (!regTabPtr.p->tuxCustomTriggers.isEmpty() && if (!regTabPtr.p->tuxCustomTriggers.isEmpty() &&
(flags & ZSKIP_TUX_TRIGGERS) == 0) (flags & ZSKIP_TUX_TRIGGERS) == 0)
executeTuxAbortTriggers(signal, executeTuxAbortTriggers(signal,
...@@ -105,12 +103,12 @@ void Dbtup::do_tup_abortreq(Signal* signal, Uint32 flags) ...@@ -105,12 +103,12 @@ void Dbtup::do_tup_abortreq(Signal* signal, Uint32 flags)
OperationrecPtr loopOpPtr; OperationrecPtr loopOpPtr;
loopOpPtr.i = regOperPtr.p->nextActiveOp; loopOpPtr.i = regOperPtr.p->nextActiveOp;
while (loopOpPtr.i != RNIL) { while (loopOpPtr.i != RNIL) {
ljam(); jam();
c_operation_pool.getPtr(loopOpPtr); c_operation_pool.getPtr(loopOpPtr);
if (get_tuple_state(loopOpPtr.p) != TUPLE_ALREADY_ABORTED && if (get_tuple_state(loopOpPtr.p) != TUPLE_ALREADY_ABORTED &&
!regTabPtr.p->tuxCustomTriggers.isEmpty() && !regTabPtr.p->tuxCustomTriggers.isEmpty() &&
(flags & ZSKIP_TUX_TRIGGERS) == 0) { (flags & ZSKIP_TUX_TRIGGERS) == 0) {
ljam(); jam();
executeTuxAbortTriggers(signal, executeTuxAbortTriggers(signal,
loopOpPtr.p, loopOpPtr.p,
regFragPtr.p, regFragPtr.p,
...@@ -211,116 +209,116 @@ int Dbtup::TUPKEY_abort(Signal* signal, int error_type) ...@@ -211,116 +209,116 @@ int Dbtup::TUPKEY_abort(Signal* signal, int error_type)
case 1: case 1:
//tmupdate_alloc_error: //tmupdate_alloc_error:
terrorCode= ZMEM_NOMEM_ERROR; terrorCode= ZMEM_NOMEM_ERROR;
ljam(); jam();
break; break;
case 15: case 15:
ljam(); jam();
terrorCode = ZREGISTER_INIT_ERROR; terrorCode = ZREGISTER_INIT_ERROR;
break; break;
case 16: case 16:
ljam(); jam();
terrorCode = ZTRY_TO_UPDATE_ERROR; terrorCode = ZTRY_TO_UPDATE_ERROR;
break; break;
case 17: case 17:
ljam(); jam();
terrorCode = ZNO_ILLEGAL_NULL_ATTR; terrorCode = ZNO_ILLEGAL_NULL_ATTR;
break; break;
case 19: case 19:
ljam(); jam();
terrorCode = ZTRY_TO_UPDATE_ERROR; terrorCode = ZTRY_TO_UPDATE_ERROR;
break; break;
case 20: case 20:
ljam(); jam();
terrorCode = ZREGISTER_INIT_ERROR; terrorCode = ZREGISTER_INIT_ERROR;
break; break;
case 22: case 22:
ljam(); jam();
terrorCode = ZTOTAL_LEN_ERROR; terrorCode = ZTOTAL_LEN_ERROR;
break; break;
case 23: case 23:
ljam(); jam();
terrorCode = ZREGISTER_INIT_ERROR; terrorCode = ZREGISTER_INIT_ERROR;
break; break;
case 24: case 24:
ljam(); jam();
terrorCode = ZREGISTER_INIT_ERROR; terrorCode = ZREGISTER_INIT_ERROR;
break; break;
case 26: case 26:
ljam(); jam();
terrorCode = ZREGISTER_INIT_ERROR; terrorCode = ZREGISTER_INIT_ERROR;
break; break;
case 27: case 27:
ljam(); jam();
terrorCode = ZREGISTER_INIT_ERROR; terrorCode = ZREGISTER_INIT_ERROR;
break; break;
case 28: case 28:
ljam(); jam();
terrorCode = ZREGISTER_INIT_ERROR; terrorCode = ZREGISTER_INIT_ERROR;
break; break;
case 29: case 29:
ljam(); jam();
break; break;
case 30: case 30:
ljam(); jam();
terrorCode = ZCALL_ERROR; terrorCode = ZCALL_ERROR;
break; break;
case 31: case 31:
ljam(); jam();
terrorCode = ZSTACK_OVERFLOW_ERROR; terrorCode = ZSTACK_OVERFLOW_ERROR;
break; break;
case 32: case 32:
ljam(); jam();
terrorCode = ZSTACK_UNDERFLOW_ERROR; terrorCode = ZSTACK_UNDERFLOW_ERROR;
break; break;
case 33: case 33:
ljam(); jam();
terrorCode = ZNO_INSTRUCTION_ERROR; terrorCode = ZNO_INSTRUCTION_ERROR;
break; break;
case 34: case 34:
ljam(); jam();
terrorCode = ZOUTSIDE_OF_PROGRAM_ERROR; terrorCode = ZOUTSIDE_OF_PROGRAM_ERROR;
break; break;
case 35: case 35:
ljam(); jam();
terrorCode = ZTOO_MANY_INSTRUCTIONS_ERROR; terrorCode = ZTOO_MANY_INSTRUCTIONS_ERROR;
break; break;
case 38: case 38:
ljam(); jam();
terrorCode = ZTEMPORARY_RESOURCE_FAILURE; terrorCode = ZTEMPORARY_RESOURCE_FAILURE;
break; break;
case 39: case 39:
if (get_trans_state(operPtr.p) == TRANS_TOO_MUCH_AI) { if (get_trans_state(operPtr.p) == TRANS_TOO_MUCH_AI) {
ljam(); jam();
terrorCode = ZTOO_MUCH_ATTRINFO_ERROR; terrorCode = ZTOO_MUCH_ATTRINFO_ERROR;
} else if (get_trans_state(operPtr.p) == TRANS_ERROR_WAIT_TUPKEYREQ) { } else if (get_trans_state(operPtr.p) == TRANS_ERROR_WAIT_TUPKEYREQ) {
ljam(); jam();
terrorCode = ZSEIZE_ATTRINBUFREC_ERROR; terrorCode = ZSEIZE_ATTRINBUFREC_ERROR;
} else { } else {
ndbrequire(false); ndbrequire(false);
}//if }//if
break; break;
case 40: case 40:
ljam(); jam();
terrorCode = ZUNSUPPORTED_BRANCH; terrorCode = ZUNSUPPORTED_BRANCH;
break; break;
default: default:
......
...@@ -14,28 +14,26 @@ ...@@ -14,28 +14,26 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#define DBTUP_C #define DBTUP_C
#define DBTUP_BUFFER_CPP
#include "Dbtup.hpp" #include "Dbtup.hpp"
#include <RefConvert.hpp> #include <RefConvert.hpp>
#include <ndb_limits.h> #include <ndb_limits.h>
#include <pc.hpp> #include <pc.hpp>
#include <signaldata/TransIdAI.hpp> #include <signaldata/TransIdAI.hpp>
#define ljam() { jamLine(2000 + __LINE__); }
#define ljamEntry() { jamEntryLine(2000 + __LINE__); }
void Dbtup::execSEND_PACKED(Signal* signal) void Dbtup::execSEND_PACKED(Signal* signal)
{ {
Uint16 hostId; Uint16 hostId;
Uint32 i; Uint32 i;
Uint32 TpackedListIndex= cpackedListIndex; Uint32 TpackedListIndex= cpackedListIndex;
ljamEntry(); jamEntry();
for (i= 0; i < TpackedListIndex; i++) { for (i= 0; i < TpackedListIndex; i++) {
ljam(); jam();
hostId= cpackedList[i]; hostId= cpackedList[i];
ndbrequire((hostId - 1) < (MAX_NODES - 1)); // Also check not zero ndbrequire((hostId - 1) < (MAX_NODES - 1)); // Also check not zero
Uint32 TpacketTA= hostBuffer[hostId].noOfPacketsTA; Uint32 TpacketTA= hostBuffer[hostId].noOfPacketsTA;
if (TpacketTA != 0) { if (TpacketTA != 0) {
ljam(); jam();
BlockReference TBref= numberToRef(API_PACKED, hostId); BlockReference TBref= numberToRef(API_PACKED, hostId);
Uint32 TpacketLen= hostBuffer[hostId].packetLenTA; Uint32 TpacketLen= hostBuffer[hostId].packetLenTA;
MEMCOPY_NO_WORDS(&signal->theData[0], MEMCOPY_NO_WORDS(&signal->theData[0],
...@@ -73,7 +71,7 @@ void Dbtup::bufferTRANSID_AI(Signal* signal, BlockReference aRef, ...@@ -73,7 +71,7 @@ void Dbtup::bufferTRANSID_AI(Signal* signal, BlockReference aRef,
// There is still space in the buffer. We will copy it into the // There is still space in the buffer. We will copy it into the
// buffer. // buffer.
// ---------------------------------------------------------------- // ----------------------------------------------------------------
ljam(); jam();
updatePackedList(signal, hostId); updatePackedList(signal, hostId);
} else if (false && TnoOfPackets == 1) { } else if (false && TnoOfPackets == 1) {
// ---------------------------------------------------------------- // ----------------------------------------------------------------
...@@ -118,7 +116,7 @@ void Dbtup::updatePackedList(Signal* signal, Uint16 hostId) ...@@ -118,7 +116,7 @@ void Dbtup::updatePackedList(Signal* signal, Uint16 hostId)
{ {
if (hostBuffer[hostId].inPackedList == false) { if (hostBuffer[hostId].inPackedList == false) {
Uint32 TpackedListIndex= cpackedListIndex; Uint32 TpackedListIndex= cpackedListIndex;
ljam(); jam();
hostBuffer[hostId].inPackedList= true; hostBuffer[hostId].inPackedList= true;
cpackedList[TpackedListIndex]= hostId; cpackedList[TpackedListIndex]= hostId;
cpackedListIndex= TpackedListIndex + 1; cpackedListIndex= TpackedListIndex + 1;
...@@ -149,7 +147,7 @@ void Dbtup::sendReadAttrinfo(Signal* signal, ...@@ -149,7 +147,7 @@ void Dbtup::sendReadAttrinfo(Signal* signal,
if (ERROR_INSERTED(4006) && (nodeId != getOwnNodeId())){ if (ERROR_INSERTED(4006) && (nodeId != getOwnNodeId())){
// Use error insert to turn routing on // Use error insert to turn routing on
ljam(); jam();
connectedToNode= false; connectedToNode= false;
} }
...@@ -167,18 +165,18 @@ void Dbtup::sendReadAttrinfo(Signal* signal, ...@@ -167,18 +165,18 @@ void Dbtup::sendReadAttrinfo(Signal* signal,
* Own node -> execute direct * Own node -> execute direct
*/ */
if(nodeId != getOwnNodeId()){ if(nodeId != getOwnNodeId()){
ljam(); jam();
/** /**
* Send long sig * Send long sig
*/ */
if (ToutBufIndex >= 22 && is_api && !old_dest) { if (ToutBufIndex >= 22 && is_api && !old_dest) {
ljam(); jam();
/** /**
* Flush buffer so that order is maintained * Flush buffer so that order is maintained
*/ */
if (TpacketTA != 0) { if (TpacketTA != 0) {
ljam(); jam();
BlockReference TBref = numberToRef(API_PACKED, nodeId); BlockReference TBref = numberToRef(API_PACKED, nodeId);
MEMCOPY_NO_WORDS(&signal->theData[0], MEMCOPY_NO_WORDS(&signal->theData[0],
&hostBuffer[nodeId].packetBufferTA[0], &hostBuffer[nodeId].packetBufferTA[0],
...@@ -202,7 +200,7 @@ void Dbtup::sendReadAttrinfo(Signal* signal, ...@@ -202,7 +200,7 @@ void Dbtup::sendReadAttrinfo(Signal* signal,
*/ */
#ifndef NDB_NO_DROPPED_SIGNAL #ifndef NDB_NO_DROPPED_SIGNAL
if (ToutBufIndex < 22 && is_api){ if (ToutBufIndex < 22 && is_api){
ljam(); jam();
bufferTRANSID_AI(signal, recBlockref, 3+ToutBufIndex); bufferTRANSID_AI(signal, recBlockref, 3+ToutBufIndex);
return; return;
} }
...@@ -214,7 +212,7 @@ void Dbtup::sendReadAttrinfo(Signal* signal, ...@@ -214,7 +212,7 @@ void Dbtup::sendReadAttrinfo(Signal* signal,
Uint32 * src= signal->theData+25; Uint32 * src= signal->theData+25;
if (ToutBufIndex >= 22){ if (ToutBufIndex >= 22){
do { do {
ljam(); jam();
MEMCOPY_NO_WORDS(&signal->theData[3], src, 22); MEMCOPY_NO_WORDS(&signal->theData[3], src, 22);
sendSignal(recBlockref, GSN_TRANSID_AI, signal, 25, JBB); sendSignal(recBlockref, GSN_TRANSID_AI, signal, 25, JBB);
ToutBufIndex -= 22; ToutBufIndex -= 22;
...@@ -223,14 +221,14 @@ void Dbtup::sendReadAttrinfo(Signal* signal, ...@@ -223,14 +221,14 @@ void Dbtup::sendReadAttrinfo(Signal* signal,
} }
if (ToutBufIndex > 0){ if (ToutBufIndex > 0){
ljam(); jam();
MEMCOPY_NO_WORDS(&signal->theData[3], src, ToutBufIndex); MEMCOPY_NO_WORDS(&signal->theData[3], src, ToutBufIndex);
sendSignal(recBlockref, GSN_TRANSID_AI, signal, 3+ToutBufIndex, JBB); sendSignal(recBlockref, GSN_TRANSID_AI, signal, 3+ToutBufIndex, JBB);
} }
return; return;
} }
EXECUTE_DIRECT(block, GSN_TRANSID_AI, signal, 3 + ToutBufIndex); EXECUTE_DIRECT(block, GSN_TRANSID_AI, signal, 3 + ToutBufIndex);
ljamEntry(); jamEntry();
return; return;
} }
...@@ -242,7 +240,7 @@ void Dbtup::sendReadAttrinfo(Signal* signal, ...@@ -242,7 +240,7 @@ void Dbtup::sendReadAttrinfo(Signal* signal,
Uint32 routeBlockref= req_struct->TC_ref; Uint32 routeBlockref= req_struct->TC_ref;
if (true){ // TODO is_api && !old_dest){ if (true){ // TODO is_api && !old_dest){
ljam(); jam();
transIdAI->attrData[0]= recBlockref; transIdAI->attrData[0]= recBlockref;
LinearSectionPtr ptr[3]; LinearSectionPtr ptr[3];
ptr[0].p= &signal->theData[25]; ptr[0].p= &signal->theData[25];
...@@ -260,7 +258,7 @@ void Dbtup::sendReadAttrinfo(Signal* signal, ...@@ -260,7 +258,7 @@ void Dbtup::sendReadAttrinfo(Signal* signal,
Uint32 sent= 0; Uint32 sent= 0;
Uint32 maxLen= TransIdAI::DataLength - 1; Uint32 maxLen= TransIdAI::DataLength - 1;
while (sent < tot) { while (sent < tot) {
ljam(); jam();
Uint32 dataLen= (tot - sent > maxLen) ? maxLen : tot - sent; Uint32 dataLen= (tot - sent > maxLen) ? maxLen : tot - sent;
Uint32 sigLen= dataLen + TransIdAI::HeaderLength + 1; Uint32 sigLen= dataLen + TransIdAI::HeaderLength + 1;
MEMCOPY_NO_WORDS(&transIdAI->attrData, MEMCOPY_NO_WORDS(&transIdAI->attrData,
......
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#define DBTUP_C #define DBTUP_C
#define DBTUP_COMMIT_CPP
#include "Dbtup.hpp" #include "Dbtup.hpp"
#include <RefConvert.hpp> #include <RefConvert.hpp>
#include <ndb_limits.h> #include <ndb_limits.h>
...@@ -21,16 +22,13 @@ ...@@ -21,16 +22,13 @@
#include <signaldata/TupCommit.hpp> #include <signaldata/TupCommit.hpp>
#include "../dblqh/Dblqh.hpp" #include "../dblqh/Dblqh.hpp"
#define ljam() { jamLine(5000 + __LINE__); }
#define ljamEntry() { jamEntryLine(5000 + __LINE__); }
void Dbtup::execTUP_DEALLOCREQ(Signal* signal) void Dbtup::execTUP_DEALLOCREQ(Signal* signal)
{ {
TablerecPtr regTabPtr; TablerecPtr regTabPtr;
FragrecordPtr regFragPtr; FragrecordPtr regFragPtr;
Uint32 frag_page_id, frag_id; Uint32 frag_page_id, frag_id;
ljamEntry(); jamEntry();
frag_id= signal->theData[0]; frag_id= signal->theData[0];
regTabPtr.i= signal->theData[1]; regTabPtr.i= signal->theData[1];
...@@ -62,7 +60,7 @@ void Dbtup::execTUP_DEALLOCREQ(Signal* signal) ...@@ -62,7 +60,7 @@ void Dbtup::execTUP_DEALLOCREQ(Signal* signal)
if (regTabPtr.p->m_attributes[MM].m_no_of_varsize) if (regTabPtr.p->m_attributes[MM].m_no_of_varsize)
{ {
ljam(); jam();
free_var_rec(regFragPtr.p, regTabPtr.p, &tmp, pagePtr); free_var_rec(regFragPtr.p, regTabPtr.p, &tmp, pagePtr);
} else { } else {
free_fix_rec(regFragPtr.p, regTabPtr.p, &tmp, (Fix_page*)pagePtr.p); free_fix_rec(regFragPtr.p, regTabPtr.p, &tmp, (Fix_page*)pagePtr.p);
...@@ -78,7 +76,7 @@ void Dbtup::execTUP_WRITELOG_REQ(Signal* signal) ...@@ -78,7 +76,7 @@ void Dbtup::execTUP_WRITELOG_REQ(Signal* signal)
Uint32 gci= signal->theData[1]; Uint32 gci= signal->theData[1];
c_operation_pool.getPtr(loopOpPtr); c_operation_pool.getPtr(loopOpPtr);
while (loopOpPtr.p->prevActiveOp != RNIL) { while (loopOpPtr.p->prevActiveOp != RNIL) {
ljam(); jam();
loopOpPtr.i= loopOpPtr.p->prevActiveOp; loopOpPtr.i= loopOpPtr.p->prevActiveOp;
c_operation_pool.getPtr(loopOpPtr); c_operation_pool.getPtr(loopOpPtr);
} }
...@@ -87,11 +85,11 @@ void Dbtup::execTUP_WRITELOG_REQ(Signal* signal) ...@@ -87,11 +85,11 @@ void Dbtup::execTUP_WRITELOG_REQ(Signal* signal)
signal->theData[0]= loopOpPtr.p->userpointer; signal->theData[0]= loopOpPtr.p->userpointer;
signal->theData[1]= gci; signal->theData[1]= gci;
if (loopOpPtr.p->nextActiveOp == RNIL) { if (loopOpPtr.p->nextActiveOp == RNIL) {
ljam(); jam();
EXECUTE_DIRECT(DBLQH, GSN_LQH_WRITELOG_REQ, signal, 2); EXECUTE_DIRECT(DBLQH, GSN_LQH_WRITELOG_REQ, signal, 2);
return; return;
} }
ljam(); jam();
EXECUTE_DIRECT(DBLQH, GSN_LQH_WRITELOG_REQ, signal, 2); EXECUTE_DIRECT(DBLQH, GSN_LQH_WRITELOG_REQ, signal, 2);
jamEntry(); jamEntry();
loopOpPtr.i= loopOpPtr.p->nextActiveOp; loopOpPtr.i= loopOpPtr.p->nextActiveOp;
...@@ -114,16 +112,16 @@ void Dbtup::removeActiveOpList(Operationrec* const regOperPtr, ...@@ -114,16 +112,16 @@ void Dbtup::removeActiveOpList(Operationrec* const regOperPtr,
if (regOperPtr->op_struct.in_active_list) { if (regOperPtr->op_struct.in_active_list) {
regOperPtr->op_struct.in_active_list= false; regOperPtr->op_struct.in_active_list= false;
if (regOperPtr->nextActiveOp != RNIL) { if (regOperPtr->nextActiveOp != RNIL) {
ljam(); jam();
raoOperPtr.i= regOperPtr->nextActiveOp; raoOperPtr.i= regOperPtr->nextActiveOp;
c_operation_pool.getPtr(raoOperPtr); c_operation_pool.getPtr(raoOperPtr);
raoOperPtr.p->prevActiveOp= regOperPtr->prevActiveOp; raoOperPtr.p->prevActiveOp= regOperPtr->prevActiveOp;
} else { } else {
ljam(); jam();
tuple_ptr->m_operation_ptr_i = regOperPtr->prevActiveOp; tuple_ptr->m_operation_ptr_i = regOperPtr->prevActiveOp;
} }
if (regOperPtr->prevActiveOp != RNIL) { if (regOperPtr->prevActiveOp != RNIL) {
ljam(); jam();
raoOperPtr.i= regOperPtr->prevActiveOp; raoOperPtr.i= regOperPtr->prevActiveOp;
c_operation_pool.getPtr(raoOperPtr); c_operation_pool.getPtr(raoOperPtr);
raoOperPtr.p->nextActiveOp= regOperPtr->nextActiveOp; raoOperPtr.p->nextActiveOp= regOperPtr->nextActiveOp;
...@@ -343,7 +341,7 @@ Dbtup::disk_page_commit_callback(Signal* signal, ...@@ -343,7 +341,7 @@ Dbtup::disk_page_commit_callback(Signal* signal,
Uint32 gci; Uint32 gci;
OperationrecPtr regOperPtr; OperationrecPtr regOperPtr;
ljamEntry(); jamEntry();
c_operation_pool.getPtr(regOperPtr, opPtrI); c_operation_pool.getPtr(regOperPtr, opPtrI);
c_lqh->get_op_info(regOperPtr.p->userpointer, &hash_value, &gci); c_lqh->get_op_info(regOperPtr.p->userpointer, &hash_value, &gci);
...@@ -379,7 +377,7 @@ Dbtup::disk_page_log_buffer_callback(Signal* signal, ...@@ -379,7 +377,7 @@ Dbtup::disk_page_log_buffer_callback(Signal* signal,
Uint32 gci; Uint32 gci;
OperationrecPtr regOperPtr; OperationrecPtr regOperPtr;
ljamEntry(); jamEntry();
c_operation_pool.getPtr(regOperPtr, opPtrI); c_operation_pool.getPtr(regOperPtr, opPtrI);
c_lqh->get_op_info(regOperPtr.p->userpointer, &hash_value, &gci); c_lqh->get_op_info(regOperPtr.p->userpointer, &hash_value, &gci);
...@@ -447,7 +445,7 @@ void Dbtup::execTUP_COMMITREQ(Signal* signal) ...@@ -447,7 +445,7 @@ void Dbtup::execTUP_COMMITREQ(Signal* signal)
TupCommitReq * const tupCommitReq= (TupCommitReq *)signal->getDataPtr(); TupCommitReq * const tupCommitReq= (TupCommitReq *)signal->getDataPtr();
regOperPtr.i= tupCommitReq->opPtr; regOperPtr.i= tupCommitReq->opPtr;
ljamEntry(); jamEntry();
c_operation_pool.getPtr(regOperPtr); c_operation_pool.getPtr(regOperPtr);
if(!regOperPtr.p->is_first_operation()) if(!regOperPtr.p->is_first_operation())
...@@ -603,7 +601,7 @@ skip_disk: ...@@ -603,7 +601,7 @@ skip_disk:
* why can't we instead remove "own version" (when approriate ofcourse) * why can't we instead remove "own version" (when approriate ofcourse)
*/ */
if (!regTabPtr.p->tuxCustomTriggers.isEmpty()) { if (!regTabPtr.p->tuxCustomTriggers.isEmpty()) {
ljam(); jam();
OperationrecPtr loopPtr= regOperPtr; OperationrecPtr loopPtr= regOperPtr;
while(loopPtr.i != RNIL) while(loopPtr.i != RNIL)
{ {
...@@ -656,18 +654,18 @@ Dbtup::set_change_mask_info(KeyReqStruct * const req_struct, ...@@ -656,18 +654,18 @@ Dbtup::set_change_mask_info(KeyReqStruct * const req_struct,
{ {
ChangeMaskState state = get_change_mask_state(regOperPtr); ChangeMaskState state = get_change_mask_state(regOperPtr);
if (state == USE_SAVED_CHANGE_MASK) { if (state == USE_SAVED_CHANGE_MASK) {
ljam(); jam();
req_struct->changeMask.setWord(0, regOperPtr->saved_change_mask[0]); req_struct->changeMask.setWord(0, regOperPtr->saved_change_mask[0]);
req_struct->changeMask.setWord(1, regOperPtr->saved_change_mask[1]); req_struct->changeMask.setWord(1, regOperPtr->saved_change_mask[1]);
} else if (state == RECALCULATE_CHANGE_MASK) { } else if (state == RECALCULATE_CHANGE_MASK) {
ljam(); jam();
// Recompute change mask, for now set all bits // Recompute change mask, for now set all bits
req_struct->changeMask.set(); req_struct->changeMask.set();
} else if (state == SET_ALL_MASK) { } else if (state == SET_ALL_MASK) {
ljam(); jam();
req_struct->changeMask.set(); req_struct->changeMask.set();
} else { } else {
ljam(); jam();
ndbrequire(state == DELETE_CHANGES); ndbrequire(state == DELETE_CHANGES);
req_struct->changeMask.set(); req_struct->changeMask.set();
} }
...@@ -687,17 +685,17 @@ Dbtup::calculateChangeMask(Page* const pagePtr, ...@@ -687,17 +685,17 @@ Dbtup::calculateChangeMask(Page* const pagePtr,
ndbrequire(loopOpPtr.p->op_struct.op_type == ZUPDATE); ndbrequire(loopOpPtr.p->op_struct.op_type == ZUPDATE);
ChangeMaskState change_mask= get_change_mask_state(loopOpPtr.p); ChangeMaskState change_mask= get_change_mask_state(loopOpPtr.p);
if (change_mask == USE_SAVED_CHANGE_MASK) { if (change_mask == USE_SAVED_CHANGE_MASK) {
ljam(); jam();
saved_word1|= loopOpPtr.p->saved_change_mask[0]; saved_word1|= loopOpPtr.p->saved_change_mask[0];
saved_word2|= loopOpPtr.p->saved_change_mask[1]; saved_word2|= loopOpPtr.p->saved_change_mask[1];
} else if (change_mask == RECALCULATE_CHANGE_MASK) { } else if (change_mask == RECALCULATE_CHANGE_MASK) {
ljam(); jam();
//Recompute change mask, for now set all bits //Recompute change mask, for now set all bits
req_struct->changeMask.set(); req_struct->changeMask.set();
return; return;
} else { } else {
ndbrequire(change_mask == SET_ALL_MASK); ndbrequire(change_mask == SET_ALL_MASK);
ljam(); jam();
req_struct->changeMask.set(); req_struct->changeMask.set();
return; return;
} }
......
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
#define DBTUP_C #define DBTUP_C
#define DBTUP_DEBUG_CPP
#include "Dbtup.hpp" #include "Dbtup.hpp"
#include <RefConvert.hpp> #include <RefConvert.hpp>
#include <ndb_limits.h> #include <ndb_limits.h>
...@@ -24,9 +25,6 @@ ...@@ -24,9 +25,6 @@
#include <signaldata/EventReport.hpp> #include <signaldata/EventReport.hpp>
#include <Vector.hpp> #include <Vector.hpp>
#define ljam() { jamLine(30000 + __LINE__); }
#define ljamEntry() { jamEntryLine(30000 + __LINE__); }
/* **************************************************************** */ /* **************************************************************** */
/* ---------------------------------------------------------------- */ /* ---------------------------------------------------------------- */
/* ------------------------ DEBUG MODULE -------------------------- */ /* ------------------------ DEBUG MODULE -------------------------- */
...@@ -35,7 +33,7 @@ ...@@ -35,7 +33,7 @@
void Dbtup::execDEBUG_SIG(Signal* signal) void Dbtup::execDEBUG_SIG(Signal* signal)
{ {
PagePtr regPagePtr; PagePtr regPagePtr;
ljamEntry(); jamEntry();
regPagePtr.i = signal->theData[0]; regPagePtr.i = signal->theData[0];
c_page_pool.getPtr(regPagePtr); c_page_pool.getPtr(regPagePtr);
}//Dbtup::execDEBUG_SIG() }//Dbtup::execDEBUG_SIG()
...@@ -248,18 +246,18 @@ void Dbtup::execMEMCHECKREQ(Signal* signal) ...@@ -248,18 +246,18 @@ void Dbtup::execMEMCHECKREQ(Signal* signal)
PagePtr regPagePtr; PagePtr regPagePtr;
Uint32* data = &signal->theData[0]; Uint32* data = &signal->theData[0];
ljamEntry(); jamEntry();
BlockReference blockref = signal->theData[0]; BlockReference blockref = signal->theData[0];
Uint32 i; Uint32 i;
for (i = 0; i < 25; i++) { for (i = 0; i < 25; i++) {
ljam(); jam();
data[i] = 0; data[i] = 0;
}//for }//for
for (i = 0; i < 16; i++) { for (i = 0; i < 16; i++) {
regPagePtr.i = cfreepageList[i]; regPagePtr.i = cfreepageList[i];
ljam(); jam();
while (regPagePtr.i != RNIL) { while (regPagePtr.i != RNIL) {
ljam(); jam();
ptrCheckGuard(regPagePtr, cnoOfPage, cpage); ptrCheckGuard(regPagePtr, cnoOfPage, cpage);
regPagePtr.i = regPagePtr.p->next_page; regPagePtr.i = regPagePtr.p->next_page;
data[0]++; data[0]++;
......
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#define DBTUP_C #define DBTUP_C
#define DBTUP_DISK_ALLOC_CPP
#include "Dbtup.hpp" #include "Dbtup.hpp"
static bool f_undo_done = true; static bool f_undo_done = true;
......
...@@ -14,14 +14,12 @@ ...@@ -14,14 +14,12 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#define DBTUP_C #define DBTUP_C
#define DBTUP_FIXALLOC_CPP
#include "Dbtup.hpp" #include "Dbtup.hpp"
#include <RefConvert.hpp> #include <RefConvert.hpp>
#include <ndb_limits.h> #include <ndb_limits.h>
#include <pc.hpp> #include <pc.hpp>
#define ljam() { jamLine(6000 + __LINE__); }
#define ljamEntry() { jamEntryLine(6000 + __LINE__); }
// //
// Fixed Allocator // Fixed Allocator
// This module is used to allocate and free fixed size tuples from the // This module is used to allocate and free fixed size tuples from the
...@@ -79,7 +77,7 @@ Dbtup::alloc_fix_rec(Fragrecord* const regFragPtr, ...@@ -79,7 +77,7 @@ Dbtup::alloc_fix_rec(Fragrecord* const regFragPtr,
/* ---------------------------------------------------------------- */ /* ---------------------------------------------------------------- */
pagePtr.i = getEmptyPage(regFragPtr); pagePtr.i = getEmptyPage(regFragPtr);
if (pagePtr.i != RNIL) { if (pagePtr.i != RNIL) {
ljam(); jam();
/* ---------------------------------------------------------------- */ /* ---------------------------------------------------------------- */
// We found empty pages on the fragment. Allocate an empty page and // We found empty pages on the fragment. Allocate an empty page and
// convert it into a tuple header page and put it in thFreeFirst-list. // convert it into a tuple header page and put it in thFreeFirst-list.
...@@ -95,14 +93,14 @@ Dbtup::alloc_fix_rec(Fragrecord* const regFragPtr, ...@@ -95,14 +93,14 @@ Dbtup::alloc_fix_rec(Fragrecord* const regFragPtr,
LocalDLList<Page> free_pages(c_page_pool, regFragPtr->thFreeFirst); LocalDLList<Page> free_pages(c_page_pool, regFragPtr->thFreeFirst);
free_pages.add(pagePtr); free_pages.add(pagePtr);
} else { } else {
ljam(); jam();
/* ---------------------------------------------------------------- */ /* ---------------------------------------------------------------- */
/* THERE ARE NO EMPTY PAGES. MEMORY CAN NOT BE ALLOCATED. */ /* THERE ARE NO EMPTY PAGES. MEMORY CAN NOT BE ALLOCATED. */
/* ---------------------------------------------------------------- */ /* ---------------------------------------------------------------- */
return 0; return 0;
} }
} else { } else {
ljam(); jam();
/* ---------------------------------------------------------------- */ /* ---------------------------------------------------------------- */
/* THIS SHOULD BE THE COMMON PATH THROUGH THE CODE, FREE */ /* THIS SHOULD BE THE COMMON PATH THROUGH THE CODE, FREE */
/* COPY PAGE EXISTED. */ /* COPY PAGE EXISTED. */
...@@ -194,7 +192,7 @@ void Dbtup::free_fix_rec(Fragrecord* regFragPtr, ...@@ -194,7 +192,7 @@ void Dbtup::free_fix_rec(Fragrecord* regFragPtr,
if(free == 1) if(free == 1)
{ {
ljam(); jam();
PagePtr pagePtr = { (Page*)regPagePtr, key->m_page_no }; PagePtr pagePtr = { (Page*)regPagePtr, key->m_page_no };
LocalDLList<Page> free_pages(c_page_pool, regFragPtr->thFreeFirst); LocalDLList<Page> free_pages(c_page_pool, regFragPtr->thFreeFirst);
ndbrequire(regPagePtr->page_state == ZTH_MM_FULL); ndbrequire(regPagePtr->page_state == ZTH_MM_FULL);
......
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
#define DBTUP_C #define DBTUP_C
#define DBTUP_GEN_CPP
#include "Dbtup.hpp" #include "Dbtup.hpp"
#include <RefConvert.hpp> #include <RefConvert.hpp>
#include <ndb_limits.h> #include <ndb_limits.h>
...@@ -34,9 +35,6 @@ ...@@ -34,9 +35,6 @@
#define DEBUG(x) { ndbout << "TUP::" << x << endl; } #define DEBUG(x) { ndbout << "TUP::" << x << endl; }
#define ljam() { jamLine(24000 + __LINE__); }
#define ljamEntry() { jamEntryLine(24000 + __LINE__); }
void Dbtup::initData() void Dbtup::initData()
{ {
cnoOfAttrbufrec = ZNO_OF_ATTRBUFREC; cnoOfAttrbufrec = ZNO_OF_ATTRBUFREC;
...@@ -152,21 +150,21 @@ BLOCK_FUNCTIONS(Dbtup) ...@@ -152,21 +150,21 @@ BLOCK_FUNCTIONS(Dbtup)
void Dbtup::execCONTINUEB(Signal* signal) void Dbtup::execCONTINUEB(Signal* signal)
{ {
ljamEntry(); jamEntry();
Uint32 actionType = signal->theData[0]; Uint32 actionType = signal->theData[0];
Uint32 dataPtr = signal->theData[1]; Uint32 dataPtr = signal->theData[1];
switch (actionType) { switch (actionType) {
case ZINITIALISE_RECORDS: case ZINITIALISE_RECORDS:
ljam(); jam();
initialiseRecordsLab(signal, dataPtr, initialiseRecordsLab(signal, dataPtr,
signal->theData[2], signal->theData[3]); signal->theData[2], signal->theData[3]);
break; break;
case ZREL_FRAG: case ZREL_FRAG:
ljam(); jam();
releaseFragment(signal, dataPtr, signal->theData[2]); releaseFragment(signal, dataPtr, signal->theData[2]);
break; break;
case ZREPORT_MEMORY_USAGE:{ case ZREPORT_MEMORY_USAGE:{
ljam(); jam();
static int c_currentMemUsed = 0; static int c_currentMemUsed = 0;
Uint32 cnt = signal->theData[1]; Uint32 cnt = signal->theData[1];
Uint32 tmp = c_page_pool.getSize(); Uint32 tmp = c_page_pool.getSize();
...@@ -201,11 +199,11 @@ void Dbtup::execCONTINUEB(Signal* signal) ...@@ -201,11 +199,11 @@ void Dbtup::execCONTINUEB(Signal* signal)
return; return;
} }
case ZBUILD_INDEX: case ZBUILD_INDEX:
ljam(); jam();
buildIndex(signal, dataPtr); buildIndex(signal, dataPtr);
break; break;
case ZTUP_SCAN: case ZTUP_SCAN:
ljam(); jam();
{ {
ScanOpPtr scanPtr; ScanOpPtr scanPtr;
c_scanOpPool.getPtr(scanPtr, dataPtr); c_scanOpPool.getPtr(scanPtr, dataPtr);
...@@ -214,7 +212,7 @@ void Dbtup::execCONTINUEB(Signal* signal) ...@@ -214,7 +212,7 @@ void Dbtup::execCONTINUEB(Signal* signal)
return; return;
case ZFREE_EXTENT: case ZFREE_EXTENT:
{ {
ljam(); jam();
TablerecPtr tabPtr; TablerecPtr tabPtr;
tabPtr.i= dataPtr; tabPtr.i= dataPtr;
...@@ -227,7 +225,7 @@ void Dbtup::execCONTINUEB(Signal* signal) ...@@ -227,7 +225,7 @@ void Dbtup::execCONTINUEB(Signal* signal)
} }
case ZUNMAP_PAGES: case ZUNMAP_PAGES:
{ {
ljam(); jam();
TablerecPtr tabPtr; TablerecPtr tabPtr;
tabPtr.i= dataPtr; tabPtr.i= dataPtr;
...@@ -240,7 +238,7 @@ void Dbtup::execCONTINUEB(Signal* signal) ...@@ -240,7 +238,7 @@ void Dbtup::execCONTINUEB(Signal* signal)
} }
case ZFREE_VAR_PAGES: case ZFREE_VAR_PAGES:
{ {
ljam(); jam();
drop_fragment_free_var_pages(signal); drop_fragment_free_var_pages(signal);
return; return;
} }
...@@ -257,12 +255,12 @@ void Dbtup::execCONTINUEB(Signal* signal) ...@@ -257,12 +255,12 @@ void Dbtup::execCONTINUEB(Signal* signal)
/* **************************************************************** */ /* **************************************************************** */
void Dbtup::execSTTOR(Signal* signal) void Dbtup::execSTTOR(Signal* signal)
{ {
ljamEntry(); jamEntry();
Uint32 startPhase = signal->theData[1]; Uint32 startPhase = signal->theData[1];
Uint32 sigKey = signal->theData[6]; Uint32 sigKey = signal->theData[6];
switch (startPhase) { switch (startPhase) {
case ZSTARTPHASE1: case ZSTARTPHASE1:
ljam(); jam();
CLEAR_ERROR_INSERT_VALUE; CLEAR_ERROR_INSERT_VALUE;
ndbrequire((c_lqh= (Dblqh*)globalData.getBlock(DBLQH)) != 0); ndbrequire((c_lqh= (Dblqh*)globalData.getBlock(DBLQH)) != 0);
ndbrequire((c_tsman= (Tsman*)globalData.getBlock(TSMAN)) != 0); ndbrequire((c_tsman= (Tsman*)globalData.getBlock(TSMAN)) != 0);
...@@ -270,7 +268,7 @@ void Dbtup::execSTTOR(Signal* signal) ...@@ -270,7 +268,7 @@ void Dbtup::execSTTOR(Signal* signal)
cownref = calcTupBlockRef(0); cownref = calcTupBlockRef(0);
break; break;
default: default:
ljam(); jam();
break; break;
}//switch }//switch
signal->theData[0] = sigKey; signal->theData[0] = sigKey;
...@@ -293,7 +291,7 @@ void Dbtup::execREAD_CONFIG_REQ(Signal* signal) ...@@ -293,7 +291,7 @@ void Dbtup::execREAD_CONFIG_REQ(Signal* signal)
Uint32 senderData = req->senderData; Uint32 senderData = req->senderData;
ndbrequire(req->noOfParameters == 0); ndbrequire(req->noOfParameters == 0);
ljamEntry(); jamEntry();
const ndb_mgm_configuration_iterator * p = const ndb_mgm_configuration_iterator * p =
m_ctx.m_config.getOwnConfigIterator(); m_ctx.m_config.getOwnConfigIterator();
...@@ -413,58 +411,58 @@ void Dbtup::initialiseRecordsLab(Signal* signal, Uint32 switchData, ...@@ -413,58 +411,58 @@ void Dbtup::initialiseRecordsLab(Signal* signal, Uint32 switchData,
{ {
switch (switchData) { switch (switchData) {
case 0: case 0:
ljam(); jam();
initializeHostBuffer(); initializeHostBuffer();
break; break;
case 1: case 1:
ljam(); jam();
initializeOperationrec(); initializeOperationrec();
break; break;
case 2: case 2:
ljam(); jam();
initializePage(); initializePage();
break; break;
case 3: case 3:
ljam(); jam();
break; break;
case 4: case 4:
ljam(); jam();
initializeTablerec(); initializeTablerec();
break; break;
case 5: case 5:
ljam(); jam();
break; break;
case 6: case 6:
ljam(); jam();
initializeFragrecord(); initializeFragrecord();
break; break;
case 7: case 7:
ljam(); jam();
initializeFragoperrec(); initializeFragoperrec();
break; break;
case 8: case 8:
ljam(); jam();
initializePageRange(); initializePageRange();
break; break;
case 9: case 9:
ljam(); jam();
initializeTabDescr(); initializeTabDescr();
break; break;
case 10: case 10:
ljam(); jam();
break; break;
case 11: case 11:
ljam(); jam();
break; break;
case 12: case 12:
ljam(); jam();
initializeAttrbufrec(); initializeAttrbufrec();
break; break;
case 13: case 13:
ljam(); jam();
break; break;
case 14: case 14:
ljam(); jam();
{ {
ReadConfigConf * conf = (ReadConfigConf*)signal->getDataPtrSend(); ReadConfigConf * conf = (ReadConfigConf*)signal->getDataPtrSend();
...@@ -488,28 +486,28 @@ void Dbtup::initialiseRecordsLab(Signal* signal, Uint32 switchData, ...@@ -488,28 +486,28 @@ void Dbtup::initialiseRecordsLab(Signal* signal, Uint32 switchData,
void Dbtup::execNDB_STTOR(Signal* signal) void Dbtup::execNDB_STTOR(Signal* signal)
{ {
ljamEntry(); jamEntry();
cndbcntrRef = signal->theData[0]; cndbcntrRef = signal->theData[0];
Uint32 ownNodeId = signal->theData[1]; Uint32 ownNodeId = signal->theData[1];
Uint32 startPhase = signal->theData[2]; Uint32 startPhase = signal->theData[2];
switch (startPhase) { switch (startPhase) {
case ZSTARTPHASE1: case ZSTARTPHASE1:
ljam(); jam();
cownNodeId = ownNodeId; cownNodeId = ownNodeId;
cownref = calcTupBlockRef(ownNodeId); cownref = calcTupBlockRef(ownNodeId);
break; break;
case ZSTARTPHASE2: case ZSTARTPHASE2:
ljam(); jam();
break; break;
case ZSTARTPHASE3: case ZSTARTPHASE3:
ljam(); jam();
startphase3Lab(signal, ~0, ~0); startphase3Lab(signal, ~0, ~0);
break; break;
case ZSTARTPHASE4: case ZSTARTPHASE4:
ljam(); jam();
break; break;
case ZSTARTPHASE6: case ZSTARTPHASE6:
ljam(); jam();
/*****************************************/ /*****************************************/
/* NOW SET THE DISK WRITE SPEED TO */ /* NOW SET THE DISK WRITE SPEED TO */
/* PAGES PER TICK AFTER SYSTEM */ /* PAGES PER TICK AFTER SYSTEM */
...@@ -520,7 +518,7 @@ void Dbtup::execNDB_STTOR(Signal* signal) ...@@ -520,7 +518,7 @@ void Dbtup::execNDB_STTOR(Signal* signal)
sendSignalWithDelay(reference(), GSN_CONTINUEB, signal, 1000, 1); sendSignalWithDelay(reference(), GSN_CONTINUEB, signal, 1000, 1);
break; break;
default: default:
ljam(); jam();
break; break;
}//switch }//switch
signal->theData[0] = cownref; signal->theData[0] = cownref;
...@@ -597,7 +595,7 @@ void Dbtup::initializeTablerec() ...@@ -597,7 +595,7 @@ void Dbtup::initializeTablerec()
{ {
TablerecPtr regTabPtr; TablerecPtr regTabPtr;
for (regTabPtr.i = 0; regTabPtr.i < cnoOfTablerec; regTabPtr.i++) { for (regTabPtr.i = 0; regTabPtr.i < cnoOfTablerec; regTabPtr.i++) {
ljam(); jam();
refresh_watch_dog(); refresh_watch_dog();
ptrAss(regTabPtr, tablerec); ptrAss(regTabPtr, tablerec);
initTab(regTabPtr.p); initTab(regTabPtr.p);
...@@ -668,12 +666,12 @@ void Dbtup::initializeTabDescr() ...@@ -668,12 +666,12 @@ void Dbtup::initializeTabDescr()
void Dbtup::execTUPSEIZEREQ(Signal* signal) void Dbtup::execTUPSEIZEREQ(Signal* signal)
{ {
OperationrecPtr regOperPtr; OperationrecPtr regOperPtr;
ljamEntry(); jamEntry();
Uint32 userPtr = signal->theData[0]; Uint32 userPtr = signal->theData[0];
BlockReference userRef = signal->theData[1]; BlockReference userRef = signal->theData[1];
if (!c_operation_pool.seize(regOperPtr)) if (!c_operation_pool.seize(regOperPtr))
{ {
ljam(); jam();
signal->theData[0] = userPtr; signal->theData[0] = userPtr;
signal->theData[1] = ZGET_OPREC_ERROR; signal->theData[1] = ZGET_OPREC_ERROR;
sendSignal(userRef, GSN_TUPSEIZEREF, signal, 2, JBB); sendSignal(userRef, GSN_TUPSEIZEREF, signal, 2, JBB);
...@@ -707,7 +705,7 @@ void Dbtup::execTUPSEIZEREQ(Signal* signal) ...@@ -707,7 +705,7 @@ void Dbtup::execTUPSEIZEREQ(Signal* signal)
void Dbtup::execTUPRELEASEREQ(Signal* signal) void Dbtup::execTUPRELEASEREQ(Signal* signal)
{ {
OperationrecPtr regOperPtr; OperationrecPtr regOperPtr;
ljamEntry(); jamEntry();
regOperPtr.i = signal->theData[0]; regOperPtr.i = signal->theData[0];
c_operation_pool.getPtr(regOperPtr); c_operation_pool.getPtr(regOperPtr);
set_trans_state(regOperPtr.p, TRANS_DISCONNECTED); set_trans_state(regOperPtr.p, TRANS_DISCONNECTED);
......
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#define DBTUP_C #define DBTUP_C
#define DBTUP_INDEX_CPP
#include "Dbtup.hpp" #include "Dbtup.hpp"
#include <RefConvert.hpp> #include <RefConvert.hpp>
#include <ndb_limits.h> #include <ndb_limits.h>
...@@ -23,9 +24,6 @@ ...@@ -23,9 +24,6 @@
#include <AttributeHeader.hpp> #include <AttributeHeader.hpp>
#include <signaldata/TuxMaint.hpp> #include <signaldata/TuxMaint.hpp>
#define ljam() { jamLine(28000 + __LINE__); }
#define ljamEntry() { jamEntryLine(28000 + __LINE__); }
// methods used by ordered index // methods used by ordered index
void void
...@@ -34,7 +32,7 @@ Dbtup::tuxGetTupAddr(Uint32 fragPtrI, ...@@ -34,7 +32,7 @@ Dbtup::tuxGetTupAddr(Uint32 fragPtrI,
Uint32 pageIndex, Uint32 pageIndex,
Uint32& tupAddr) Uint32& tupAddr)
{ {
ljamEntry(); jamEntry();
PagePtr pagePtr; PagePtr pagePtr;
c_page_pool.getPtr(pagePtr, pageId); c_page_pool.getPtr(pagePtr, pageId);
Uint32 fragPageId= pagePtr.p->frag_page_id; Uint32 fragPageId= pagePtr.p->frag_page_id;
...@@ -48,7 +46,7 @@ Dbtup::tuxAllocNode(Signal* signal, ...@@ -48,7 +46,7 @@ Dbtup::tuxAllocNode(Signal* signal,
Uint32& pageOffset, Uint32& pageOffset,
Uint32*& node) Uint32*& node)
{ {
ljamEntry(); jamEntry();
FragrecordPtr fragPtr; FragrecordPtr fragPtr;
fragPtr.i= fragPtrI; fragPtr.i= fragPtrI;
ptrCheckGuard(fragPtr, cnoOfFragrec, fragrecord); ptrCheckGuard(fragPtr, cnoOfFragrec, fragrecord);
...@@ -61,7 +59,7 @@ Dbtup::tuxAllocNode(Signal* signal, ...@@ -61,7 +59,7 @@ Dbtup::tuxAllocNode(Signal* signal,
Uint32* ptr, frag_page_id; Uint32* ptr, frag_page_id;
if ((ptr= alloc_fix_rec(fragPtr.p, tablePtr.p, &key, &frag_page_id)) == 0) if ((ptr= alloc_fix_rec(fragPtr.p, tablePtr.p, &key, &frag_page_id)) == 0)
{ {
ljam(); jam();
terrorCode = ZMEM_NOMEM_ERROR; // caller sets error terrorCode = ZMEM_NOMEM_ERROR; // caller sets error
return terrorCode; return terrorCode;
} }
...@@ -82,7 +80,7 @@ Dbtup::tuxFreeNode(Signal* signal, ...@@ -82,7 +80,7 @@ Dbtup::tuxFreeNode(Signal* signal,
Uint32 pageOffset, Uint32 pageOffset,
Uint32* node) Uint32* node)
{ {
ljamEntry(); jamEntry();
FragrecordPtr fragPtr; FragrecordPtr fragPtr;
fragPtr.i= fragPtrI; fragPtr.i= fragPtrI;
ptrCheckGuard(fragPtr, cnoOfFragrec, fragrecord); ptrCheckGuard(fragPtr, cnoOfFragrec, fragrecord);
...@@ -105,7 +103,7 @@ Dbtup::tuxGetNode(Uint32 fragPtrI, ...@@ -105,7 +103,7 @@ Dbtup::tuxGetNode(Uint32 fragPtrI,
Uint32 pageOffset, Uint32 pageOffset,
Uint32*& node) Uint32*& node)
{ {
ljamEntry(); jamEntry();
FragrecordPtr fragPtr; FragrecordPtr fragPtr;
fragPtr.i= fragPtrI; fragPtr.i= fragPtrI;
ptrCheckGuard(fragPtr, cnoOfFragrec, fragrecord); ptrCheckGuard(fragPtr, cnoOfFragrec, fragrecord);
...@@ -130,7 +128,7 @@ Dbtup::tuxReadAttrs(Uint32 fragPtrI, ...@@ -130,7 +128,7 @@ Dbtup::tuxReadAttrs(Uint32 fragPtrI,
Uint32 numAttrs, Uint32 numAttrs,
Uint32* dataOut) Uint32* dataOut)
{ {
ljamEntry(); jamEntry();
// use own variables instead of globals // use own variables instead of globals
FragrecordPtr fragPtr; FragrecordPtr fragPtr;
fragPtr.i= fragPtrI; fragPtr.i= fragPtrI;
...@@ -150,21 +148,21 @@ Dbtup::tuxReadAttrs(Uint32 fragPtrI, ...@@ -150,21 +148,21 @@ Dbtup::tuxReadAttrs(Uint32 fragPtrI,
Tuple_header *tuple_ptr= req_struct.m_tuple_ptr; Tuple_header *tuple_ptr= req_struct.m_tuple_ptr;
if (tuple_ptr->get_tuple_version() != tupVersion) if (tuple_ptr->get_tuple_version() != tupVersion)
{ {
ljam(); jam();
OperationrecPtr opPtr; OperationrecPtr opPtr;
opPtr.i= tuple_ptr->m_operation_ptr_i; opPtr.i= tuple_ptr->m_operation_ptr_i;
Uint32 loopGuard= 0; Uint32 loopGuard= 0;
while (opPtr.i != RNIL) { while (opPtr.i != RNIL) {
c_operation_pool.getPtr(opPtr); c_operation_pool.getPtr(opPtr);
if (opPtr.p->tupVersion == tupVersion) { if (opPtr.p->tupVersion == tupVersion) {
ljam(); jam();
if (!opPtr.p->m_copy_tuple_location.isNull()) { if (!opPtr.p->m_copy_tuple_location.isNull()) {
req_struct.m_tuple_ptr= (Tuple_header*) req_struct.m_tuple_ptr= (Tuple_header*)
c_undo_buffer.get_ptr(&opPtr.p->m_copy_tuple_location); c_undo_buffer.get_ptr(&opPtr.p->m_copy_tuple_location);
} }
break; break;
} }
ljam(); jam();
opPtr.i= opPtr.p->prevActiveOp; opPtr.i= opPtr.p->prevActiveOp;
ndbrequire(++loopGuard < (1 << ZTUP_VERSION_BITS)); ndbrequire(++loopGuard < (1 << ZTUP_VERSION_BITS));
} }
...@@ -202,7 +200,7 @@ Dbtup::tuxReadAttrs(Uint32 fragPtrI, ...@@ -202,7 +200,7 @@ Dbtup::tuxReadAttrs(Uint32 fragPtrI,
int int
Dbtup::tuxReadPk(Uint32 fragPtrI, Uint32 pageId, Uint32 pageIndex, Uint32* dataOut, bool xfrmFlag) Dbtup::tuxReadPk(Uint32 fragPtrI, Uint32 pageId, Uint32 pageIndex, Uint32* dataOut, bool xfrmFlag)
{ {
ljamEntry(); jamEntry();
// use own variables instead of globals // use own variables instead of globals
FragrecordPtr fragPtr; FragrecordPtr fragPtr;
fragPtr.i= fragPtrI; fragPtr.i= fragPtrI;
...@@ -305,7 +303,7 @@ Dbtup::tuxReadPk(Uint32 fragPtrI, Uint32 pageId, Uint32 pageIndex, Uint32* dataO ...@@ -305,7 +303,7 @@ Dbtup::tuxReadPk(Uint32 fragPtrI, Uint32 pageId, Uint32 pageIndex, Uint32* dataO
int int
Dbtup::accReadPk(Uint32 tableId, Uint32 fragId, Uint32 fragPageId, Uint32 pageIndex, Uint32* dataOut, bool xfrmFlag) Dbtup::accReadPk(Uint32 tableId, Uint32 fragId, Uint32 fragPageId, Uint32 pageIndex, Uint32* dataOut, bool xfrmFlag)
{ {
ljamEntry(); jamEntry();
// get table // get table
TablerecPtr tablePtr; TablerecPtr tablePtr;
tablePtr.i = tableId; tablePtr.i = tableId;
...@@ -329,7 +327,7 @@ Dbtup::tuxQueryTh(Uint32 fragPtrI, ...@@ -329,7 +327,7 @@ Dbtup::tuxQueryTh(Uint32 fragPtrI,
Uint32 transId2, Uint32 transId2,
Uint32 savePointId) Uint32 savePointId)
{ {
ljamEntry(); jamEntry();
FragrecordPtr fragPtr; FragrecordPtr fragPtr;
fragPtr.i= fragPtrI; fragPtr.i= fragPtrI;
ptrCheckGuard(fragPtr, cnoOfFragrec, fragrecord); ptrCheckGuard(fragPtr, cnoOfFragrec, fragrecord);
...@@ -358,9 +356,9 @@ Dbtup::tuxQueryTh(Uint32 fragPtrI, ...@@ -358,9 +356,9 @@ Dbtup::tuxQueryTh(Uint32 fragPtrI,
* for this transaction and savepoint id. If its tuple version * for this transaction and savepoint id. If its tuple version
* equals the requested then we have a visible tuple otherwise not. * equals the requested then we have a visible tuple otherwise not.
*/ */
ljam(); jam();
if (req_struct.m_tuple_ptr->get_tuple_version() == tupVersion) { if (req_struct.m_tuple_ptr->get_tuple_version() == tupVersion) {
ljam(); jam();
return true; return true;
} }
} }
...@@ -378,7 +376,7 @@ Dbtup::tuxQueryTh(Uint32 fragPtrI, ...@@ -378,7 +376,7 @@ Dbtup::tuxQueryTh(Uint32 fragPtrI,
void void
Dbtup::execBUILDINDXREQ(Signal* signal) Dbtup::execBUILDINDXREQ(Signal* signal)
{ {
ljamEntry(); jamEntry();
#ifdef TIME_MEASUREMENT #ifdef TIME_MEASUREMENT
time_events= 0; time_events= 0;
tot_time_passed= 0; tot_time_passed= 0;
...@@ -387,7 +385,7 @@ Dbtup::execBUILDINDXREQ(Signal* signal) ...@@ -387,7 +385,7 @@ Dbtup::execBUILDINDXREQ(Signal* signal)
// get new operation // get new operation
BuildIndexPtr buildPtr; BuildIndexPtr buildPtr;
if (! c_buildIndexList.seize(buildPtr)) { if (! c_buildIndexList.seize(buildPtr)) {
ljam(); jam();
BuildIndexRec buildRec; BuildIndexRec buildRec;
memcpy(buildRec.m_request, signal->theData, sizeof(buildRec.m_request)); memcpy(buildRec.m_request, signal->theData, sizeof(buildRec.m_request));
buildRec.m_errorCode= BuildIndxRef::Busy; buildRec.m_errorCode= BuildIndxRef::Busy;
...@@ -402,7 +400,7 @@ Dbtup::execBUILDINDXREQ(Signal* signal) ...@@ -402,7 +400,7 @@ Dbtup::execBUILDINDXREQ(Signal* signal)
do { do {
const BuildIndxReq* buildReq= (const BuildIndxReq*)buildPtr.p->m_request; const BuildIndxReq* buildReq= (const BuildIndxReq*)buildPtr.p->m_request;
if (buildReq->getTableId() >= cnoOfTablerec) { if (buildReq->getTableId() >= cnoOfTablerec) {
ljam(); jam();
buildPtr.p->m_errorCode= BuildIndxRef::InvalidPrimaryTable; buildPtr.p->m_errorCode= BuildIndxRef::InvalidPrimaryTable;
break; break;
} }
...@@ -410,7 +408,7 @@ Dbtup::execBUILDINDXREQ(Signal* signal) ...@@ -410,7 +408,7 @@ Dbtup::execBUILDINDXREQ(Signal* signal)
tablePtr.i= buildReq->getTableId(); tablePtr.i= buildReq->getTableId();
ptrCheckGuard(tablePtr, cnoOfTablerec, tablerec); ptrCheckGuard(tablePtr, cnoOfTablerec, tablerec);
if (tablePtr.p->tableStatus != DEFINED) { if (tablePtr.p->tableStatus != DEFINED) {
ljam(); jam();
buildPtr.p->m_errorCode= BuildIndxRef::InvalidPrimaryTable; buildPtr.p->m_errorCode= BuildIndxRef::InvalidPrimaryTable;
break; break;
} }
...@@ -418,7 +416,7 @@ Dbtup::execBUILDINDXREQ(Signal* signal) ...@@ -418,7 +416,7 @@ Dbtup::execBUILDINDXREQ(Signal* signal)
buildPtr.p->m_build_vs = buildPtr.p->m_build_vs =
tablePtr.p->m_attributes[MM].m_no_of_varsize > 0; tablePtr.p->m_attributes[MM].m_no_of_varsize > 0;
if (DictTabInfo::isOrderedIndex(buildReq->getIndexType())) { if (DictTabInfo::isOrderedIndex(buildReq->getIndexType())) {
ljam(); jam();
const DLList<TupTriggerData>& triggerList = const DLList<TupTriggerData>& triggerList =
tablePtr.p->tuxCustomTriggers; tablePtr.p->tuxCustomTriggers;
...@@ -426,13 +424,13 @@ Dbtup::execBUILDINDXREQ(Signal* signal) ...@@ -426,13 +424,13 @@ Dbtup::execBUILDINDXREQ(Signal* signal)
triggerList.first(triggerPtr); triggerList.first(triggerPtr);
while (triggerPtr.i != RNIL) { while (triggerPtr.i != RNIL) {
if (triggerPtr.p->indexId == buildReq->getIndexId()) { if (triggerPtr.p->indexId == buildReq->getIndexId()) {
ljam(); jam();
break; break;
} }
triggerList.next(triggerPtr); triggerList.next(triggerPtr);
} }
if (triggerPtr.i == RNIL) { if (triggerPtr.i == RNIL) {
ljam(); jam();
// trigger was not created // trigger was not created
buildPtr.p->m_errorCode = BuildIndxRef::InternalError; buildPtr.p->m_errorCode = BuildIndxRef::InternalError;
break; break;
...@@ -440,12 +438,12 @@ Dbtup::execBUILDINDXREQ(Signal* signal) ...@@ -440,12 +438,12 @@ Dbtup::execBUILDINDXREQ(Signal* signal)
buildPtr.p->m_indexId = buildReq->getIndexId(); buildPtr.p->m_indexId = buildReq->getIndexId();
buildPtr.p->m_buildRef = DBTUX; buildPtr.p->m_buildRef = DBTUX;
} else if(buildReq->getIndexId() == RNIL) { } else if(buildReq->getIndexId() == RNIL) {
ljam(); jam();
// REBUILD of acc // REBUILD of acc
buildPtr.p->m_indexId = RNIL; buildPtr.p->m_indexId = RNIL;
buildPtr.p->m_buildRef = DBACC; buildPtr.p->m_buildRef = DBACC;
} else { } else {
ljam(); jam();
buildPtr.p->m_errorCode = BuildIndxRef::InvalidIndexType; buildPtr.p->m_errorCode = BuildIndxRef::InvalidIndexType;
break; break;
} }
...@@ -490,7 +488,7 @@ Dbtup::buildIndex(Signal* signal, Uint32 buildPtrI) ...@@ -490,7 +488,7 @@ Dbtup::buildIndex(Signal* signal, Uint32 buildPtrI)
// get fragment // get fragment
FragrecordPtr fragPtr; FragrecordPtr fragPtr;
if (buildPtr.p->m_fragNo == MAX_FRAG_PER_NODE) { if (buildPtr.p->m_fragNo == MAX_FRAG_PER_NODE) {
ljam(); jam();
// build ready // build ready
buildIndexReply(signal, buildPtr.p); buildIndexReply(signal, buildPtr.p);
c_buildIndexList.release(buildPtr); c_buildIndexList.release(buildPtr);
...@@ -499,7 +497,7 @@ Dbtup::buildIndex(Signal* signal, Uint32 buildPtrI) ...@@ -499,7 +497,7 @@ Dbtup::buildIndex(Signal* signal, Uint32 buildPtrI)
ndbrequire(buildPtr.p->m_fragNo < MAX_FRAG_PER_NODE); ndbrequire(buildPtr.p->m_fragNo < MAX_FRAG_PER_NODE);
fragPtr.i= tablePtr.p->fragrec[buildPtr.p->m_fragNo]; fragPtr.i= tablePtr.p->fragrec[buildPtr.p->m_fragNo];
if (fragPtr.i == RNIL) { if (fragPtr.i == RNIL) {
ljam(); jam();
buildPtr.p->m_fragNo++; buildPtr.p->m_fragNo++;
buildPtr.p->m_pageId= 0; buildPtr.p->m_pageId= 0;
buildPtr.p->m_tupleNo= firstTupleNo; buildPtr.p->m_tupleNo= firstTupleNo;
...@@ -509,7 +507,7 @@ Dbtup::buildIndex(Signal* signal, Uint32 buildPtrI) ...@@ -509,7 +507,7 @@ Dbtup::buildIndex(Signal* signal, Uint32 buildPtrI)
// get page // get page
PagePtr pagePtr; PagePtr pagePtr;
if (buildPtr.p->m_pageId >= fragPtr.p->noOfPages) { if (buildPtr.p->m_pageId >= fragPtr.p->noOfPages) {
ljam(); jam();
buildPtr.p->m_fragNo++; buildPtr.p->m_fragNo++;
buildPtr.p->m_pageId= 0; buildPtr.p->m_pageId= 0;
buildPtr.p->m_tupleNo= firstTupleNo; buildPtr.p->m_tupleNo= firstTupleNo;
...@@ -520,7 +518,7 @@ Dbtup::buildIndex(Signal* signal, Uint32 buildPtrI) ...@@ -520,7 +518,7 @@ Dbtup::buildIndex(Signal* signal, Uint32 buildPtrI)
Uint32 pageState= pagePtr.p->page_state; Uint32 pageState= pagePtr.p->page_state;
// skip empty page // skip empty page
if (pageState == ZEMPTY_MM) { if (pageState == ZEMPTY_MM) {
ljam(); jam();
buildPtr.p->m_pageId++; buildPtr.p->m_pageId++;
buildPtr.p->m_tupleNo= firstTupleNo; buildPtr.p->m_tupleNo= firstTupleNo;
break; break;
...@@ -530,7 +528,7 @@ Dbtup::buildIndex(Signal* signal, Uint32 buildPtrI) ...@@ -530,7 +528,7 @@ Dbtup::buildIndex(Signal* signal, Uint32 buildPtrI)
const Tuple_header* tuple_ptr = 0; const Tuple_header* tuple_ptr = 0;
pageIndex = buildPtr.p->m_tupleNo * tupheadsize; pageIndex = buildPtr.p->m_tupleNo * tupheadsize;
if (pageIndex + tupheadsize > Fix_page::DATA_WORDS) { if (pageIndex + tupheadsize > Fix_page::DATA_WORDS) {
ljam(); jam();
buildPtr.p->m_pageId++; buildPtr.p->m_pageId++;
buildPtr.p->m_tupleNo= firstTupleNo; buildPtr.p->m_tupleNo= firstTupleNo;
break; break;
...@@ -538,7 +536,7 @@ Dbtup::buildIndex(Signal* signal, Uint32 buildPtrI) ...@@ -538,7 +536,7 @@ Dbtup::buildIndex(Signal* signal, Uint32 buildPtrI)
tuple_ptr = (Tuple_header*)&pagePtr.p->m_data[pageIndex]; tuple_ptr = (Tuple_header*)&pagePtr.p->m_data[pageIndex];
// skip over free tuple // skip over free tuple
if (tuple_ptr->m_header_bits & Tuple_header::FREE) { if (tuple_ptr->m_header_bits & Tuple_header::FREE) {
ljam(); jam();
buildPtr.p->m_tupleNo++; buildPtr.p->m_tupleNo++;
break; break;
} }
...@@ -581,7 +579,7 @@ Dbtup::buildIndex(Signal* signal, Uint32 buildPtrI) ...@@ -581,7 +579,7 @@ Dbtup::buildIndex(Signal* signal, Uint32 buildPtrI)
tuple as a copy tuple. The original tuple is stable and is thus tuple as a copy tuple. The original tuple is stable and is thus
preferrable to store in TUX. preferrable to store in TUX.
*/ */
ljam(); jam();
/** /**
* Since copy tuples now can't be found on real pages. * Since copy tuples now can't be found on real pages.
...@@ -610,11 +608,11 @@ Dbtup::buildIndex(Signal* signal, Uint32 buildPtrI) ...@@ -610,11 +608,11 @@ Dbtup::buildIndex(Signal* signal, Uint32 buildPtrI)
} while(req->errorCode == 0 && pageOperPtr.i != RNIL); } while(req->errorCode == 0 && pageOperPtr.i != RNIL);
} }
ljamEntry(); jamEntry();
if (req->errorCode != 0) { if (req->errorCode != 0) {
switch (req->errorCode) { switch (req->errorCode) {
case TuxMaintReq::NoMemError: case TuxMaintReq::NoMemError:
ljam(); jam();
buildPtr.p->m_errorCode= BuildIndxRef::AllocationFailure; buildPtr.p->m_errorCode= BuildIndxRef::AllocationFailure;
break; break;
default: default:
...@@ -666,7 +664,7 @@ Dbtup::buildIndexReply(Signal* signal, const BuildIndexRec* buildPtrP) ...@@ -666,7 +664,7 @@ Dbtup::buildIndexReply(Signal* signal, const BuildIndexRec* buildPtrP)
rep->setIndexId(buildReq->getIndexId()); rep->setIndexId(buildReq->getIndexId());
// conf // conf
if (buildPtrP->m_errorCode == BuildIndxRef::NoError) { if (buildPtrP->m_errorCode == BuildIndxRef::NoError) {
ljam(); jam();
sendSignal(rep->getUserRef(), GSN_BUILDINDXCONF, sendSignal(rep->getUserRef(), GSN_BUILDINDXCONF,
signal, BuildIndxConf::SignalLength, JBB); signal, BuildIndxConf::SignalLength, JBB);
return; return;
......
...@@ -14,14 +14,12 @@ ...@@ -14,14 +14,12 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#define DBTUP_C #define DBTUP_C
#define DBTUP_PAG_MAN_CPP
#include "Dbtup.hpp" #include "Dbtup.hpp"
#include <RefConvert.hpp> #include <RefConvert.hpp>
#include <ndb_limits.h> #include <ndb_limits.h>
#include <pc.hpp> #include <pc.hpp>
#define ljam() { jamLine(16000 + __LINE__); }
#define ljamEntry() { jamEntryLine(16000 + __LINE__); }
/* ---------------------------------------------------------------- */ /* ---------------------------------------------------------------- */
// 4) Page Memory Manager (buddy algorithm) // 4) Page Memory Manager (buddy algorithm)
// //
...@@ -121,7 +119,7 @@ void Dbtup::initializePage() ...@@ -121,7 +119,7 @@ void Dbtup::initializePage()
}//for }//for
PagePtr pagePtr; PagePtr pagePtr;
for (pagePtr.i = 0; pagePtr.i < c_page_pool.getSize(); pagePtr.i++) { for (pagePtr.i = 0; pagePtr.i < c_page_pool.getSize(); pagePtr.i++) {
ljam(); jam();
refresh_watch_dog(); refresh_watch_dog();
c_page_pool.getPtr(pagePtr); c_page_pool.getPtr(pagePtr);
pagePtr.p->physical_page_id= RNIL; pagePtr.p->physical_page_id= RNIL;
...@@ -153,16 +151,16 @@ void Dbtup::allocConsPages(Uint32 noOfPagesToAllocate, ...@@ -153,16 +151,16 @@ void Dbtup::allocConsPages(Uint32 noOfPagesToAllocate,
Uint32& allocPageRef) Uint32& allocPageRef)
{ {
if (noOfPagesToAllocate == 0){ if (noOfPagesToAllocate == 0){
ljam(); jam();
noOfPagesAllocated = 0; noOfPagesAllocated = 0;
return; return;
}//if }//if
Uint32 firstListToCheck = nextHigherTwoLog(noOfPagesToAllocate - 1); Uint32 firstListToCheck = nextHigherTwoLog(noOfPagesToAllocate - 1);
for (Uint32 i = firstListToCheck; i < 16; i++) { for (Uint32 i = firstListToCheck; i < 16; i++) {
ljam(); jam();
if (cfreepageList[i] != RNIL) { if (cfreepageList[i] != RNIL) {
ljam(); jam();
/* ---------------------------------------------------------------- */ /* ---------------------------------------------------------------- */
/* PROPER AMOUNT OF PAGES WERE FOUND. NOW SPLIT THE FOUND */ /* PROPER AMOUNT OF PAGES WERE FOUND. NOW SPLIT THE FOUND */
/* AREA AND RETURN THE PART NOT NEEDED. */ /* AREA AND RETURN THE PART NOT NEEDED. */
...@@ -182,11 +180,11 @@ void Dbtup::allocConsPages(Uint32 noOfPagesToAllocate, ...@@ -182,11 +180,11 @@ void Dbtup::allocConsPages(Uint32 noOfPagesToAllocate,
/* ---------------------------------------------------------------- */ /* ---------------------------------------------------------------- */
if (firstListToCheck) if (firstListToCheck)
{ {
ljam(); jam();
for (Uint32 j = firstListToCheck - 1; (Uint32)~j; j--) { for (Uint32 j = firstListToCheck - 1; (Uint32)~j; j--) {
ljam(); jam();
if (cfreepageList[j] != RNIL) { if (cfreepageList[j] != RNIL) {
ljam(); jam();
/* ---------------------------------------------------------------- */ /* ---------------------------------------------------------------- */
/* SOME AREA WAS FOUND, ALLOCATE ALL OF IT. */ /* SOME AREA WAS FOUND, ALLOCATE ALL OF IT. */
/* ---------------------------------------------------------------- */ /* ---------------------------------------------------------------- */
...@@ -212,9 +210,9 @@ void Dbtup::allocConsPages(Uint32 noOfPagesToAllocate, ...@@ -212,9 +210,9 @@ void Dbtup::allocConsPages(Uint32 noOfPagesToAllocate,
void Dbtup::returnCommonArea(Uint32 retPageRef, Uint32 retNo) void Dbtup::returnCommonArea(Uint32 retPageRef, Uint32 retNo)
{ {
do { do {
ljam(); jam();
if (retNo == 0) { if (retNo == 0) {
ljam(); jam();
return; return;
}//if }//if
Uint32 list = nextHigherTwoLog(retNo) - 1; Uint32 list = nextHigherTwoLog(retNo) - 1;
...@@ -231,28 +229,28 @@ void Dbtup::findFreeLeftNeighbours(Uint32& allocPageRef, ...@@ -231,28 +229,28 @@ void Dbtup::findFreeLeftNeighbours(Uint32& allocPageRef,
PagePtr pageFirstPtr, pageLastPtr; PagePtr pageFirstPtr, pageLastPtr;
Uint32 remainAllocate = noOfPagesToAllocate - noPagesAllocated; Uint32 remainAllocate = noOfPagesToAllocate - noPagesAllocated;
while (allocPageRef > 0) { while (allocPageRef > 0) {
ljam(); jam();
pageLastPtr.i = allocPageRef - 1; pageLastPtr.i = allocPageRef - 1;
c_page_pool.getPtr(pageLastPtr); c_page_pool.getPtr(pageLastPtr);
if (pageLastPtr.p->page_state != ZFREE_COMMON) { if (pageLastPtr.p->page_state != ZFREE_COMMON) {
ljam(); jam();
return; return;
} else { } else {
ljam(); jam();
pageFirstPtr.i = pageLastPtr.p->first_cluster_page; pageFirstPtr.i = pageLastPtr.p->first_cluster_page;
ndbrequire(pageFirstPtr.i != RNIL); ndbrequire(pageFirstPtr.i != RNIL);
Uint32 list = nextHigherTwoLog(pageLastPtr.i - pageFirstPtr.i); Uint32 list = nextHigherTwoLog(pageLastPtr.i - pageFirstPtr.i);
removeCommonArea(pageFirstPtr.i, list); removeCommonArea(pageFirstPtr.i, list);
Uint32 listSize = 1 << list; Uint32 listSize = 1 << list;
if (listSize > remainAllocate) { if (listSize > remainAllocate) {
ljam(); jam();
Uint32 retNo = listSize - remainAllocate; Uint32 retNo = listSize - remainAllocate;
returnCommonArea(pageFirstPtr.i, retNo); returnCommonArea(pageFirstPtr.i, retNo);
allocPageRef = pageFirstPtr.i + retNo; allocPageRef = pageFirstPtr.i + retNo;
noPagesAllocated = noOfPagesToAllocate; noPagesAllocated = noOfPagesToAllocate;
return; return;
} else { } else {
ljam(); jam();
allocPageRef = pageFirstPtr.i; allocPageRef = pageFirstPtr.i;
noPagesAllocated += listSize; noPagesAllocated += listSize;
remainAllocate -= listSize; remainAllocate -= listSize;
...@@ -268,32 +266,32 @@ void Dbtup::findFreeRightNeighbours(Uint32& allocPageRef, ...@@ -268,32 +266,32 @@ void Dbtup::findFreeRightNeighbours(Uint32& allocPageRef,
PagePtr pageFirstPtr, pageLastPtr; PagePtr pageFirstPtr, pageLastPtr;
Uint32 remainAllocate = noOfPagesToAllocate - noPagesAllocated; Uint32 remainAllocate = noOfPagesToAllocate - noPagesAllocated;
if (remainAllocate == 0) { if (remainAllocate == 0) {
ljam(); jam();
return; return;
}//if }//if
while ((allocPageRef + noPagesAllocated) < c_page_pool.getSize()) { while ((allocPageRef + noPagesAllocated) < c_page_pool.getSize()) {
ljam(); jam();
pageFirstPtr.i = allocPageRef + noPagesAllocated; pageFirstPtr.i = allocPageRef + noPagesAllocated;
c_page_pool.getPtr(pageFirstPtr); c_page_pool.getPtr(pageFirstPtr);
if (pageFirstPtr.p->page_state != ZFREE_COMMON) { if (pageFirstPtr.p->page_state != ZFREE_COMMON) {
ljam(); jam();
return; return;
} else { } else {
ljam(); jam();
pageLastPtr.i = pageFirstPtr.p->last_cluster_page; pageLastPtr.i = pageFirstPtr.p->last_cluster_page;
ndbrequire(pageLastPtr.i != RNIL); ndbrequire(pageLastPtr.i != RNIL);
Uint32 list = nextHigherTwoLog(pageLastPtr.i - pageFirstPtr.i); Uint32 list = nextHigherTwoLog(pageLastPtr.i - pageFirstPtr.i);
removeCommonArea(pageFirstPtr.i, list); removeCommonArea(pageFirstPtr.i, list);
Uint32 listSize = 1 << list; Uint32 listSize = 1 << list;
if (listSize > remainAllocate) { if (listSize > remainAllocate) {
ljam(); jam();
Uint32 retPageRef = pageFirstPtr.i + remainAllocate; Uint32 retPageRef = pageFirstPtr.i + remainAllocate;
Uint32 retNo = listSize - remainAllocate; Uint32 retNo = listSize - remainAllocate;
returnCommonArea(retPageRef, retNo); returnCommonArea(retPageRef, retNo);
noPagesAllocated += remainAllocate; noPagesAllocated += remainAllocate;
return; return;
} else { } else {
ljam(); jam();
noPagesAllocated += listSize; noPagesAllocated += listSize;
remainAllocate -= listSize; remainAllocate -= listSize;
}//if }//if
...@@ -328,30 +326,30 @@ void Dbtup::removeCommonArea(Uint32 remPageRef, Uint32 list) ...@@ -328,30 +326,30 @@ void Dbtup::removeCommonArea(Uint32 remPageRef, Uint32 list)
c_page_pool.getPtr(remPagePtr, remPageRef); c_page_pool.getPtr(remPagePtr, remPageRef);
ndbrequire(list < 16); ndbrequire(list < 16);
if (cfreepageList[list] == remPagePtr.i) { if (cfreepageList[list] == remPagePtr.i) {
ljam(); jam();
cfreepageList[list] = remPagePtr.p->next_cluster_page; cfreepageList[list] = remPagePtr.p->next_cluster_page;
pageNextPtr.i = cfreepageList[list]; pageNextPtr.i = cfreepageList[list];
if (pageNextPtr.i != RNIL) { if (pageNextPtr.i != RNIL) {
ljam(); jam();
c_page_pool.getPtr(pageNextPtr); c_page_pool.getPtr(pageNextPtr);
pageNextPtr.p->prev_cluster_page = RNIL; pageNextPtr.p->prev_cluster_page = RNIL;
}//if }//if
} else { } else {
pageSearchPtr.i = cfreepageList[list]; pageSearchPtr.i = cfreepageList[list];
while (true) { while (true) {
ljam(); jam();
c_page_pool.getPtr(pageSearchPtr); c_page_pool.getPtr(pageSearchPtr);
pagePrevPtr = pageSearchPtr; pagePrevPtr = pageSearchPtr;
pageSearchPtr.i = pageSearchPtr.p->next_cluster_page; pageSearchPtr.i = pageSearchPtr.p->next_cluster_page;
if (pageSearchPtr.i == remPagePtr.i) { if (pageSearchPtr.i == remPagePtr.i) {
ljam(); jam();
break; break;
}//if }//if
}//while }//while
pageNextPtr.i = remPagePtr.p->next_cluster_page; pageNextPtr.i = remPagePtr.p->next_cluster_page;
pagePrevPtr.p->next_cluster_page = pageNextPtr.i; pagePrevPtr.p->next_cluster_page = pageNextPtr.i;
if (pageNextPtr.i != RNIL) { if (pageNextPtr.i != RNIL) {
ljam(); jam();
c_page_pool.getPtr(pageNextPtr); c_page_pool.getPtr(pageNextPtr);
pageNextPtr.p->prev_cluster_page = pagePrevPtr.i; pageNextPtr.p->prev_cluster_page = pagePrevPtr.i;
}//if }//if
......
...@@ -15,14 +15,12 @@ ...@@ -15,14 +15,12 @@
#define DBTUP_C #define DBTUP_C
#define DBTUP_PAGE_MAP_CPP
#include "Dbtup.hpp" #include "Dbtup.hpp"
#include <RefConvert.hpp> #include <RefConvert.hpp>
#include <ndb_limits.h> #include <ndb_limits.h>
#include <pc.hpp> #include <pc.hpp>
#define ljam() { jamLine(14000 + __LINE__); }
#define ljamEntry() { jamEntryLine(14000 + __LINE__); }
// //
// PageMap is a service used by Dbtup to map logical page id's to physical // PageMap is a service used by Dbtup to map logical page id's to physical
// page id's. The mapping is needs the fragment and the logical page id to // page id's. The mapping is needs the fragment and the logical page id to
...@@ -92,11 +90,11 @@ Uint32 Dbtup::getEmptyPage(Fragrecord* regFragPtr) ...@@ -92,11 +90,11 @@ Uint32 Dbtup::getEmptyPage(Fragrecord* regFragPtr)
{ {
Uint32 pageId = regFragPtr->emptyPrimPage.firstItem; Uint32 pageId = regFragPtr->emptyPrimPage.firstItem;
if (pageId == RNIL) { if (pageId == RNIL) {
ljam(); jam();
allocMoreFragPages(regFragPtr); allocMoreFragPages(regFragPtr);
pageId = regFragPtr->emptyPrimPage.firstItem; pageId = regFragPtr->emptyPrimPage.firstItem;
if (pageId == RNIL) { if (pageId == RNIL) {
ljam(); jam();
return RNIL; return RNIL;
}//if }//if
}//if }//if
...@@ -122,11 +120,11 @@ Uint32 Dbtup::getRealpid(Fragrecord* regFragPtr, Uint32 logicalPageId) ...@@ -122,11 +120,11 @@ Uint32 Dbtup::getRealpid(Fragrecord* regFragPtr, Uint32 logicalPageId)
loopLimit = grpPageRangePtr.p->currentIndexPos; loopLimit = grpPageRangePtr.p->currentIndexPos;
ndbrequire(loopLimit <= 3); ndbrequire(loopLimit <= 3);
for (Uint32 i = 0; i <= loopLimit; i++) { for (Uint32 i = 0; i <= loopLimit; i++) {
ljam(); jam();
if (grpPageRangePtr.p->startRange[i] <= logicalPageId) { if (grpPageRangePtr.p->startRange[i] <= logicalPageId) {
if (grpPageRangePtr.p->endRange[i] >= logicalPageId) { if (grpPageRangePtr.p->endRange[i] >= logicalPageId) {
if (grpPageRangePtr.p->type[i] == ZLEAF) { if (grpPageRangePtr.p->type[i] == ZLEAF) {
ljam(); jam();
Uint32 realPageId = (logicalPageId - grpPageRangePtr.p->startRange[i]) + Uint32 realPageId = (logicalPageId - grpPageRangePtr.p->startRange[i]) +
grpPageRangePtr.p->basePageId[i]; grpPageRangePtr.p->basePageId[i];
return realPageId; return realPageId;
...@@ -167,12 +165,12 @@ bool Dbtup::insertPageRangeTab(Fragrecord* const regFragPtr, ...@@ -167,12 +165,12 @@ bool Dbtup::insertPageRangeTab(Fragrecord* const regFragPtr,
{ {
PageRangePtr currPageRangePtr; PageRangePtr currPageRangePtr;
if (cfirstfreerange == RNIL) { if (cfirstfreerange == RNIL) {
ljam(); jam();
return false; return false;
}//if }//if
currPageRangePtr.i = regFragPtr->currentPageRange; currPageRangePtr.i = regFragPtr->currentPageRange;
if (currPageRangePtr.i == RNIL) { if (currPageRangePtr.i == RNIL) {
ljam(); jam();
/* ---------------------------------------------------------------- */ /* ---------------------------------------------------------------- */
/* THE FIRST PAGE RANGE IS HANDLED WITH SPECIAL CODE */ /* THE FIRST PAGE RANGE IS HANDLED WITH SPECIAL CODE */
/* ---------------------------------------------------------------- */ /* ---------------------------------------------------------------- */
...@@ -181,10 +179,10 @@ bool Dbtup::insertPageRangeTab(Fragrecord* const regFragPtr, ...@@ -181,10 +179,10 @@ bool Dbtup::insertPageRangeTab(Fragrecord* const regFragPtr,
currPageRangePtr.p->currentIndexPos = 0; currPageRangePtr.p->currentIndexPos = 0;
currPageRangePtr.p->parentPtr = RNIL; currPageRangePtr.p->parentPtr = RNIL;
} else { } else {
ljam(); jam();
ptrCheckGuard(currPageRangePtr, cnoOfPageRangeRec, pageRange); ptrCheckGuard(currPageRangePtr, cnoOfPageRangeRec, pageRange);
if (currPageRangePtr.p->currentIndexPos < 3) { if (currPageRangePtr.p->currentIndexPos < 3) {
ljam(); jam();
/* ---------------------------------------------------------------- */ /* ---------------------------------------------------------------- */
/* THE SIMPLE CASE WHEN IT IS ONLY NECESSARY TO FILL IN THE */ /* THE SIMPLE CASE WHEN IT IS ONLY NECESSARY TO FILL IN THE */
/* NEXT EMPTY POSITION IN THE PAGE RANGE RECORD IS TREATED */ /* NEXT EMPTY POSITION IN THE PAGE RANGE RECORD IS TREATED */
...@@ -192,7 +190,7 @@ bool Dbtup::insertPageRangeTab(Fragrecord* const regFragPtr, ...@@ -192,7 +190,7 @@ bool Dbtup::insertPageRangeTab(Fragrecord* const regFragPtr,
/* ---------------------------------------------------------------- */ /* ---------------------------------------------------------------- */
currPageRangePtr.p->currentIndexPos++; currPageRangePtr.p->currentIndexPos++;
} else { } else {
ljam(); jam();
ndbrequire(currPageRangePtr.p->currentIndexPos == 3); ndbrequire(currPageRangePtr.p->currentIndexPos == 3);
currPageRangePtr.i = leafPageRangeFull(regFragPtr, currPageRangePtr); currPageRangePtr.i = leafPageRangeFull(regFragPtr, currPageRangePtr);
if (currPageRangePtr.i == RNIL) { if (currPageRangePtr.i == RNIL) {
...@@ -223,15 +221,15 @@ bool Dbtup::insertPageRangeTab(Fragrecord* const regFragPtr, ...@@ -223,15 +221,15 @@ bool Dbtup::insertPageRangeTab(Fragrecord* const regFragPtr,
PageRangePtr loopPageRangePtr; PageRangePtr loopPageRangePtr;
loopPageRangePtr = currPageRangePtr; loopPageRangePtr = currPageRangePtr;
while (true) { while (true) {
ljam(); jam();
loopPageRangePtr.i = loopPageRangePtr.p->parentPtr; loopPageRangePtr.i = loopPageRangePtr.p->parentPtr;
if (loopPageRangePtr.i != RNIL) { if (loopPageRangePtr.i != RNIL) {
ljam(); jam();
ptrCheckGuard(loopPageRangePtr, cnoOfPageRangeRec, pageRange); ptrCheckGuard(loopPageRangePtr, cnoOfPageRangeRec, pageRange);
ndbrequire(loopPageRangePtr.p->currentIndexPos < 4); ndbrequire(loopPageRangePtr.p->currentIndexPos < 4);
loopPageRangePtr.p->endRange[loopPageRangePtr.p->currentIndexPos] += noPages; loopPageRangePtr.p->endRange[loopPageRangePtr.p->currentIndexPos] += noPages;
} else { } else {
ljam(); jam();
break; break;
}//if }//if
}//while }//while
...@@ -243,26 +241,26 @@ bool Dbtup::insertPageRangeTab(Fragrecord* const regFragPtr, ...@@ -243,26 +241,26 @@ bool Dbtup::insertPageRangeTab(Fragrecord* const regFragPtr,
void Dbtup::releaseFragPages(Fragrecord* regFragPtr) void Dbtup::releaseFragPages(Fragrecord* regFragPtr)
{ {
if (regFragPtr->rootPageRange == RNIL) { if (regFragPtr->rootPageRange == RNIL) {
ljam(); jam();
return; return;
}//if }//if
PageRangePtr regPRPtr; PageRangePtr regPRPtr;
regPRPtr.i = regFragPtr->rootPageRange; regPRPtr.i = regFragPtr->rootPageRange;
ptrCheckGuard(regPRPtr, cnoOfPageRangeRec, pageRange); ptrCheckGuard(regPRPtr, cnoOfPageRangeRec, pageRange);
while (true) { while (true) {
ljam(); jam();
const Uint32 indexPos = regPRPtr.p->currentIndexPos; const Uint32 indexPos = regPRPtr.p->currentIndexPos;
ndbrequire(indexPos < 4); ndbrequire(indexPos < 4);
const Uint32 basePageId = regPRPtr.p->basePageId[indexPos]; const Uint32 basePageId = regPRPtr.p->basePageId[indexPos];
regPRPtr.p->basePageId[indexPos] = RNIL; regPRPtr.p->basePageId[indexPos] = RNIL;
if (basePageId == RNIL) { if (basePageId == RNIL) {
ljam(); jam();
/** /**
* Finished with indexPos continue with next * Finished with indexPos continue with next
*/ */
if (indexPos > 0) { if (indexPos > 0) {
ljam(); jam();
regPRPtr.p->currentIndexPos--; regPRPtr.p->currentIndexPos--;
continue; continue;
}//if }//if
...@@ -274,13 +272,13 @@ void Dbtup::releaseFragPages(Fragrecord* regFragPtr) ...@@ -274,13 +272,13 @@ void Dbtup::releaseFragPages(Fragrecord* regFragPtr)
releasePagerange(regPRPtr); releasePagerange(regPRPtr);
if (parentPtr != RNIL) { if (parentPtr != RNIL) {
ljam(); jam();
regPRPtr.i = parentPtr; regPRPtr.i = parentPtr;
ptrCheckGuard(regPRPtr, cnoOfPageRangeRec, pageRange); ptrCheckGuard(regPRPtr, cnoOfPageRangeRec, pageRange);
continue; continue;
}//if }//if
ljam(); jam();
ndbrequire(regPRPtr.i == regFragPtr->rootPageRange); ndbrequire(regPRPtr.i == regFragPtr->rootPageRange);
initFragRange(regFragPtr); initFragRange(regFragPtr);
for (Uint32 i = 0; i<MAX_FREE_LIST; i++) for (Uint32 i = 0; i<MAX_FREE_LIST; i++)
...@@ -364,7 +362,7 @@ Uint32 Dbtup::allocFragPages(Fragrecord* regFragPtr, Uint32 tafpNoAllocRequested ...@@ -364,7 +362,7 @@ Uint32 Dbtup::allocFragPages(Fragrecord* regFragPtr, Uint32 tafpNoAllocRequested
Uint32 retPageRef = RNIL; Uint32 retPageRef = RNIL;
allocConsPages(noPagesToAllocate, noOfPagesAllocated, retPageRef); allocConsPages(noPagesToAllocate, noOfPagesAllocated, retPageRef);
if (noOfPagesAllocated == 0) { if (noOfPagesAllocated == 0) {
ljam(); jam();
return tafpPagesAllocated; return tafpPagesAllocated;
}//if }//if
/* ---------------------------------------------------------------- */ /* ---------------------------------------------------------------- */
...@@ -373,7 +371,7 @@ Uint32 Dbtup::allocFragPages(Fragrecord* regFragPtr, Uint32 tafpNoAllocRequested ...@@ -373,7 +371,7 @@ Uint32 Dbtup::allocFragPages(Fragrecord* regFragPtr, Uint32 tafpNoAllocRequested
/* ---------------------------------------------------------------- */ /* ---------------------------------------------------------------- */
Uint32 startRange = regFragPtr->nextStartRange; Uint32 startRange = regFragPtr->nextStartRange;
if (!insertPageRangeTab(regFragPtr, retPageRef, noOfPagesAllocated)) { if (!insertPageRangeTab(regFragPtr, retPageRef, noOfPagesAllocated)) {
ljam(); jam();
returnCommonArea(retPageRef, noOfPagesAllocated); returnCommonArea(retPageRef, noOfPagesAllocated);
return tafpPagesAllocated; return tafpPagesAllocated;
}//if }//if
...@@ -388,7 +386,7 @@ Uint32 Dbtup::allocFragPages(Fragrecord* regFragPtr, Uint32 tafpNoAllocRequested ...@@ -388,7 +386,7 @@ Uint32 Dbtup::allocFragPages(Fragrecord* regFragPtr, Uint32 tafpNoAllocRequested
/* ---------------------------------------------------------------- */ /* ---------------------------------------------------------------- */
Uint32 prev = RNIL; Uint32 prev = RNIL;
for (loopPagePtr.i = retPageRef; loopPagePtr.i < loopLimit; loopPagePtr.i++) { for (loopPagePtr.i = retPageRef; loopPagePtr.i < loopLimit; loopPagePtr.i++) {
ljam(); jam();
c_page_pool.getPtr(loopPagePtr); c_page_pool.getPtr(loopPagePtr);
loopPagePtr.p->page_state = ZEMPTY_MM; loopPagePtr.p->page_state = ZEMPTY_MM;
loopPagePtr.p->frag_page_id = startRange + loopPagePtr.p->frag_page_id = startRange +
...@@ -416,10 +414,10 @@ Uint32 Dbtup::allocFragPages(Fragrecord* regFragPtr, Uint32 tafpNoAllocRequested ...@@ -416,10 +414,10 @@ Uint32 Dbtup::allocFragPages(Fragrecord* regFragPtr, Uint32 tafpNoAllocRequested
/* WAS ENOUGH PAGES ALLOCATED OR ARE MORE NEEDED. */ /* WAS ENOUGH PAGES ALLOCATED OR ARE MORE NEEDED. */
/* ---------------------------------------------------------------- */ /* ---------------------------------------------------------------- */
if (tafpPagesAllocated < tafpNoAllocRequested) { if (tafpPagesAllocated < tafpNoAllocRequested) {
ljam(); jam();
} else { } else {
ndbrequire(tafpPagesAllocated == tafpNoAllocRequested); ndbrequire(tafpPagesAllocated == tafpNoAllocRequested);
ljam(); jam();
return tafpNoAllocRequested; return tafpNoAllocRequested;
}//if }//if
}//while }//while
...@@ -451,15 +449,15 @@ Uint32 Dbtup::leafPageRangeFull(Fragrecord* const regFragPtr, PageRangePtr curr ...@@ -451,15 +449,15 @@ Uint32 Dbtup::leafPageRangeFull(Fragrecord* const regFragPtr, PageRangePtr curr
parentPageRangePtr = currPageRangePtr; parentPageRangePtr = currPageRangePtr;
Uint32 tiprNoLevels = 1; Uint32 tiprNoLevels = 1;
while (true) { while (true) {
ljam(); jam();
parentPageRangePtr.i = parentPageRangePtr.p->parentPtr; parentPageRangePtr.i = parentPageRangePtr.p->parentPtr;
if (parentPageRangePtr.i == RNIL) { if (parentPageRangePtr.i == RNIL) {
ljam(); jam();
/* ---------------------------------------------------------------- */ /* ---------------------------------------------------------------- */
/* WE HAVE REACHED THE ROOT. A NEW ROOT MUST BE ALLOCATED. */ /* WE HAVE REACHED THE ROOT. A NEW ROOT MUST BE ALLOCATED. */
/* ---------------------------------------------------------------- */ /* ---------------------------------------------------------------- */
if (c_noOfFreePageRanges < tiprNoLevels) { if (c_noOfFreePageRanges < tiprNoLevels) {
ljam(); jam();
return RNIL; return RNIL;
}//if }//if
PageRangePtr oldRootPRPtr; PageRangePtr oldRootPRPtr;
...@@ -482,10 +480,10 @@ Uint32 Dbtup::leafPageRangeFull(Fragrecord* const regFragPtr, PageRangePtr curr ...@@ -482,10 +480,10 @@ Uint32 Dbtup::leafPageRangeFull(Fragrecord* const regFragPtr, PageRangePtr curr
foundPageRangePtr = newRootPRPtr; foundPageRangePtr = newRootPRPtr;
break; break;
} else { } else {
ljam(); jam();
ptrCheckGuard(parentPageRangePtr, cnoOfPageRangeRec, pageRange); ptrCheckGuard(parentPageRangePtr, cnoOfPageRangeRec, pageRange);
if (parentPageRangePtr.p->currentIndexPos < 3) { if (parentPageRangePtr.p->currentIndexPos < 3) {
ljam(); jam();
/* ---------------------------------------------------------------- */ /* ---------------------------------------------------------------- */
/* WE HAVE FOUND AN EMPTY ENTRY IN A PAGE RANGE RECORD. */ /* WE HAVE FOUND AN EMPTY ENTRY IN A PAGE RANGE RECORD. */
/* ALLOCATE A NEW PAGE RANGE RECORD, FILL IN THE START RANGE, */ /* ALLOCATE A NEW PAGE RANGE RECORD, FILL IN THE START RANGE, */
...@@ -498,7 +496,7 @@ Uint32 Dbtup::leafPageRangeFull(Fragrecord* const regFragPtr, PageRangePtr curr ...@@ -498,7 +496,7 @@ Uint32 Dbtup::leafPageRangeFull(Fragrecord* const regFragPtr, PageRangePtr curr
foundPageRangePtr = parentPageRangePtr; foundPageRangePtr = parentPageRangePtr;
break; break;
} else { } else {
ljam(); jam();
ndbrequire(parentPageRangePtr.p->currentIndexPos == 3); ndbrequire(parentPageRangePtr.p->currentIndexPos == 3);
/* ---------------------------------------------------------------- */ /* ---------------------------------------------------------------- */
/* THE PAGE RANGE RECORD WAS FULL. FIND THE PARENT RECORD */ /* THE PAGE RANGE RECORD WAS FULL. FIND THE PARENT RECORD */
...@@ -516,7 +514,7 @@ Uint32 Dbtup::leafPageRangeFull(Fragrecord* const regFragPtr, PageRangePtr curr ...@@ -516,7 +514,7 @@ Uint32 Dbtup::leafPageRangeFull(Fragrecord* const regFragPtr, PageRangePtr curr
PageRangePtr prevPageRangePtr; PageRangePtr prevPageRangePtr;
prevPageRangePtr = foundPageRangePtr; prevPageRangePtr = foundPageRangePtr;
if (c_noOfFreePageRanges < tiprNoLevels) { if (c_noOfFreePageRanges < tiprNoLevels) {
ljam(); jam();
return RNIL; return RNIL;
}//if }//if
/* ---------------------------------------------------------------- */ /* ---------------------------------------------------------------- */
...@@ -527,7 +525,7 @@ Uint32 Dbtup::leafPageRangeFull(Fragrecord* const regFragPtr, PageRangePtr curr ...@@ -527,7 +525,7 @@ Uint32 Dbtup::leafPageRangeFull(Fragrecord* const regFragPtr, PageRangePtr curr
/* ARE ALSO PROPERLY UPDATED ON THE PATH TO THE LEAF LEVEL. */ /* ARE ALSO PROPERLY UPDATED ON THE PATH TO THE LEAF LEVEL. */
/* ---------------------------------------------------------------- */ /* ---------------------------------------------------------------- */
while (true) { while (true) {
ljam(); jam();
seizePagerange(newPageRangePtr); seizePagerange(newPageRangePtr);
tiprNoLevels--; tiprNoLevels--;
ndbrequire(prevPageRangePtr.p->currentIndexPos < 4); ndbrequire(prevPageRangePtr.p->currentIndexPos < 4);
...@@ -535,13 +533,13 @@ Uint32 Dbtup::leafPageRangeFull(Fragrecord* const regFragPtr, PageRangePtr curr ...@@ -535,13 +533,13 @@ Uint32 Dbtup::leafPageRangeFull(Fragrecord* const regFragPtr, PageRangePtr curr
newPageRangePtr.p->parentPtr = prevPageRangePtr.i; newPageRangePtr.p->parentPtr = prevPageRangePtr.i;
newPageRangePtr.p->currentIndexPos = 0; newPageRangePtr.p->currentIndexPos = 0;
if (tiprNoLevels > 0) { if (tiprNoLevels > 0) {
ljam(); jam();
newPageRangePtr.p->startRange[0] = regFragPtr->nextStartRange; newPageRangePtr.p->startRange[0] = regFragPtr->nextStartRange;
newPageRangePtr.p->endRange[0] = regFragPtr->nextStartRange - 1; newPageRangePtr.p->endRange[0] = regFragPtr->nextStartRange - 1;
newPageRangePtr.p->type[0] = ZNON_LEAF; newPageRangePtr.p->type[0] = ZNON_LEAF;
prevPageRangePtr = newPageRangePtr; prevPageRangePtr = newPageRangePtr;
} else { } else {
ljam(); jam();
break; break;
}//if }//if
}//while }//while
...@@ -576,16 +574,16 @@ void Dbtup::errorHandler(Uint32 errorCode) ...@@ -576,16 +574,16 @@ void Dbtup::errorHandler(Uint32 errorCode)
{ {
switch (errorCode) { switch (errorCode) {
case 0: case 0:
ljam(); jam();
break; break;
case 1: case 1:
ljam(); jam();
break; break;
case 2: case 2:
ljam(); jam();
break; break;
default: default:
ljam(); jam();
} }
ndbrequire(false); ndbrequire(false);
}//Dbtup::errorHandler() }//Dbtup::errorHandler()
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#define DBTUP_C #define DBTUP_C
#define DBTUP_SCAN_CPP
#include "Dbtup.hpp" #include "Dbtup.hpp"
#include <signaldata/AccScan.hpp> #include <signaldata/AccScan.hpp>
#include <signaldata/NextScan.hpp> #include <signaldata/NextScan.hpp>
......
...@@ -15,14 +15,12 @@ ...@@ -15,14 +15,12 @@
#define DBTUP_C #define DBTUP_C
#define DBTUP_STORE_PROC_DEF_CPP
#include "Dbtup.hpp" #include "Dbtup.hpp"
#include <RefConvert.hpp> #include <RefConvert.hpp>
#include <ndb_limits.h> #include <ndb_limits.h>
#include <pc.hpp> #include <pc.hpp>
#define ljam() { jamLine(18000 + __LINE__); }
#define ljamEntry() { jamEntryLine(18000 + __LINE__); }
/* ---------------------------------------------------------------- */ /* ---------------------------------------------------------------- */
/* ---------------------------------------------------------------- */ /* ---------------------------------------------------------------- */
/* ------------ADD/DROP STORED PROCEDURE MODULE ------------------- */ /* ------------ADD/DROP STORED PROCEDURE MODULE ------------------- */
...@@ -32,7 +30,7 @@ void Dbtup::execSTORED_PROCREQ(Signal* signal) ...@@ -32,7 +30,7 @@ void Dbtup::execSTORED_PROCREQ(Signal* signal)
{ {
OperationrecPtr regOperPtr; OperationrecPtr regOperPtr;
TablerecPtr regTabPtr; TablerecPtr regTabPtr;
ljamEntry(); jamEntry();
regOperPtr.i = signal->theData[0]; regOperPtr.i = signal->theData[0];
c_operation_pool.getPtr(regOperPtr); c_operation_pool.getPtr(regOperPtr);
regTabPtr.i = signal->theData[1]; regTabPtr.i = signal->theData[1];
...@@ -46,17 +44,17 @@ void Dbtup::execSTORED_PROCREQ(Signal* signal) ...@@ -46,17 +44,17 @@ void Dbtup::execSTORED_PROCREQ(Signal* signal)
ndbrequire(regTabPtr.p->tableStatus == DEFINED); ndbrequire(regTabPtr.p->tableStatus == DEFINED);
switch (requestInfo) { switch (requestInfo) {
case ZSCAN_PROCEDURE: case ZSCAN_PROCEDURE:
ljam(); jam();
scanProcedure(signal, scanProcedure(signal,
regOperPtr.p, regOperPtr.p,
signal->theData[4]); signal->theData[4]);
break; break;
case ZCOPY_PROCEDURE: case ZCOPY_PROCEDURE:
ljam(); jam();
copyProcedure(signal, regTabPtr, regOperPtr.p); copyProcedure(signal, regTabPtr, regOperPtr.p);
break; break;
case ZSTORED_PROCEDURE_DELETE: case ZSTORED_PROCEDURE_DELETE:
ljam(); jam();
deleteScanProcedure(signal, regOperPtr.p); deleteScanProcedure(signal, regOperPtr.p);
break; break;
default: default:
...@@ -124,14 +122,14 @@ void Dbtup::copyProcedure(Signal* signal, ...@@ -124,14 +122,14 @@ void Dbtup::copyProcedure(Signal* signal,
AttributeHeader::init(&signal->theData[length + 1], Ti, 0); AttributeHeader::init(&signal->theData[length + 1], Ti, 0);
length++; length++;
if (length == 24) { if (length == 24) {
ljam(); jam();
ndbrequire(storedProcedureAttrInfo(signal, regOperPtr, ndbrequire(storedProcedureAttrInfo(signal, regOperPtr,
signal->theData+1, length, true)); signal->theData+1, length, true));
length = 0; length = 0;
}//if }//if
}//for }//for
if (length != 0) { if (length != 0) {
ljam(); jam();
ndbrequire(storedProcedureAttrInfo(signal, regOperPtr, ndbrequire(storedProcedureAttrInfo(signal, regOperPtr,
signal->theData+1, length, true)); signal->theData+1, length, true));
}//if }//if
...@@ -155,7 +153,7 @@ bool Dbtup::storedProcedureAttrInfo(Signal* signal, ...@@ -155,7 +153,7 @@ bool Dbtup::storedProcedureAttrInfo(Signal* signal,
ndbrequire(regOperPtr->currentAttrinbufLen <= regOperPtr->attrinbufLen); ndbrequire(regOperPtr->currentAttrinbufLen <= regOperPtr->attrinbufLen);
if ((RnoFree > MIN_ATTRBUF) || if ((RnoFree > MIN_ATTRBUF) ||
(copyProcedure)) { (copyProcedure)) {
ljam(); jam();
regAttrPtr.i = cfirstfreeAttrbufrec; regAttrPtr.i = cfirstfreeAttrbufrec;
ptrCheckGuard(regAttrPtr, cnoOfAttrbufrec, attrbufrec); ptrCheckGuard(regAttrPtr, cnoOfAttrbufrec, attrbufrec);
regAttrPtr.p->attrbuf[ZBUF_DATA_LEN] = 0; regAttrPtr.p->attrbuf[ZBUF_DATA_LEN] = 0;
...@@ -163,18 +161,18 @@ bool Dbtup::storedProcedureAttrInfo(Signal* signal, ...@@ -163,18 +161,18 @@ bool Dbtup::storedProcedureAttrInfo(Signal* signal,
cnoFreeAttrbufrec = RnoFree - 1; cnoFreeAttrbufrec = RnoFree - 1;
regAttrPtr.p->attrbuf[ZBUF_NEXT] = RNIL; regAttrPtr.p->attrbuf[ZBUF_NEXT] = RNIL;
} else { } else {
ljam(); jam();
storedSeizeAttrinbufrecErrorLab(signal, regOperPtr); storedSeizeAttrinbufrecErrorLab(signal, regOperPtr);
return false; return false;
}//if }//if
if (regOperPtr->firstAttrinbufrec == RNIL) { if (regOperPtr->firstAttrinbufrec == RNIL) {
ljam(); jam();
regOperPtr->firstAttrinbufrec = regAttrPtr.i; regOperPtr->firstAttrinbufrec = regAttrPtr.i;
}//if }//if
regAttrPtr.p->attrbuf[ZBUF_NEXT] = RNIL; regAttrPtr.p->attrbuf[ZBUF_NEXT] = RNIL;
if (regOperPtr->lastAttrinbufrec != RNIL) { if (regOperPtr->lastAttrinbufrec != RNIL) {
AttrbufrecPtr tempAttrinbufptr; AttrbufrecPtr tempAttrinbufptr;
ljam(); jam();
tempAttrinbufptr.i = regOperPtr->lastAttrinbufrec; tempAttrinbufptr.i = regOperPtr->lastAttrinbufrec;
ptrCheckGuard(tempAttrinbufptr, cnoOfAttrbufrec, attrbufrec); ptrCheckGuard(tempAttrinbufptr, cnoOfAttrbufrec, attrbufrec);
tempAttrinbufptr.p->attrbuf[ZBUF_NEXT] = regAttrPtr.i; tempAttrinbufptr.p->attrbuf[ZBUF_NEXT] = regAttrPtr.i;
...@@ -187,7 +185,7 @@ bool Dbtup::storedProcedureAttrInfo(Signal* signal, ...@@ -187,7 +185,7 @@ bool Dbtup::storedProcedureAttrInfo(Signal* signal,
length); length);
if (regOperPtr->currentAttrinbufLen < regOperPtr->attrinbufLen) { if (regOperPtr->currentAttrinbufLen < regOperPtr->attrinbufLen) {
ljam(); jam();
return true; return true;
}//if }//if
if (ERROR_INSERTED(4005) && !copyProcedure) { if (ERROR_INSERTED(4005) && !copyProcedure) {
......
...@@ -15,14 +15,12 @@ ...@@ -15,14 +15,12 @@
#define DBTUP_C #define DBTUP_C
#define DBTUP_TAB_DES_MAN_CPP
#include "Dbtup.hpp" #include "Dbtup.hpp"
#include <RefConvert.hpp> #include <RefConvert.hpp>
#include <ndb_limits.h> #include <ndb_limits.h>
#include <pc.hpp> #include <pc.hpp>
#define ljam() { jamLine(22000 + __LINE__); }
#define ljamEntry() { jamEntryLine(22000 + __LINE__); }
/* /*
* TABLE DESCRIPTOR MEMORY MANAGER * TABLE DESCRIPTOR MEMORY MANAGER
* *
...@@ -65,30 +63,30 @@ Uint32 Dbtup::allocTabDescr(const Tablerec* regTabPtr, Uint32* offset) ...@@ -65,30 +63,30 @@ Uint32 Dbtup::allocTabDescr(const Tablerec* regTabPtr, Uint32* offset)
allocSize = (((allocSize - 1) >> 4) + 1) << 4; allocSize = (((allocSize - 1) >> 4) + 1) << 4;
Uint32 list = nextHigherTwoLog(allocSize - 1); /* CALCULATE WHICH LIST IT BELONGS TO */ Uint32 list = nextHigherTwoLog(allocSize - 1); /* CALCULATE WHICH LIST IT BELONGS TO */
for (Uint32 i = list; i < 16; i++) { for (Uint32 i = list; i < 16; i++) {
ljam(); jam();
if (cfreeTdList[i] != RNIL) { if (cfreeTdList[i] != RNIL) {
ljam(); jam();
reference = cfreeTdList[i]; reference = cfreeTdList[i];
removeTdArea(reference, i); /* REMOVE THE AREA FROM THE FREELIST */ removeTdArea(reference, i); /* REMOVE THE AREA FROM THE FREELIST */
Uint32 retNo = (1 << i) - allocSize; /* CALCULATE THE DIFFERENCE */ Uint32 retNo = (1 << i) - allocSize; /* CALCULATE THE DIFFERENCE */
if (retNo >= ZTD_FREE_SIZE) { if (retNo >= ZTD_FREE_SIZE) {
ljam(); jam();
// return unused words, of course without attempting left merge // return unused words, of course without attempting left merge
Uint32 retRef = reference + allocSize; Uint32 retRef = reference + allocSize;
freeTabDescr(retRef, retNo, false); freeTabDescr(retRef, retNo, false);
} else { } else {
ljam(); jam();
allocSize = 1 << i; allocSize = 1 << i;
}//if }//if
break; break;
}//if }//if
}//for }//for
if (reference == RNIL) { if (reference == RNIL) {
ljam(); jam();
terrorCode = ZMEM_NOTABDESCR_ERROR; terrorCode = ZMEM_NOTABDESCR_ERROR;
return RNIL; return RNIL;
} else { } else {
ljam(); jam();
setTabDescrWord((reference + allocSize) - ZTD_TR_TYPE, ZTD_TYPE_NORMAL); setTabDescrWord((reference + allocSize) - ZTD_TR_TYPE, ZTD_TYPE_NORMAL);
setTabDescrWord(reference + ZTD_DATASIZE, allocSize); setTabDescrWord(reference + ZTD_DATASIZE, allocSize);
...@@ -105,7 +103,7 @@ void Dbtup::freeTabDescr(Uint32 retRef, Uint32 retNo, bool normal) ...@@ -105,7 +103,7 @@ void Dbtup::freeTabDescr(Uint32 retRef, Uint32 retNo, bool normal)
{ {
itdaMergeTabDescr(retRef, retNo, normal); /* MERGE WITH POSSIBLE NEIGHBOURS */ itdaMergeTabDescr(retRef, retNo, normal); /* MERGE WITH POSSIBLE NEIGHBOURS */
while (retNo >= ZTD_FREE_SIZE) { while (retNo >= ZTD_FREE_SIZE) {
ljam(); jam();
Uint32 list = nextHigherTwoLog(retNo); Uint32 list = nextHigherTwoLog(retNo);
list--; /* RETURN TO NEXT LOWER LIST */ list--; /* RETURN TO NEXT LOWER LIST */
Uint32 sizeOfChunk = 1 << list; Uint32 sizeOfChunk = 1 << list;
...@@ -136,7 +134,7 @@ void Dbtup::insertTdArea(Uint32 tabDesRef, Uint32 list) ...@@ -136,7 +134,7 @@ void Dbtup::insertTdArea(Uint32 tabDesRef, Uint32 list)
setTabDescrWord(tabDesRef + ZTD_FL_HEADER, ZTD_TYPE_FREE); setTabDescrWord(tabDesRef + ZTD_FL_HEADER, ZTD_TYPE_FREE);
setTabDescrWord(tabDesRef + ZTD_FL_NEXT, cfreeTdList[list]); setTabDescrWord(tabDesRef + ZTD_FL_NEXT, cfreeTdList[list]);
if (cfreeTdList[list] != RNIL) { if (cfreeTdList[list] != RNIL) {
ljam(); /* PREVIOUSLY EMPTY SLOT */ jam(); /* PREVIOUSLY EMPTY SLOT */
setTabDescrWord(cfreeTdList[list] + ZTD_FL_PREV, tabDesRef); setTabDescrWord(cfreeTdList[list] + ZTD_FL_PREV, tabDesRef);
}//if }//if
cfreeTdList[list] = tabDesRef; /* RELINK THE LIST */ cfreeTdList[list] = tabDesRef; /* RELINK THE LIST */
...@@ -156,28 +154,28 @@ void Dbtup::itdaMergeTabDescr(Uint32& retRef, Uint32& retNo, bool normal) ...@@ -156,28 +154,28 @@ void Dbtup::itdaMergeTabDescr(Uint32& retRef, Uint32& retNo, bool normal)
{ {
// merge right // merge right
while ((retRef + retNo) < cnoOfTabDescrRec) { while ((retRef + retNo) < cnoOfTabDescrRec) {
ljam(); jam();
Uint32 tabDesRef = retRef + retNo; Uint32 tabDesRef = retRef + retNo;
Uint32 headerWord = getTabDescrWord(tabDesRef + ZTD_FL_HEADER); Uint32 headerWord = getTabDescrWord(tabDesRef + ZTD_FL_HEADER);
if (headerWord == ZTD_TYPE_FREE) { if (headerWord == ZTD_TYPE_FREE) {
ljam(); jam();
Uint32 sizeOfMergedPart = getTabDescrWord(tabDesRef + ZTD_FL_SIZE); Uint32 sizeOfMergedPart = getTabDescrWord(tabDesRef + ZTD_FL_SIZE);
retNo += sizeOfMergedPart; retNo += sizeOfMergedPart;
Uint32 list = nextHigherTwoLog(sizeOfMergedPart - 1); Uint32 list = nextHigherTwoLog(sizeOfMergedPart - 1);
removeTdArea(tabDesRef, list); removeTdArea(tabDesRef, list);
} else { } else {
ljam(); jam();
break; break;
} }
} }
// merge left // merge left
const bool mergeLeft = normal; const bool mergeLeft = normal;
while (mergeLeft && retRef > 0) { while (mergeLeft && retRef > 0) {
ljam(); jam();
Uint32 trailerWord = getTabDescrWord(retRef - ZTD_TR_TYPE); Uint32 trailerWord = getTabDescrWord(retRef - ZTD_TR_TYPE);
if (trailerWord == ZTD_TYPE_FREE) { if (trailerWord == ZTD_TYPE_FREE) {
ljam(); jam();
Uint32 sizeOfMergedPart = getTabDescrWord(retRef - ZTD_TR_SIZE); Uint32 sizeOfMergedPart = getTabDescrWord(retRef - ZTD_TR_SIZE);
ndbrequire(retRef >= sizeOfMergedPart); ndbrequire(retRef >= sizeOfMergedPart);
retRef -= sizeOfMergedPart; retRef -= sizeOfMergedPart;
...@@ -185,7 +183,7 @@ void Dbtup::itdaMergeTabDescr(Uint32& retRef, Uint32& retNo, bool normal) ...@@ -185,7 +183,7 @@ void Dbtup::itdaMergeTabDescr(Uint32& retRef, Uint32& retNo, bool normal)
Uint32 list = nextHigherTwoLog(sizeOfMergedPart - 1); Uint32 list = nextHigherTwoLog(sizeOfMergedPart - 1);
removeTdArea(retRef, list); removeTdArea(retRef, list);
} else { } else {
ljam(); jam();
break; break;
} }
} }
...@@ -213,15 +211,15 @@ void Dbtup::removeTdArea(Uint32 tabDesRef, Uint32 list) ...@@ -213,15 +211,15 @@ void Dbtup::removeTdArea(Uint32 tabDesRef, Uint32 list)
setTabDescrWord((tabDesRef + (1 << list)) - ZTD_TR_TYPE, ZTD_TYPE_NORMAL); setTabDescrWord((tabDesRef + (1 << list)) - ZTD_TR_TYPE, ZTD_TYPE_NORMAL);
if (tabDesRef == cfreeTdList[list]) { if (tabDesRef == cfreeTdList[list]) {
ljam(); jam();
cfreeTdList[list] = tabDescrNextPtr; /* RELINK THE LIST */ cfreeTdList[list] = tabDescrNextPtr; /* RELINK THE LIST */
}//if }//if
if (tabDescrNextPtr != RNIL) { if (tabDescrNextPtr != RNIL) {
ljam(); jam();
setTabDescrWord(tabDescrNextPtr + ZTD_FL_PREV, tabDescrPrevPtr); setTabDescrWord(tabDescrNextPtr + ZTD_FL_PREV, tabDescrPrevPtr);
}//if }//if
if (tabDescrPrevPtr != RNIL) { if (tabDescrPrevPtr != RNIL) {
ljam(); jam();
setTabDescrWord(tabDescrPrevPtr + ZTD_FL_NEXT, tabDescrNextPtr); setTabDescrWord(tabDescrPrevPtr + ZTD_FL_NEXT, tabDescrNextPtr);
}//if }//if
}//Dbtup::removeTdArea() }//Dbtup::removeTdArea()
......
...@@ -14,12 +14,9 @@ ...@@ -14,12 +14,9 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#define DBTUP_C #define DBTUP_C
#define DBTUP_VAR_ALLOC_CPP
#include "Dbtup.hpp" #include "Dbtup.hpp"
#define ljam() { jamLine(32000 + __LINE__); }
#define ljamEntry() { jamEntryLine(32000 + __LINE__); }
void Dbtup::init_list_sizes(void) void Dbtup::init_list_sizes(void)
{ {
c_min_list_size[0]= 200; c_min_list_size[0]= 200;
...@@ -109,9 +106,9 @@ Dbtup::alloc_var_part(Fragrecord* fragPtr, ...@@ -109,9 +106,9 @@ Dbtup::alloc_var_part(Fragrecord* fragPtr,
PagePtr pagePtr; PagePtr pagePtr;
pagePtr.i= get_alloc_page(fragPtr, (alloc_size + 1)); pagePtr.i= get_alloc_page(fragPtr, (alloc_size + 1));
if (pagePtr.i == RNIL) { if (pagePtr.i == RNIL) {
ljam(); jam();
if ((pagePtr.i= get_empty_var_page(fragPtr)) == RNIL) { if ((pagePtr.i= get_empty_var_page(fragPtr)) == RNIL) {
ljam(); jam();
return 0; return 0;
} }
c_page_pool.getPtr(pagePtr); c_page_pool.getPtr(pagePtr);
...@@ -127,7 +124,7 @@ Dbtup::alloc_var_part(Fragrecord* fragPtr, ...@@ -127,7 +124,7 @@ Dbtup::alloc_var_part(Fragrecord* fragPtr,
pagePtr.p->page_state = ZTH_MM_FREE; pagePtr.p->page_state = ZTH_MM_FREE;
} else { } else {
c_page_pool.getPtr(pagePtr); c_page_pool.getPtr(pagePtr);
ljam(); jam();
} }
Uint32 idx= ((Var_page*)pagePtr.p) Uint32 idx= ((Var_page*)pagePtr.p)
->alloc_record(alloc_size, (Var_page*)ctemp_page, Var_page::CHAIN); ->alloc_record(alloc_size, (Var_page*)ctemp_page, Var_page::CHAIN);
...@@ -178,7 +175,7 @@ void Dbtup::free_var_rec(Fragrecord* fragPtr, ...@@ -178,7 +175,7 @@ void Dbtup::free_var_rec(Fragrecord* fragPtr,
ndbassert(pagePtr.p->free_space <= Var_page::DATA_WORDS); ndbassert(pagePtr.p->free_space <= Var_page::DATA_WORDS);
if (pagePtr.p->free_space == Var_page::DATA_WORDS - 1) if (pagePtr.p->free_space == Var_page::DATA_WORDS - 1)
{ {
ljam(); jam();
/* /*
This code could be used when we release pages. This code could be used when we release pages.
remove_free_page(signal,fragPtr,page_header,page_header->list_index); remove_free_page(signal,fragPtr,page_header,page_header->list_index);
...@@ -186,7 +183,7 @@ void Dbtup::free_var_rec(Fragrecord* fragPtr, ...@@ -186,7 +183,7 @@ void Dbtup::free_var_rec(Fragrecord* fragPtr,
*/ */
update_free_page_list(fragPtr, pagePtr); update_free_page_list(fragPtr, pagePtr);
} else { } else {
ljam(); jam();
update_free_page_list(fragPtr, pagePtr); update_free_page_list(fragPtr, pagePtr);
} }
return; return;
...@@ -260,16 +257,16 @@ Dbtup::get_alloc_page(Fragrecord* fragPtr, Uint32 alloc_size) ...@@ -260,16 +257,16 @@ Dbtup::get_alloc_page(Fragrecord* fragPtr, Uint32 alloc_size)
start_index= calculate_free_list_impl(alloc_size); start_index= calculate_free_list_impl(alloc_size);
if (start_index == (MAX_FREE_LIST - 1)) { if (start_index == (MAX_FREE_LIST - 1)) {
ljam(); jam();
} else { } else {
ljam(); jam();
ndbrequire(start_index < (MAX_FREE_LIST - 1)); ndbrequire(start_index < (MAX_FREE_LIST - 1));
start_index++; start_index++;
} }
for (i= start_index; i < MAX_FREE_LIST; i++) { for (i= start_index; i < MAX_FREE_LIST; i++) {
ljam(); jam();
if (!fragPtr->free_var_page_array[i].isEmpty()) { if (!fragPtr->free_var_page_array[i].isEmpty()) {
ljam(); jam();
return fragPtr->free_var_page_array[i].firstItem; return fragPtr->free_var_page_array[i].firstItem;
} }
} }
...@@ -278,9 +275,9 @@ Dbtup::get_alloc_page(Fragrecord* fragPtr, Uint32 alloc_size) ...@@ -278,9 +275,9 @@ Dbtup::get_alloc_page(Fragrecord* fragPtr, Uint32 alloc_size)
LocalDLList<Page> list(c_page_pool, fragPtr->free_var_page_array[i]); LocalDLList<Page> list(c_page_pool, fragPtr->free_var_page_array[i]);
for(list.first(pagePtr); !pagePtr.isNull() && loop < 16; ) for(list.first(pagePtr); !pagePtr.isNull() && loop < 16; )
{ {
ljam(); jam();
if (pagePtr.p->free_space >= alloc_size) { if (pagePtr.p->free_space >= alloc_size) {
ljam(); jam();
return pagePtr.i; return pagePtr.i;
} }
loop++; loop++;
...@@ -347,7 +344,7 @@ void Dbtup::update_free_page_list(Fragrecord* fragPtr, ...@@ -347,7 +344,7 @@ void Dbtup::update_free_page_list(Fragrecord* fragPtr,
(free_space > c_max_list_size[list_index])) { (free_space > c_max_list_size[list_index])) {
Uint32 new_list_index= calculate_free_list_impl(free_space); Uint32 new_list_index= calculate_free_list_impl(free_space);
if (list_index != MAX_FREE_LIST) { if (list_index != MAX_FREE_LIST) {
ljam(); jam();
/* /*
* Only remove it from its list if it is in a list * Only remove it from its list if it is in a list
*/ */
...@@ -362,11 +359,11 @@ void Dbtup::update_free_page_list(Fragrecord* fragPtr, ...@@ -362,11 +359,11 @@ void Dbtup::update_free_page_list(Fragrecord* fragPtr,
This can only happen for the free list with least guaranteed This can only happen for the free list with least guaranteed
free space. free space.
*/ */
ljam(); jam();
ndbrequire(new_list_index == 0); ndbrequire(new_list_index == 0);
pagePtr.p->list_index= MAX_FREE_LIST; pagePtr.p->list_index= MAX_FREE_LIST;
} else { } else {
ljam(); jam();
LocalDLList<Page> list(c_page_pool, LocalDLList<Page> list(c_page_pool,
fragPtr->free_var_page_array[new_list_index]); fragPtr->free_var_page_array[new_list_index]);
list.add(pagePtr); list.add(pagePtr);
...@@ -382,9 +379,9 @@ Uint32 Dbtup::calculate_free_list_impl(Uint32 free_space_size) const ...@@ -382,9 +379,9 @@ Uint32 Dbtup::calculate_free_list_impl(Uint32 free_space_size) const
{ {
Uint32 i; Uint32 i;
for (i = 0; i < MAX_FREE_LIST; i++) { for (i = 0; i < MAX_FREE_LIST; i++) {
ljam(); jam();
if (free_space_size <= c_max_list_size[i]) { if (free_space_size <= c_max_list_size[i]) {
ljam(); jam();
return i; return i;
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment