⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dbdihmain.cpp

📁 mysql-5.0.22.tar.gz源码包
💻 CPP
📖 第 1 页 / 共 5 页
字号:
      jam();      Uint32 tableId = signal->theData[1];      Uint32 fragId = signal->theData[2];      calculateKeepGciLab(signal, tableId, fragId);      return;    }  case DihContinueB::ZSTORE_NEW_LCP_ID:    jam();    storeNewLcpIdLab(signal);    return;  case DihContinueB::ZTABLE_UPDATE:    {      TabRecordPtr tabPtr;      jam();      tabPtr.i = signal->theData[1];      ptrCheckGuard(tabPtr, ctabFileSize, tabRecord);      tableUpdateLab(signal, tabPtr);      return;    }  case DihContinueB::ZCHECK_LCP_COMPLETED:    {      jam();      checkLcpCompletedLab(signal);      return;    }  case DihContinueB::ZINIT_LCP:    {      jam();      Uint32 senderRef = signal->theData[1];      Uint32 tableId = signal->theData[2];      initLcpLab(signal, senderRef, tableId);      return;    }  case DihContinueB::ZADD_TABLE_MASTER_PAGES:    {      TabRecordPtr tabPtr;      jam();      tabPtr.i = signal->theData[1];      ptrCheckGuard(tabPtr, ctabFileSize, tabRecord);      tabPtr.p->tabUpdateState = TabRecord::US_ADD_TABLE_MASTER;      tableUpdateLab(signal, tabPtr);      return;      break;    }  case DihContinueB::ZDIH_ADD_TABLE_MASTER:    {      jam();      addTable_closeConf(signal, signal->theData[1]);      return;    }  case DihContinueB::ZADD_TABLE_SLAVE_PAGES:    {      TabRecordPtr tabPtr;      jam();      tabPtr.i = signal->theData[1];      ptrCheckGuard(tabPtr, ctabFileSize, tabRecord);      tabPtr.p->tabUpdateState = TabRecord::US_ADD_TABLE_SLAVE;      tableUpdateLab(signal, tabPtr);      return;    }  case DihContinueB::ZDIH_ADD_TABLE_SLAVE:    {      ndbrequire(false);      return;    }  case DihContinueB::ZSTART_GCP:    jam();#ifndef NO_GCP    startGcpLab(signal, signal->theData[1]);#endif    return;    break;  case DihContinueB::ZCOPY_GCI:{    jam();    CopyGCIReq::CopyReason reason = (CopyGCIReq::CopyReason)signal->theData[1];    ndbrequire(c_copyGCIMaster.m_copyReason == reason);    sendLoopMacro(COPY_GCIREQ, sendCOPY_GCIREQ);    return;  }    break;  case DihContinueB::ZEMPTY_VERIFY_QUEUE:    jam();    emptyverificbuffer(signal, true);    return;    break;  case DihContinueB::ZCHECK_GCP_STOP:    jam();#ifndef NO_GCP    checkGcpStopLab(signal);#endif    return;    break;  case DihContinueB::ZREMOVE_NODE_FROM_TABLE:    {      jam();      Uint32 nodeId = signal->theData[1];      Uint32 tableId = signal->theData[2];      removeNodeFromTables(signal, nodeId, tableId);      return;    }  case DihContinueB::ZCOPY_NODE:    {      jam();      Uint32 tableId = signal->theData[1];      copyNodeLab(signal, tableId);      return;    }  case DihContinueB::ZSTART_TAKE_OVER:    {      jam();      Uint32 takeOverPtrI = signal->theData[1];      Uint32 startNode = signal->theData[2];      Uint32 toNode = signal->theData[3];      startTakeOver(signal, takeOverPtrI, startNode, toNode);      return;      break;    }  case DihContinueB::ZCHECK_START_TAKE_OVER:    jam();    checkStartTakeOver(signal);    break;  case DihContinueB::ZTO_START_COPY_FRAG:    {      jam();      Uint32 takeOverPtrI = signal->theData[1];      startNextCopyFragment(signal, takeOverPtrI);      return;    }  case DihContinueB::ZINVALIDATE_NODE_LCP:    {      jam();      const Uint32 nodeId = signal->theData[1];      const Uint32 tableId = signal->theData[2];      invalidateNodeLCP(signal, nodeId, tableId);      return;    }  case DihContinueB::ZINITIALISE_RECORDS:    jam();    initialiseRecordsLab(signal, 			 signal->theData[1], 			 signal->theData[2], 			 signal->theData[3]);    return;    break;  case DihContinueB::ZSTART_PERMREQ_AGAIN:    jam();    nodeRestartPh2Lab(signal);    return;    break;  case DihContinueB::SwitchReplica:    {      jam();      const Uint32 nodeId = signal->theData[1];      const Uint32 tableId = signal->theData[2];      const Uint32 fragNo = signal->theData[3];      switchReplica(signal, nodeId, tableId, fragNo);      return;    }  case DihContinueB::ZSEND_START_TO:    {      jam();      Uint32 takeOverPtrI = signal->theData[1];      sendStartTo(signal, takeOverPtrI);      return;    }  case DihContinueB::ZSEND_ADD_FRAG:    {      jam();      Uint32 takeOverPtrI = signal->theData[1];      toCopyFragLab(signal, takeOverPtrI);      return;    }  case DihContinueB::ZSEND_UPDATE_TO:    {      jam();      Uint32 takeOverPtrI = signal->theData[1];      Uint32 updateState = signal->theData[4];      sendUpdateTo(signal, takeOverPtrI, updateState);      return;    }  case DihContinueB::ZSEND_END_TO:    {      jam();      Uint32 takeOverPtrI = signal->theData[1];      sendEndTo(signal, takeOverPtrI);      return;    }  case DihContinueB::ZSEND_CREATE_FRAG:    {      jam();      Uint32 takeOverPtrI = signal->theData[1];      Uint32 storedType = signal->theData[2];      Uint32 startGci = signal->theData[3];      sendCreateFragReq(signal, startGci, storedType, takeOverPtrI);      return;    }  case DihContinueB::WAIT_DROP_TAB_WRITING_TO_FILE:{    jam();    TabRecordPtr tabPtr;    tabPtr.i = signal->theData[1];    ptrCheckGuard(tabPtr, ctabFileSize, tabRecord);    waitDropTabWritingToFile(signal, tabPtr);    return;  }  case DihContinueB::CHECK_WAIT_DROP_TAB_FAILED_LQH:{    jam();    Uint32 nodeId = signal->theData[1];    Uint32 tableId = signal->theData[2];    checkWaitDropTabFailedLqh(signal, nodeId, tableId);    return;  }  }//switch    ndbrequire(false);  return;}//Dbdih::execCONTINUEB()void Dbdih::execCOPY_GCIREQ(Signal* signal) {  CopyGCIReq * const copyGCI = (CopyGCIReq *)&signal->theData[0];  jamEntry();  CopyGCIReq::CopyReason reason = (CopyGCIReq::CopyReason)copyGCI->copyReason;  const Uint32 tstart = copyGCI->startWord;    ndbrequire(cmasterdihref == signal->senderBlockRef()) ;  ndbrequire(c_copyGCISlave.m_copyReason  == CopyGCIReq::IDLE);  ndbrequire(c_copyGCISlave.m_expectedNextWord == tstart);  ndbrequire(reason != CopyGCIReq::IDLE);    arrGuard(tstart + CopyGCIReq::DATA_SIZE, sizeof(sysfileData)/4);  for(Uint32 i = 0; i<CopyGCIReq::DATA_SIZE; i++)    cdata[tstart+i] = copyGCI->data[i];    if ((tstart + CopyGCIReq::DATA_SIZE) >= Sysfile::SYSFILE_SIZE32) {    jam();    c_copyGCISlave.m_expectedNextWord = 0;  } else {    jam();    c_copyGCISlave.m_expectedNextWord += CopyGCIReq::DATA_SIZE;    return;  }//if    memcpy(sysfileData, cdata, sizeof(sysfileData));    c_copyGCISlave.m_copyReason = reason;  c_copyGCISlave.m_senderRef  = signal->senderBlockRef();  c_copyGCISlave.m_senderData = copyGCI->anyData;  CRASH_INSERTION2(7020, reason==CopyGCIReq::LOCAL_CHECKPOINT);  CRASH_INSERTION2(7008, reason==CopyGCIReq::GLOBAL_CHECKPOINT);  /* -------------------------------------------------------------------------*/  /*     WE SET THE REQUESTER OF THE COPY GCI TO THE CURRENT MASTER. IF THE   */  /*     CURRENT MASTER WE DO NOT WANT THE NEW MASTER TO RECEIVE CONFIRM OF   */  /*     SOMETHING HE HAS NOT SENT. THE TAKE OVER MUST BE CAREFUL.            */  /* -------------------------------------------------------------------------*/  bool ok = false;  switch(reason){  case CopyGCIReq::IDLE:    ok = true;    jam();    ndbrequire(false);    break;  case CopyGCIReq::LOCAL_CHECKPOINT: {    ok = true;    jam();    c_lcpState.setLcpStatus(LCP_COPY_GCI, __LINE__);    c_lcpState.m_masterLcpDihRef = cmasterdihref;    setNodeInfo(signal);    break;  }  case CopyGCIReq::RESTART: {    ok = true;    jam();    coldgcp = SYSFILE->newestRestorableGCI;    crestartGci = SYSFILE->newestRestorableGCI;    c_newest_restorable_gci = SYSFILE->newestRestorableGCI;    Sysfile::setRestartOngoing(SYSFILE->systemRestartBits);    currentgcp = coldgcp + 1;    cnewgcp = coldgcp + 1;    setNodeInfo(signal);    if ((Sysfile::getLCPOngoing(SYSFILE->systemRestartBits))) {      jam();      /* -------------------------------------------------------------------- */      //  IF THERE WAS A LOCAL CHECKPOINT ONGOING AT THE CRASH MOMENT WE WILL      //    INVALIDATE THAT LOCAL CHECKPOINT.      /* -------------------------------------------------------------------- */      invalidateLcpInfoAfterSr();    }//if    break;  }  case CopyGCIReq::GLOBAL_CHECKPOINT: {    ok = true;    jam();    cgcpParticipantState = GCP_PARTICIPANT_COPY_GCI_RECEIVED;    c_newest_restorable_gci = SYSFILE->newestRestorableGCI;    setNodeInfo(signal);    break;  }//if  case CopyGCIReq::INITIAL_START_COMPLETED:    ok = true;    jam();    break;  }  ndbrequire(ok);    /* ----------------------------------------------------------------------- */  /*     WE START BY TRYING TO OPEN THE FIRST RESTORABLE GCI FILE.           */  /* ----------------------------------------------------------------------- */  FileRecordPtr filePtr;  filePtr.i = crestartInfoFile[0];  ptrCheckGuard(filePtr, cfileFileSize, fileRecord);  if (filePtr.p->fileStatus == FileRecord::OPEN) {    jam();    openingCopyGciSkipInitLab(signal, filePtr);    return;  }//if  openFileRw(signal, filePtr);  filePtr.p->reqStatus = FileRecord::OPENING_COPY_GCI;  return;}//Dbdih::execCOPY_GCIREQ()void Dbdih::execDICTSTARTCONF(Signal* signal) {  jamEntry();  Uint32 nodeId = refToNode(signal->getSendersBlockRef());  if (nodeId != getOwnNodeId()) {    jam();    nodeDictStartConfLab(signal);  } else {    jam();    dictStartConfLab(signal);  }//if}//Dbdih::execDICTSTARTCONF()void Dbdih::execFSCLOSECONF(Signal* signal) {  FileRecordPtr filePtr;  jamEntry();  filePtr.i = signal->theData[0];  ptrCheckGuard(filePtr, cfileFileSize, fileRecord);  filePtr.p->fileStatus = FileRecord::CLOSED;  FileRecord::ReqStatus status = filePtr.p->reqStatus;  filePtr.p->reqStatus = FileRecord::IDLE;  switch (status) {  case FileRecord::CLOSING_GCP:    jam();    closingGcpLab(signal, filePtr);    break;  case FileRecord::CLOSING_GCP_CRASH:    jam();    closingGcpCrashLab(signal, filePtr);    break;  case FileRecord::CLOSING_TABLE_CRASH:    jam();    closingTableCrashLab(signal, filePtr);    break;  case FileRecord::CLOSING_TABLE_SR:    jam();    closingTableSrLab(signal, filePtr);    break;  case FileRecord::TABLE_CLOSE:    jam();    tableCloseLab(signal, filePtr);    break;  case FileRecord::TABLE_CLOSE_DELETE:    jam();    tableDeleteLab(signal, filePtr);    break;  default:    ndbrequire(false);    break;  }//switch  return;}//Dbdih::execFSCLOSECONF()void Dbdih::execFSCLOSEREF(Signal* signal) {  FileRecordPtr filePtr;  jamEntry();  filePtr.i = signal->theData[0];  ptrCheckGuard(filePtr, cfileFileSize, fileRecord);  FileRecord::ReqStatus status = filePtr.p->reqStatus;  filePtr.p->reqStatus = FileRecord::IDLE;  switch (status) {  case FileRecord::CLOSING_GCP:    jam();    break;  case FileRecord::CLOSING_GCP_CRASH:    jam();    closingGcpCrashLab(signal, filePtr);    return;  case FileRecord::CLOSING_TABLE_CRASH:    jam();    closingTableCrashLab(signal, filePtr);    return;  case FileRecord::CLOSING_TABLE_SR:    jam();    break;  case FileRecord::TABLE_CLOSE:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -