summaryrefslogtreecommitdiff
path: root/ndb
diff options
context:
space:
mode:
authorpekka@mysql.com <>2005-03-03 12:45:49 +0100
committerpekka@mysql.com <>2005-03-03 12:45:49 +0100
commit59ffe5bdf8aa03770acd908c0fdd474c22ac8084 (patch)
tree66f490fbb84f68e59fea82a4dcf1fd750a9e941f /ndb
parent4b7d6244ef890c21fda27c51636cb07f7bde1f11 (diff)
downloadmariadb-git-59ffe5bdf8aa03770acd908c0fdd474c22ac8084.tar.gz
ndb - bug#8876 third and final solution
Diffstat (limited to 'ndb')
-rw-r--r--ndb/src/kernel/blocks/dbtc/DbtcMain.cpp8
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;