summaryrefslogtreecommitdiff
path: root/ndb
diff options
context:
space:
mode:
authorunknown <jonas@perch.ndb.mysql.com>2007-07-03 08:39:42 +0200
committerunknown <jonas@perch.ndb.mysql.com>2007-07-03 08:39:42 +0200
commitd55ca61738c0010878f7bcfb4f5f902b886c4a06 (patch)
treeffe4f42c554cb00a77e00d7db9b6b93f53c56159 /ndb
parentf83a63ad48f624bc783f3b4fb55660e2baba0702 (diff)
downloadmariadb-git-d55ca61738c0010878f7bcfb4f5f902b886c4a06.tar.gz
ndb - bug#29354 - Incorrect handling of replica REDO during SR (5.0)
Not very clever fix for DIH incorrect REDO handling - Dont report GCP_SAVE_CONF until first LCP has been complete during NR ndb/src/kernel/blocks/dblqh/DblqhMain.cpp: Not very clever fix for DIH incorrect REDO handling - Dont report GCP_SAVE_CONF until first LCP has been complete during NR
Diffstat (limited to 'ndb')
-rw-r--r--ndb/src/kernel/blocks/dblqh/DblqhMain.cpp27
1 files changed, 23 insertions, 4 deletions
diff --git a/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp b/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp
index 9c6242b3600..7dac07c28e9 100644
--- a/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp
+++ b/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp
@@ -11164,6 +11164,13 @@ void Dblqh::sendLCP_COMPLETE_REP(Signal* signal, Uint32 lcpId)
jam();
sendEMPTY_LCP_CONF(signal, true);
}
+
+ if (getNodeState().getNodeRestartInProgress())
+ {
+ jam();
+ ndbrequire(cstartRecReq == 2);
+ cstartRecReq = 3;
+ }
return;
}//Dblqh::sendCOMP_LCP_ROUND()
@@ -11729,15 +11736,27 @@ void Dblqh::execGCP_SAVEREQ(Signal* signal)
return;
}
- ccurrentGcprec = 0;
- gcpPtr.i = ccurrentGcprec;
- ptrCheckGuard(gcpPtr, cgcprecFileSize, gcpRecord);
-
cnewestCompletedGci = gci;
if (gci > cnewestGci) {
jam();
cnewestGci = gci;
}//if
+
+ if(getNodeState().getNodeRestartInProgress() && cstartRecReq < 3)
+ {
+ GCPSaveRef * const saveRef = (GCPSaveRef*)&signal->theData[0];
+ saveRef->dihPtr = dihPtr;
+ saveRef->nodeId = getOwnNodeId();
+ saveRef->gci = gci;
+ saveRef->errorCode = GCPSaveRef::NodeRestartInProgress;
+ sendSignal(dihBlockRef, GSN_GCP_SAVEREF, signal,
+ GCPSaveRef::SignalLength, JBB);
+ return;
+ }
+
+ ccurrentGcprec = 0;
+ gcpPtr.i = ccurrentGcprec;
+ ptrCheckGuard(gcpPtr, cgcprecFileSize, gcpRecord);
gcpPtr.p->gcpBlockref = dihBlockRef;
gcpPtr.p->gcpUserptr = dihPtr;