diff options
author | unknown <jonas@perch.ndb.mysql.com> | 2006-12-01 14:06:15 +0100 |
---|---|---|
committer | unknown <jonas@perch.ndb.mysql.com> | 2006-12-01 14:06:15 +0100 |
commit | 10a497a623f9b5b7176e9edad8b077597471e284 (patch) | |
tree | 0511f02a52c41e90cbfbfbc6235d99209b09c403 /storage/ndb | |
parent | 2b1df53702f63789b9ddd5e51b4a392ae9ecfd5e (diff) | |
parent | 3a7bb77df5593f69aca1e1893d3afc73207dcffe (diff) | |
download | mariadb-git-10a497a623f9b5b7176e9edad8b077597471e284.tar.gz |
Merge perch.ndb.mysql.com:/home/jonas/src/51-work
into perch.ndb.mysql.com:/home/jonas/src/mysql-5.1-new-ndb
storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp:
Auto merged
Diffstat (limited to 'storage/ndb')
-rw-r--r-- | storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp | 24 | ||||
-rw-r--r-- | storage/ndb/src/kernel/blocks/dbdict/Dbdict.hpp | 8 | ||||
-rw-r--r-- | storage/ndb/src/kernel/vm/KeyTable2.hpp | 72 |
3 files changed, 99 insertions, 5 deletions
diff --git a/storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp b/storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp index 8d0c427d488..2098c196f2b 100644 --- a/storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp +++ b/storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp @@ -3624,7 +3624,11 @@ void Dbdict::execNODE_FAILREP(Signal* signal) 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; } @@ -9846,6 +9850,8 @@ Dbdict::createEvent_RT_DICT_AFTER_GET(Signal* signal, OpCreateEventPtr evntRecPt // 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 @@ -10104,6 +10110,8 @@ busy: * Participant */ ndbrequire(refToBlock(origSenderRef) == DBDICT); + + CRASH_INSERTION(6007); { SubStartReq* req = (SubStartReq*) signal->getDataPtrSend(); @@ -10334,6 +10342,9 @@ busy: ndbout_c("SUB_STOP_REQ 2"); #endif ndbrequire(refToBlock(origSenderRef) == DBDICT); + + CRASH_INSERTION(6008); + { SubStopReq* req = (SubStopReq*) signal->getDataPtrSend(); @@ -10659,6 +10670,8 @@ Dbdict::execSUB_REMOVE_REQ(Signal* signal) subbPtr.p->m_errorCode = 0; } + CRASH_INSERTION2(6010, getOwnNodeId() != c_masterNodeId); + SubRemoveReq* req = (SubRemoveReq*) signal->getDataPtrSend(); req->senderRef = reference(); req->senderData = subbPtr.i; @@ -13738,6 +13751,15 @@ Dbdict::checkDictLockQueue(Signal* signal, bool poll) break; } + if (c_blockState != BS_IDLE) + { + /** + * If state is BS_NODE_FAILURE, it might be that no op is running + */ + jam(); + break; + } + ndbrequire(c_blockState == BS_IDLE); lockPtr.p->locked = true; c_blockState = lockPtr.p->lt->blockState; diff --git a/storage/ndb/src/kernel/blocks/dbdict/Dbdict.hpp b/storage/ndb/src/kernel/blocks/dbdict/Dbdict.hpp index 046518aeddc..718d53d8b96 100644 --- a/storage/ndb/src/kernel/blocks/dbdict/Dbdict.hpp +++ b/storage/ndb/src/kernel/blocks/dbdict/Dbdict.hpp @@ -2041,10 +2041,10 @@ private: KeyTable2<OpDropIndex, OpRecordUnion> c_opDropIndex; KeyTable2<OpAlterIndex, OpRecordUnion> c_opAlterIndex; KeyTable2<OpBuildIndex, OpRecordUnion> c_opBuildIndex; - KeyTable2<OpCreateEvent, OpRecordUnion> c_opCreateEvent; - KeyTable2<OpSubEvent, OpRecordUnion> c_opSubEvent; - KeyTable2<OpDropEvent, OpRecordUnion> c_opDropEvent; - KeyTable2<OpSignalUtil, OpRecordUnion> c_opSignalUtil; + KeyTable2C<OpCreateEvent, OpRecordUnion> c_opCreateEvent; + KeyTable2C<OpSubEvent, OpRecordUnion> c_opSubEvent; + KeyTable2C<OpDropEvent, OpRecordUnion> c_opDropEvent; + KeyTable2C<OpSignalUtil, OpRecordUnion> c_opSignalUtil; KeyTable2<OpCreateTrigger, OpRecordUnion> c_opCreateTrigger; KeyTable2<OpDropTrigger, OpRecordUnion> c_opDropTrigger; KeyTable2<OpAlterTrigger, OpRecordUnion> c_opAlterTrigger; diff --git a/storage/ndb/src/kernel/vm/KeyTable2.hpp b/storage/ndb/src/kernel/vm/KeyTable2.hpp index 5c2b3096abe..22b2c16f540 100644 --- a/storage/ndb/src/kernel/vm/KeyTable2.hpp +++ b/storage/ndb/src/kernel/vm/KeyTable2.hpp @@ -40,4 +40,76 @@ public: } }; +template <class T, class U> +class KeyTable2C : public KeyTable2<T, U> { + Uint32 m_count; +public: + KeyTable2C(ArrayPool<U>& pool) : + KeyTable2<T, U>(pool), m_count(0) { + } + + Uint32 get_count() const { return m_count; } + + bool seize(Ptr<T> & ptr) { + if (KeyTable2<T, U>::seize(ptr)) + { + m_count ++; + return true; + } + return false; + } + + void add(Ptr<T> & ptr) { + KeyTable2<T, U>::add(ptr); + m_count ++; + } + + void remove(Ptr<T> & ptr, const T & key) { + KeyTable2<T, U>::remove(ptr, key); + if (ptr.i != RNIL) + { + assert(m_count); + m_count --; + } + } + + void remove(Uint32 i) { + KeyTable2<T, U>::remove(i); + assert(m_count); + m_count --; + } + + void remove(Ptr<T> & ptr) { + KeyTable2<T, U>::remove(ptr); + assert(m_count); + m_count --; + } + + void removeAll() { + KeyTable2<T, U>::removeAll(); + m_count = 0; + } + + void release(Ptr<T> & ptr, const T & key) { + KeyTable2<T, U>::release(ptr, key); + if (ptr.i != RNIL) + { + assert(m_count); + m_count --; + } + } + + void release(Uint32 i) { + KeyTable2<T, U>::release(i); + assert(m_count); + m_count --; + } + + void release(Ptr<T> & ptr) { + KeyTable2<T, U>::release(ptr); + assert(m_count); + m_count --; + } +}; + #endif |