mirror of
https://github.com/MariaDB/server.git
synced 2026-05-16 20:07:13 +02:00
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
This commit is contained in:
commit
10a497a623
3 changed files with 99 additions and 5 deletions
|
|
@ -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
|
||||
|
|
@ -10105,6 +10111,8 @@ busy:
|
|||
*/
|
||||
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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue