Make operation list on fragment fifo so that uncommitted operations

are undo-logged in correct order

Add bunch of testcases to autotest


ndb/src/kernel/blocks/dbtup/Dbtup.hpp:
  Send fragrecord ptr to initOpConnection so that is does not
  have to look it up every time (if needed)
  
  Make operation list on fragment fifo so that uncommitted operations
    are undo-logged in correct order
ndb/src/kernel/blocks/dbtup/DbtupAbort.cpp:
  Send fragptr to initOpConnection
ndb/src/kernel/blocks/dbtup/DbtupCommit.cpp:
  dllist -> dlfifolist
ndb/src/kernel/blocks/dbtup/DbtupExecQuery.cpp:
  dllist -> dlfifolist
ndb/src/kernel/blocks/dbtup/DbtupGen.cpp:
  Make operation list on fragment fifo so that uncommitted operations
    are undo-logged in correct order
ndb/src/kernel/blocks/ndbcntr/NdbcntrMain.cpp:
  Fix uninitialized variable c_start.m_startTime
    which made startPartial and startPartitioned fail
ndb/test/ndbapi/testSystemRestart.cpp:
  Added testSystemRestart -n SR9 which
    demonstrates that two prepared operation on same
    records _used to_ be undo-logged in wrong order makeing
    system restart fail
ndb/test/run-test/daily-devel-tests.txt:
  Add
  * testSystemRestart -n SR6
    Restart while some nodes have fs and other not
  * testSystemRestart -n SR7
    Restart in partition win
  * testSystemRestart -n SR8
    Restart in partition win, others starting during restart
  * testSystemRestart -n SR9
    Multiple ops on same record prepared before
This commit is contained in:
unknown 2004-09-21 14:58:23 +02:00
commit b61bfd8c97
8 changed files with 103 additions and 30 deletions

View file

@ -319,24 +319,20 @@ void Dbtup::linkOpIntoFragList(OperationrecPtr regOperPtr,
Fragrecord* const regFragPtr)
{
OperationrecPtr sopTmpOperPtr;
/* ----------------------------------------------------------------- */
/* LINK THE OPERATION INTO A DOUBLY LINKED LIST ON THE FRAGMENT*/
/* PUT IT FIRST IN THIS LIST SINCE IT DOESN'T MATTER WHERE IT */
/* IS PUT. */
/* ----------------------------------------------------------------- */
Uint32 tail = regFragPtr->lastusedOprec;
ndbrequire(regOperPtr.p->inFragList == ZFALSE);
regOperPtr.p->inFragList = ZTRUE;
regOperPtr.p->prevOprecInList = RNIL;
sopTmpOperPtr.i = regFragPtr->firstusedOprec;
regFragPtr->firstusedOprec = regOperPtr.i;
regOperPtr.p->nextOprecInList = sopTmpOperPtr.i;
if (sopTmpOperPtr.i == RNIL) {
return;
regOperPtr.p->prevOprecInList = tail;
regOperPtr.p->nextOprecInList = RNIL;
sopTmpOperPtr.i = tail;
if (tail == RNIL) {
regFragPtr->firstusedOprec = regOperPtr.i;
} else {
jam();
ptrCheckGuard(sopTmpOperPtr, cnoOfOprec, operationrec);
sopTmpOperPtr.p->prevOprecInList = regOperPtr.i;
sopTmpOperPtr.p->nextOprecInList = regOperPtr.i;
}//if
regFragPtr->lastusedOprec = regOperPtr.i;
}//Dbtup::linkOpIntoFragList()
/*