Commit c1a6def2 authored by unknown's avatar unknown
Browse files

Merge perch.ndb.mysql.com:/home/jonas/src/41-work

into  perch.ndb.mysql.com:/home/jonas/src/mysql-4.1


ndb/src/kernel/blocks/dbdih/DbdihMain.cpp:
  Auto merged
ndb/src/kernel/blocks/dblqh/DblqhMain.cpp:
  Auto merged
parents 1a27a433 165d5390
Loading
Loading
Loading
Loading
+13 −1
Original line number Diff line number Diff line
@@ -2397,7 +2397,19 @@ Dbdict::restartCreateTab_readTableConf(Signal* signal,
  Uint32 sz = c_readTableRecord.noOfPages * ZSIZE_OF_PAGES_IN_WORDS; 
  SimplePropertiesLinearReader r(&pageRecPtr.p->word[0], sz);
  handleTabInfoInit(r, &parseRecord);
  if (parseRecord.errorCode != 0)
  {
    char buf[255];
    BaseString::snprintf(buf, sizeof(buf), 
			 "Unable to restart, fail while creating table %d"
			 " error: %d. Most likely change of configuration",
			 c_readTableRecord.tableId,
			 parseRecord.errorCode);
    progError(__LINE__, 
	      ERR_INVALID_CONFIG,
	      buf);
    ndbrequire(parseRecord.errorCode == 0);
  }
  
  /* ---------------------------------------------------------------- */
  // We have read the table description from disk as part of system restart.
+4 −3
Original line number Diff line number Diff line
@@ -774,7 +774,7 @@ private:
//------------------------------------
// Methods for LCP functionality
//------------------------------------
  void checkKeepGci(Uint32 replicaStartIndex);
  void checkKeepGci(TabRecordPtr, Uint32, Fragmentstore*, Uint32);
  void checkLcpStart(Signal *, Uint32 lineNo);
  void checkStartMoreLcp(Signal *, Uint32 nodeId);
  bool reportLcpCompletion(const class LcpFragRep *);
@@ -1292,7 +1292,7 @@ private:
    }

    Uint32 lcpStart;
    Uint32 lcpStartGcp; 
    Uint32 lcpStopGcp; 
    Uint32 keepGci;      /* USED TO CALCULATE THE GCI TO KEEP AFTER A LCP  */
    Uint32 oldestRestorableGci;
    
@@ -1361,6 +1361,7 @@ private:
  Uint32 cstarttype;
  Uint32 csystemnodes;
  Uint32 currentgcp;
  Uint32 c_newest_restorable_gci;

  enum GcpMasterTakeOverState {
    GMTOS_IDLE = 0,
+17 −11
Original line number Diff line number Diff line
@@ -674,6 +674,7 @@ void Dbdih::execCOPY_GCIREQ(Signal* signal)
    jam();
    coldgcp = SYSFILE->newestRestorableGCI;
    crestartGci = SYSFILE->newestRestorableGCI;
    c_newest_restorable_gci = SYSFILE->newestRestorableGCI;
    Sysfile::setRestartOngoing(SYSFILE->systemRestartBits);
    currentgcp = coldgcp + 1;
    cnewgcp = coldgcp + 1;
@@ -692,6 +693,7 @@ void Dbdih::execCOPY_GCIREQ(Signal* signal)
    ok = true;
    jam();
    cgcpParticipantState = GCP_PARTICIPANT_COPY_GCI_RECEIVED;
    c_newest_restorable_gci = SYSFILE->newestRestorableGCI;
    setNodeInfo(signal);
    break;
  }//if
@@ -7749,6 +7751,8 @@ void Dbdih::execCOPY_GCICONF(Signal* signal)
    signal->theData[1] = coldgcp;
    sendSignal(CMVMI_REF, GSN_EVENT_REP, signal, 2, JBB);    

    c_newest_restorable_gci = coldgcp;

    CRASH_INSERTION(7004);
    emptyWaitGCPMasterQueue(signal);    
    cgcpStatus = GCP_READY;
@@ -9155,7 +9159,7 @@ void Dbdih::checkTcCounterLab(Signal* signal)
  }//if
  c_lcpState.ctimer += 32;
  if ((c_nodeStartMaster.blockLcp == true) ||
      ((c_lcpState.lcpStartGcp + 1) > currentgcp)) {
      (c_lcpState.lcpStopGcp >= c_newest_restorable_gci)) {
    jam();
    /* --------------------------------------------------------------------- */
    // No reason to start juggling the states and checking for start of LCP if
@@ -9238,7 +9242,6 @@ void Dbdih::execTCGETOPSIZECONF(Signal* signal)
  /* ----------------------------------------------------------------------- */
  c_lcpState.ctimer = 0;
  c_lcpState.keepGci = coldgcp;
  c_lcpState.lcpStartGcp = currentgcp;
  /* ----------------------------------------------------------------------- */
  /*       UPDATE THE NEW LATEST LOCAL CHECKPOINT ID.                        */
  /* ----------------------------------------------------------------------- */
@@ -9310,7 +9313,7 @@ void Dbdih::calculateKeepGciLab(Signal* signal, Uint32 tableId, Uint32 fragId)
  cnoOfActiveTables++;
  FragmentstorePtr fragPtr;
  getFragstore(tabPtr.p, fragId, fragPtr);
  checkKeepGci(fragPtr.p->storedReplicas);
  checkKeepGci(tabPtr, fragId, fragPtr.p, fragPtr.p->storedReplicas);
  fragId++;
  if (fragId >= tabPtr.p->totalfragments) {
    jam();
@@ -10168,6 +10171,7 @@ void Dbdih::allNodesLcpCompletedLab(Signal* signal)
  signal->theData[0] = EventReport::LocalCheckpointCompleted; //Event type
  signal->theData[1] = SYSFILE->latestLCP_ID;
  sendSignal(CMVMI_REF, GSN_EVENT_REP, signal, 2, JBB);
  c_lcpState.lcpStopGcp = c_newest_restorable_gci;
  
  /**
   * Start checking for next LCP
@@ -10522,7 +10526,8 @@ void Dbdih::checkEscalation()
/*       DESCRIPTION: CHECK FOR MINIMUM GCI RESTORABLE WITH NEW LOCAL    */
/*                    CHECKPOINT.                                        */
/*************************************************************************/
void Dbdih::checkKeepGci(Uint32 replicaStartIndex) 
void Dbdih::checkKeepGci(TabRecordPtr tabPtr, Uint32 fragId, Fragmentstore*, 
			 Uint32 replicaStartIndex) 
{
  ReplicaRecordPtr ckgReplicaPtr;
  ckgReplicaPtr.i = replicaStartIndex;
@@ -10544,7 +10549,6 @@ void Dbdih::checkKeepGci(Uint32 replicaStartIndex)
    if (oldestRestorableGci > c_lcpState.oldestRestorableGci) {
      jam();
      c_lcpState.oldestRestorableGci = oldestRestorableGci;
      ndbrequire(((int)c_lcpState.oldestRestorableGci) >= 0);
    }//if
    ckgReplicaPtr.i = ckgReplicaPtr.p->nextReplica;
  }//while
@@ -10838,7 +10842,7 @@ void Dbdih::findMinGci(ReplicaRecordPtr fmgReplicaPtr,
  do {
    ndbrequire(lcpNo < MAX_LCP_STORED);
    if (fmgReplicaPtr.p->lcpStatus[lcpNo] == ZVALID &&
	fmgReplicaPtr.p->maxGciStarted[lcpNo] <= coldgcp)
	fmgReplicaPtr.p->maxGciStarted[lcpNo] < c_newest_restorable_gci)
    {
      jam();
      keepGci = fmgReplicaPtr.p->maxGciCompleted[lcpNo];
@@ -10960,7 +10964,7 @@ void Dbdih::initCommonData()

  c_lcpState.clcpDelay = 0;
  c_lcpState.lcpStart = ZIDLE;
  c_lcpState.lcpStartGcp = 0;
  c_lcpState.lcpStopGcp = 0;
  c_lcpState.setLcpStatus(LCP_STATUS_IDLE, __LINE__);
  c_lcpState.currentFragment.tableId = 0;
  c_lcpState.currentFragment.fragmentId = 0;
@@ -10996,6 +11000,7 @@ void Dbdih::initCommonData()
  csystemnodes = 0;
  c_updateToLock = RNIL;
  currentgcp = 0;
  c_newest_restorable_gci = 0;
  cverifyQueueCounter = 0;
  cwaitLcpSr = false;

@@ -11071,6 +11076,7 @@ void Dbdih::initRestartInfo()
  currentgcp = 2;
  cnewgcp = 2;
  crestartGci = 1;
  c_newest_restorable_gci = 1;

  SYSFILE->keepGCI             = 1;
  SYSFILE->oldestRestorableGCI = 1;
@@ -13042,9 +13048,9 @@ Dbdih::execDUMP_STATE_ORD(Signal* signal)
  if (signal->theData[0] == 7001) {
    infoEvent("c_lcpState.keepGci = %d",
              c_lcpState.keepGci);
    infoEvent("c_lcpState.lcpStatus = %d, clcpStartGcp = %d",
    infoEvent("c_lcpState.lcpStatus = %d, clcpStopGcp = %d",
              c_lcpState.lcpStatus, 
	      c_lcpState.lcpStartGcp);
	      c_lcpState.lcpStopGcp);
    infoEvent("cgcpStartCounter = %d, cimmediateLcpStart = %d",
              cgcpStartCounter, c_lcpState.immediateLcpStart);
  }//if  
@@ -13225,8 +13231,8 @@ Dbdih::execDUMP_STATE_ORD(Signal* signal)
    infoEvent("lcpStatus = %d (update place = %d) ",
	      c_lcpState.lcpStatus, c_lcpState.lcpStatusUpdatedPlace);
    infoEvent
      ("lcpStart = %d lcpStartGcp = %d keepGci = %d oldestRestorable = %d",
       c_lcpState.lcpStart, c_lcpState.lcpStartGcp, 
      ("lcpStart = %d lcpStopGcp = %d keepGci = %d oldestRestorable = %d",
       c_lcpState.lcpStart, c_lcpState.lcpStopGcp, 
       c_lcpState.keepGci, c_lcpState.oldestRestorableGci);
    
    infoEvent
+25 −3
Original line number Diff line number Diff line
@@ -14767,7 +14767,9 @@ void Dblqh::execSr(Signal* signal)
          signal->theData[4] = logFilePtr.p->currentFilepage;
          signal->theData[5] = logFilePtr.p->currentMbyte;
          signal->theData[6] = logPagePtr.p->logPageWord[ZCURR_PAGE_INDEX];
          sendSignal(cownref, GSN_DEBUG_SIG, signal, 7, JBA);
	  signal->theData[7] = ~0;
	  signal->theData[8] = __LINE__;
          sendSignal(cownref, GSN_DEBUG_SIG, signal, 9, JBA);
          return;
        }//if
      }//if
@@ -14833,7 +14835,8 @@ void Dblqh::execSr(Signal* signal)
      signal->theData[5] = logFilePtr.p->currentFilepage;
      signal->theData[6] = logPagePtr.p->logPageWord[ZCURR_PAGE_INDEX];
      signal->theData[7] = logWord;
      sendSignal(cownref, GSN_DEBUG_SIG, signal, 8, JBA);
      signal->theData[8] = __LINE__;
      sendSignal(cownref, GSN_DEBUG_SIG, signal, 9, JBA);
      return;
      break;
    }//switch
@@ -14862,8 +14865,9 @@ void Dblqh::execDEBUG_SIG(Signal* signal)
  char buf[100];
  BaseString::snprintf(buf, 100, 
	   "Error while reading REDO log.\n"
	   "Error while reading REDO log. from %d\n"
	   "D=%d, F=%d Mb=%d FP=%d W1=%d W2=%d",
	   signal->theData[8],
	   signal->theData[2], signal->theData[3], signal->theData[4],
	   signal->theData[5], signal->theData[6], signal->theData[7]);
@@ -15439,6 +15443,10 @@ void Dblqh::readSrFourthZeroLab(Signal* signal)
  // to read a page from file. 
  lfoPtr.p->lfoState = LogFileOperationRecord::WRITE_SR_INVALIDATE_PAGES;
  /**
   * Make sure we dont release zero page
   */
  seizeLogpage(signal);
  invalidateLogAfterLastGCI(signal);
  return;
}//Dblqh::readSrFourthZeroLab()
@@ -16096,8 +16104,22 @@ void Dblqh::findLogfile(Signal* signal,
    }//if
    locLogFilePtr.i = locLogFilePtr.p->nextLogFile;
    loopCount++;
    if (loopCount >= flfLogPartPtr.p->noLogFiles &&
	getNodeState().startLevel != NodeState::SL_STARTED)
    {
      goto error;
    }
    ndbrequire(loopCount < flfLogPartPtr.p->noLogFiles);
  }//while
error:
  char buf[255];
  BaseString::snprintf(buf, sizeof(buf), 
		       "Unable to restart, failed while reading redo."
		       " Likely invalid change of configuration");
  progError(__LINE__, 
	    ERR_INVALID_CONFIG,
	    buf);
}//Dblqh::findLogfile()
/* ------------------------------------------------------------------------- */