Commit 80d95552 authored by jonas@perch.ndb.mysql.com's avatar jonas@perch.ndb.mysql.com
Browse files

ndb - bug#32519

  Add *correct* check when a LCP is restorable
  by looking at maxGciStarted from LCP_FRAG_REP
  (for all fragments)

  bug observed by running testSystemRestart -n SR_DD_1_LCP T1
  (causes "incorrect" behaviour in 51-ndb, and crash when using 2 LCP)
parent e3d07622
Loading
Loading
Loading
Loading
+14 −4
Original line number Diff line number Diff line
@@ -10678,6 +10678,12 @@ void Dbdih::execLCP_FRAG_REP(Signal* signal)
  Uint32 started = lcpReport->maxGciStarted;
  Uint32 completed = lcpReport->maxGciCompleted;
  if (started > c_lcpState.lcpStopGcp)
  {
    jam();
    c_lcpState.lcpStopGcp = started;
  }
  if(tableDone){
    jam();
@@ -11218,7 +11224,12 @@ void Dbdih::allNodesLcpCompletedLab(Signal* signal)
  signal->theData[0] = NDB_LE_LocalCheckpointCompleted; //Event type
  signal->theData[1] = SYSFILE->latestLCP_ID;
  sendSignal(CMVMI_REF, GSN_EVENT_REP, signal, 2, JBB);
  if (c_newest_restorable_gci > c_lcpState.lcpStopGcp)
  {
    jam();
    c_lcpState.lcpStopGcp = c_newest_restorable_gci;
  }
  
  /**
   * Start checking for next LCP
@@ -12088,13 +12099,12 @@ void Dbdih::findMinGci(ReplicaRecordPtr fmgReplicaPtr,
  lcpNo = fmgReplicaPtr.p->nextLcp;
  do {
    ndbrequire(lcpNo < MAX_LCP_STORED);
    if (fmgReplicaPtr.p->lcpStatus[lcpNo] == ZVALID &&
	fmgReplicaPtr.p->maxGciStarted[lcpNo] < c_newest_restorable_gci)
    if (fmgReplicaPtr.p->lcpStatus[lcpNo] == ZVALID)
    {
      jam();
      keepGci = fmgReplicaPtr.p->maxGciCompleted[lcpNo];
      oldestRestorableGci = fmgReplicaPtr.p->maxGciStarted[lcpNo];
      ndbrequire(((int)oldestRestorableGci) >= 0);      
      ndbassert(fmgReplicaPtr.p->maxGciStarted[lcpNo] <c_newest_restorable_gci);
      return;
    } else {
      jam();