diff -Nur --exclude=RCS --exclude=CVS --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet mysql-5.1.12-beta-br10960/storage/ndb/src/kernel/blocks/dbacc/DbaccMain.cpp pp/storage/ndb/src/kernel/blocks/dbacc/DbaccMain.cpp --- mysql-5.1.12-beta-br10960/storage/ndb/src/kernel/blocks/dbacc/DbaccMain.cpp 2006-10-03 19:50:36 +02:00 +++ pp/storage/ndb/src/kernel/blocks/dbacc/DbaccMain.cpp 2006-11-26 22:08:43 +01:00 @@ -4394,7 +4394,8 @@ Uint32 opbits = operationRecPtr.p->m_op_bits; Uint32 op = opbits & Operationrec::OP_MASK; ndbrequire((opbits & Operationrec::OP_STATE_MASK) == Operationrec::OP_STATE_EXECUTED); - if ((opbits & Operationrec::OP_COMMIT_DELETE_CHECK) == 0 && (op != ZREAD)) + if ((opbits & Operationrec::OP_COMMIT_DELETE_CHECK) == 0 && + (op != ZREAD && op != ZSCAN_OP)) { jam(); /* This method is used to check whether the end result of the transaction diff -Nur --exclude=RCS --exclude=CVS --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet mysql-5.1.12-beta-br10960/storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp pp/storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp --- mysql-5.1.12-beta-br10960/storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp 2006-11-02 13:43:29 +01:00 +++ pp/storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp 2006-11-26 22:19:46 +01:00 @@ -3662,9 +3662,14 @@ case BS_IDLE: jam(); ok = true; - if(c_opRecordPool.getSize() != c_opRecordPool.getNoOfFree()){ + if(c_opRecordPool.getSize() != + (c_opRecordPool.getNoOfFree() + + c_opSubEvent.get_count() + c_opCreateEvent.get_count() + + c_opDropEvent.get_count() + c_opSignalUtil.get_count())) + { jam(); c_blockState = BS_NODE_FAILURE; + ndbout_c("BS_NODE_FAILURE"); } break; case BS_CREATE_TAB: @@ -9914,6 +9919,8 @@ // Seize a Create Event record, the Coordinator will now have two seized // but that's ok, it's like a recursion + CRASH_INSERTION2(6009, getOwnNodeId() != c_masterNodeId); + SubCreateReq * sumaReq = (SubCreateReq *)signal->getDataPtrSend(); sumaReq->senderRef = reference(); // reference to DICT @@ -10174,6 +10181,8 @@ * Participant */ ndbrequire(refToBlock(origSenderRef) == DBDICT); + + CRASH_INSERTION(6007); { SubStartReq* req = (SubStartReq*) signal->getDataPtrSend(); @@ -10409,6 +10418,9 @@ ndbout_c("SUB_STOP_REQ 2"); #endif ndbrequire(refToBlock(origSenderRef) == DBDICT); + + CRASH_INSERTION(6008); + { SubStopReq* req = (SubStopReq*) signal->getDataPtrSend(); @@ -10738,6 +10750,8 @@ subbPtr.p->m_errorCode = 0; } + CRASH_INSERTION2(6010, getOwnNodeId() != c_masterNodeId); + SubRemoveReq* req = (SubRemoveReq*) signal->getDataPtrSend(); req->senderRef = reference(); req->senderData = subbPtr.i; diff -Nur --exclude=RCS --exclude=CVS --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet mysql-5.1.12-beta-br10960/storage/ndb/src/kernel/blocks/dbdict/Dbdict.hpp pp/storage/ndb/src/kernel/blocks/dbdict/Dbdict.hpp --- mysql-5.1.12-beta-br10960/storage/ndb/src/kernel/blocks/dbdict/Dbdict.hpp 2006-10-03 20:10:22 +02:00 +++ pp/storage/ndb/src/kernel/blocks/dbdict/Dbdict.hpp 2006-11-26 22:08:43 +01:00 @@ -2041,10 +2041,10 @@ KeyTable2 c_opDropIndex; KeyTable2 c_opAlterIndex; KeyTable2 c_opBuildIndex; - KeyTable2 c_opCreateEvent; - KeyTable2 c_opSubEvent; - KeyTable2 c_opDropEvent; - KeyTable2 c_opSignalUtil; + KeyTable2C c_opCreateEvent; + KeyTable2C c_opSubEvent; + KeyTable2C c_opDropEvent; + KeyTable2C c_opSignalUtil; KeyTable2 c_opCreateTrigger; KeyTable2 c_opDropTrigger; KeyTable2 c_opAlterTrigger; diff -Nur --exclude=RCS --exclude=CVS --exclude=SCCS --exclude=BitKeeper --exclude=ChangeSet mysql-5.1.12-beta-br10960/storage/ndb/src/kernel/vm/KeyTable2.hpp pp/storage/ndb/src/kernel/vm/KeyTable2.hpp --- mysql-5.1.12-beta-br10960/storage/ndb/src/kernel/vm/KeyTable2.hpp 2006-10-03 20:10:22 +02:00 +++ pp/storage/ndb/src/kernel/vm/KeyTable2.hpp 2006-11-26 22:08:43 +01:00 @@ -40,4 +40,76 @@ } }; +template +class KeyTable2C : public KeyTable2 { + Uint32 m_count; +public: + KeyTable2C(ArrayPool& pool) : + KeyTable2(pool), m_count(0) { + } + + Uint32 get_count() const { return m_count; } + + bool seize(Ptr & ptr) { + if (KeyTable2::seize(ptr)) + { + m_count ++; + return true; + } + return false; + } + + void add(Ptr & ptr) { + KeyTable2::add(ptr); + m_count ++; + } + + void remove(Ptr & ptr, const T & key) { + KeyTable2::remove(ptr, key); + if (ptr.i != RNIL) + { + assert(m_count); + m_count --; + } + } + + void remove(Uint32 i) { + KeyTable2::remove(i); + assert(m_count); + m_count --; + } + + void remove(Ptr & ptr) { + KeyTable2::remove(ptr); + assert(m_count); + m_count --; + } + + void removeAll() { + KeyTable2::removeAll(); + m_count = 0; + } + + void release(Ptr & ptr, const T & key) { + KeyTable2::release(ptr, key); + if (ptr.i != RNIL) + { + assert(m_count); + m_count --; + } + } + + void release(Uint32 i) { + KeyTable2::release(i); + assert(m_count); + m_count --; + } + + void release(Ptr & ptr) { + KeyTable2::release(ptr); + assert(m_count); + m_count --; + } +}; + #endif