diff options
author | unknown <jonas@perch.ndb.mysql.com> | 2007-07-03 08:39:42 +0200 |
---|---|---|
committer | unknown <jonas@perch.ndb.mysql.com> | 2007-07-03 08:39:42 +0200 |
commit | d55ca61738c0010878f7bcfb4f5f902b886c4a06 (patch) | |
tree | ffe4f42c554cb00a77e00d7db9b6b93f53c56159 /ndb | |
parent | f83a63ad48f624bc783f3b4fb55660e2baba0702 (diff) | |
download | mariadb-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.cpp | 27 |
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; |