diff options
author | pekka@mysql.com <> | 2005-03-03 12:45:49 +0100 |
---|---|---|
committer | pekka@mysql.com <> | 2005-03-03 12:45:49 +0100 |
commit | 59ffe5bdf8aa03770acd908c0fdd474c22ac8084 (patch) | |
tree | 66f490fbb84f68e59fea82a4dcf1fd750a9e941f /ndb | |
parent | 4b7d6244ef890c21fda27c51636cb07f7bde1f11 (diff) | |
download | mariadb-git-59ffe5bdf8aa03770acd908c0fdd474c22ac8084.tar.gz |
ndb - bug#8876 third and final solution
Diffstat (limited to 'ndb')
-rw-r--r-- | ndb/src/kernel/blocks/dbtc/DbtcMain.cpp | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp b/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp index b30da54479b..03a0590b6e2 100644 --- a/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp +++ b/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp @@ -5923,11 +5923,17 @@ int Dbtc::releaseAndAbort(Signal* signal) UintR TnoLoops = tcConnectptr.p->noOfNodes; apiConnectptr.p->counter++; + bool prevAlive = false; for (Uint32 Ti = 0; Ti < TnoLoops ; Ti++) { localHostptr.i = tcConnectptr.p->tcNodedata[Ti]; ptrCheckGuard(localHostptr, chostFilesize, hostRecord); if (localHostptr.p->hostStatus == HS_ALIVE) { jam(); + if (prevAlive) { + // if previous is alive, its LQH forwards abort to this node + jam(); + continue; + } /* ************< */ /* ABORT < */ /* ************< */ @@ -5937,6 +5943,7 @@ int Dbtc::releaseAndAbort(Signal* signal) signal->theData[2] = apiConnectptr.p->transid[0]; signal->theData[3] = apiConnectptr.p->transid[1]; sendSignal(tblockref, GSN_ABORT, signal, 4, JBB); + prevAlive = true; } else { jam(); signal->theData[0] = tcConnectptr.i; @@ -5945,6 +5952,7 @@ int Dbtc::releaseAndAbort(Signal* signal) signal->theData[3] = localHostptr.i; signal->theData[4] = ZFALSE; sendSignal(cownref, GSN_ABORTED, signal, 5, JBB); + prevAlive = false; }//if }//for return 1; |