ndb - bug#15303

  Fix take-over during SR, remove coupling to lcp/gcp (if systemRestartOngoing())
parent 1c7a4620
...@@ -1265,9 +1265,9 @@ void Dbdih::execNDB_STTOR(Signal* signal) ...@@ -1265,9 +1265,9 @@ void Dbdih::execNDB_STTOR(Signal* signal)
if (isMaster()) { if (isMaster()) {
jam(); jam();
systemRestartTakeOverLab(signal); systemRestartTakeOverLab(signal);
if (anyActiveTakeOver() && false) { if (anyActiveTakeOver())
{
jam(); jam();
ndbout_c("1 - anyActiveTakeOver == true");
return; return;
} }
} }
...@@ -2260,6 +2260,8 @@ Dbdih::systemRestartTakeOverLab(Signal* signal) ...@@ -2260,6 +2260,8 @@ Dbdih::systemRestartTakeOverLab(Signal* signal)
// NOT ACTIVE NODES THAT HAVE NOT YET BEEN TAKEN OVER NEEDS TAKE OVER // NOT ACTIVE NODES THAT HAVE NOT YET BEEN TAKEN OVER NEEDS TAKE OVER
// IMMEDIATELY. IF WE ARE ALIVE WE TAKE OVER OUR OWN NODE. // IMMEDIATELY. IF WE ARE ALIVE WE TAKE OVER OUR OWN NODE.
/*-------------------------------------------------------------------*/ /*-------------------------------------------------------------------*/
infoEvent("Take over of node %d started",
nodePtr.i);
startTakeOver(signal, RNIL, nodePtr.i, nodePtr.i); startTakeOver(signal, RNIL, nodePtr.i, nodePtr.i);
}//if }//if
break; break;
...@@ -2372,6 +2374,12 @@ void Dbdih::nodeRestartTakeOver(Signal* signal, Uint32 startNodeId) ...@@ -2372,6 +2374,12 @@ void Dbdih::nodeRestartTakeOver(Signal* signal, Uint32 startNodeId)
*--------------------------------------------------------------------*/ *--------------------------------------------------------------------*/
Uint32 takeOverNode = Sysfile::getTakeOverNode(startNodeId, Uint32 takeOverNode = Sysfile::getTakeOverNode(startNodeId,
SYSFILE->takeOver); SYSFILE->takeOver);
if(takeOverNode == 0){
jam();
warningEvent("Bug in take-over code restarting");
takeOverNode = startNodeId;
}
startTakeOver(signal, RNIL, startNodeId, takeOverNode); startTakeOver(signal, RNIL, startNodeId, takeOverNode);
break; break;
} }
...@@ -2525,7 +2533,14 @@ void Dbdih::startTakeOver(Signal* signal, ...@@ -2525,7 +2533,14 @@ void Dbdih::startTakeOver(Signal* signal,
Sysfile::setTakeOverNode(takeOverPtr.p->toFailedNode, SYSFILE->takeOver, Sysfile::setTakeOverNode(takeOverPtr.p->toFailedNode, SYSFILE->takeOver,
startNode); startNode);
takeOverPtr.p->toMasterStatus = TakeOverRecord::TO_START_COPY; takeOverPtr.p->toMasterStatus = TakeOverRecord::TO_START_COPY;
if (getNodeState().getSystemRestartInProgress())
{
jam();
checkToCopy();
checkToCopyCompleted(signal);
return;
}
cstartGcpNow = true; cstartGcpNow = true;
}//Dbdih::startTakeOver() }//Dbdih::startTakeOver()
...@@ -3273,6 +3288,18 @@ void Dbdih::toCopyCompletedLab(Signal * signal, TakeOverRecordPtr takeOverPtr) ...@@ -3273,6 +3288,18 @@ void Dbdih::toCopyCompletedLab(Signal * signal, TakeOverRecordPtr takeOverPtr)
signal->theData[1] = takeOverPtr.p->toStartingNode; signal->theData[1] = takeOverPtr.p->toStartingNode;
sendSignal(CMVMI_REF, GSN_EVENT_REP, signal, 2, JBB); sendSignal(CMVMI_REF, GSN_EVENT_REP, signal, 2, JBB);
if (getNodeState().getSystemRestartInProgress())
{
jam();
infoEvent("Take over of node %d complete", takeOverPtr.p->toStartingNode);
setNodeActiveStatus(takeOverPtr.p->toStartingNode, Sysfile::NS_Active);
takeOverPtr.p->toMasterStatus = TakeOverRecord::WAIT_LCP;
takeOverCompleted(takeOverPtr.p->toStartingNode);
checkToCopy();
checkToCopyCompleted(signal);
return;
}
c_lcpState.immediateLcpStart = true; c_lcpState.immediateLcpStart = true;
takeOverPtr.p->toMasterStatus = TakeOverRecord::WAIT_LCP; takeOverPtr.p->toMasterStatus = TakeOverRecord::WAIT_LCP;
...@@ -3379,16 +3406,12 @@ void Dbdih::execEND_TOCONF(Signal* signal) ...@@ -3379,16 +3406,12 @@ void Dbdih::execEND_TOCONF(Signal* signal)
}//if }//if
endTakeOver(takeOverPtr.i); endTakeOver(takeOverPtr.i);
ndbout_c("2 - endTakeOver");
if (cstartPhase == ZNDB_SPH4) { if (cstartPhase == ZNDB_SPH4) {
jam(); jam();
ndbrequire(false);
if (anyActiveTakeOver()) { if (anyActiveTakeOver()) {
jam(); jam();
ndbout_c("4 - anyActiveTakeOver == true");
return; return;
}//if }//if
ndbout_c("5 - anyActiveTakeOver == false -> ndbsttorry10Lab");
ndbsttorry10Lab(signal, __LINE__); ndbsttorry10Lab(signal, __LINE__);
return; return;
}//if }//if
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment