diff options
author | unknown <jonas@perch.ndb.mysql.com> | 2007-03-16 11:12:15 +0100 |
---|---|---|
committer | unknown <jonas@perch.ndb.mysql.com> | 2007-03-16 11:12:15 +0100 |
commit | 1af746bf1f3a624aab47367f6426eaab654ff9e7 (patch) | |
tree | f0a1b2223551471b2578d3968d21950155720045 /storage | |
parent | e61883c95927ed9bfa8e8bb6960c549a3e63fa10 (diff) | |
parent | 5df4ea9a3f629023751bccb0033613441ab4a3ba (diff) | |
download | mariadb-git-1af746bf1f3a624aab47367f6426eaab654ff9e7.tar.gz |
Merge perch.ndb.mysql.com:/home/jonas/src/51-telco-gca
into perch.ndb.mysql.com:/home/jonas/src/mysql-5.1-new-ndb
storage/ndb/src/kernel/blocks/dbacc/Dbacc.hpp:
Auto merged
storage/ndb/src/kernel/blocks/dbacc/DbaccMain.cpp:
Auto merged
Diffstat (limited to 'storage')
-rw-r--r-- | storage/ndb/src/kernel/blocks/dbacc/Dbacc.hpp | 2 | ||||
-rw-r--r-- | storage/ndb/src/kernel/blocks/dbacc/DbaccMain.cpp | 19 |
2 files changed, 16 insertions, 5 deletions
diff --git a/storage/ndb/src/kernel/blocks/dbacc/Dbacc.hpp b/storage/ndb/src/kernel/blocks/dbacc/Dbacc.hpp index ca348b23e6a..21114c6a155 100644 --- a/storage/ndb/src/kernel/blocks/dbacc/Dbacc.hpp +++ b/storage/ndb/src/kernel/blocks/dbacc/Dbacc.hpp @@ -760,7 +760,7 @@ private: void increaselistcont(Signal* signal); void seizeLeftlist(Signal* signal); void seizeRightlist(Signal* signal); - Uint32 readTablePk(Uint32 localkey1, Uint32 eh, const Operationrec*); + Uint32 readTablePk(Uint32 localkey1, Uint32 eh, OperationrecPtr); Uint32 getElement(Signal* signal, OperationrecPtr& lockOwner); void getdirindex(Signal* signal); void commitdelete(Signal* signal); diff --git a/storage/ndb/src/kernel/blocks/dbacc/DbaccMain.cpp b/storage/ndb/src/kernel/blocks/dbacc/DbaccMain.cpp index b90a000d55b..0ba5908ddb4 100644 --- a/storage/ndb/src/kernel/blocks/dbacc/DbaccMain.cpp +++ b/storage/ndb/src/kernel/blocks/dbacc/DbaccMain.cpp @@ -46,6 +46,7 @@ ndbrequire(false); } } while(0) #else #define vlqrequire(x) ndbrequire(x) +#define dump_lock_queue(x) #endif @@ -3182,7 +3183,7 @@ void Dbacc::getdirindex(Signal* signal) }//Dbacc::getdirindex() Uint32 -Dbacc::readTablePk(Uint32 localkey1, Uint32 eh, const Operationrec* op) +Dbacc::readTablePk(Uint32 localkey1, Uint32 eh, Ptr<Operationrec> opPtr) { int ret; Uint32 tableId = fragrecptr.p->myTableId; @@ -3203,8 +3204,17 @@ Dbacc::readTablePk(Uint32 localkey1, Uint32 eh, const Operationrec* op) else { ndbrequire(ElementHeader::getLocked(eh)); - ndbrequire((op->m_op_bits & Operationrec::OP_MASK) != ZSCAN_OP); - ret = c_lqh->readPrimaryKeys(op->userptr, ckeys, xfrm); + if (unlikely((opPtr.p->m_op_bits & Operationrec::OP_MASK) == ZSCAN_OP)) + { + dump_lock_queue(opPtr); + ndbrequire(opPtr.p->nextParallelQue == RNIL); + ndbrequire(opPtr.p->nextSerialQue == RNIL); + ndbrequire(opPtr.p->m_op_bits & Operationrec::OP_ELEMENT_DISAPPEARED); + ndbrequire(opPtr.p->m_op_bits & Operationrec::OP_COMMIT_DELETE_CHECK); + ndbrequire((opPtr.p->m_op_bits & Operationrec::OP_STATE_MASK) == Operationrec::OP_STATE_RUNNING); + return 0; + } + ret = c_lqh->readPrimaryKeys(opPtr.p->userptr, ckeys, xfrm); } jamEntry(); ndbrequire(ret >= 0); @@ -3349,7 +3359,7 @@ Dbacc::getElement(Signal* signal, OperationrecPtr& lockOwnerPtr) if (! searchLocalKey) { Uint32 len = readTablePk(localkey1, tgeElementHeader, - lockOwnerPtr.p); + lockOwnerPtr); found = (len == operationRecPtr.p->xfrmtupkeylen) && (memcmp(Tkeydata, ckeys, len << 2) == 0); } else { @@ -6864,6 +6874,7 @@ void Dbacc::execACC_TO_REQ(Signal* signal) { tatrOpPtr.p->transId1 = signal->theData[2]; tatrOpPtr.p->transId2 = signal->theData[3]; + validate_lock_queue(tatrOpPtr); } else { jam(); signal->theData[0] = cminusOne; |