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

📄 dbtupgen.cpp

📁 mysql-5.0.22.tar.gz源码包
💻 CPP
📖 第 1 页 / 共 3 页
字号:
{  AttrbufrecPtr attrBufPtr;  for (attrBufPtr.i = 0;       attrBufPtr.i < cnoOfAttrbufrec; attrBufPtr.i++) {    refresh_watch_dog();    ptrAss(attrBufPtr, attrbufrec);    attrBufPtr.p->attrbuf[ZBUF_NEXT] = attrBufPtr.i + 1;  }//for  attrBufPtr.i = cnoOfAttrbufrec - 1;  ptrAss(attrBufPtr, attrbufrec);  attrBufPtr.p->attrbuf[ZBUF_NEXT] = RNIL;  cfirstfreeAttrbufrec = 0;  cnoFreeAttrbufrec = cnoOfAttrbufrec;}//Dbtup::initializeAttrbufrec()void Dbtup::initializeCheckpointInfoRec() {  CheckpointInfoPtr checkpointInfoPtr;  for (checkpointInfoPtr.i = 0;       checkpointInfoPtr.i < cnoOfLcpRec; checkpointInfoPtr.i++) {    ptrAss(checkpointInfoPtr, checkpointInfo);    checkpointInfoPtr.p->lcpNextRec = checkpointInfoPtr.i + 1;  }//for  checkpointInfoPtr.i = cnoOfLcpRec - 1;  ptrAss(checkpointInfoPtr, checkpointInfo);  checkpointInfoPtr.p->lcpNextRec = RNIL;  cfirstfreeLcp = 0;}//Dbtup::initializeCheckpointInfoRec()void Dbtup::initializeDiskBufferSegmentRecord() {  DiskBufferSegmentInfoPtr diskBufferSegmentPtr;  for (diskBufferSegmentPtr.i = 0;       diskBufferSegmentPtr.i < cnoOfConcurrentWriteOp; diskBufferSegmentPtr.i++) {    ptrAss(diskBufferSegmentPtr, diskBufferSegmentInfo);    diskBufferSegmentPtr.p->pdxNextRec = diskBufferSegmentPtr.i + 1;    diskBufferSegmentPtr.p->pdxBuffertype = NOT_INITIALIZED;  }//for  diskBufferSegmentPtr.i = cnoOfConcurrentWriteOp - 1;  ptrAss(diskBufferSegmentPtr, diskBufferSegmentInfo);  diskBufferSegmentPtr.p->pdxNextRec = RNIL;  cfirstfreePdx = 0;}//Dbtup::initializeDiskBufferSegmentRecord()void Dbtup::initializeFragoperrec() {  FragoperrecPtr fragoperPtr;  for (fragoperPtr.i = 0; fragoperPtr.i < cnoOfFragoprec; fragoperPtr.i++) {    ptrAss(fragoperPtr, fragoperrec);    fragoperPtr.p->nextFragoprec = fragoperPtr.i + 1;  }//for  fragoperPtr.i = cnoOfFragoprec - 1;  ptrAss(fragoperPtr, fragoperrec);  fragoperPtr.p->nextFragoprec = RNIL;  cfirstfreeFragopr = 0;}//Dbtup::initializeFragoperrec()void Dbtup::initializeFragrecord() {  FragrecordPtr regFragPtr;  for (regFragPtr.i = 0; regFragPtr.i < cnoOfFragrec; regFragPtr.i++) {    refresh_watch_dog();    ptrAss(regFragPtr, fragrecord);    regFragPtr.p->nextfreefrag = regFragPtr.i + 1;    regFragPtr.p->checkpointVersion = RNIL;    regFragPtr.p->firstusedOprec = RNIL;    regFragPtr.p->lastusedOprec = RNIL;    regFragPtr.p->fragStatus = IDLE;  }//for  regFragPtr.i = cnoOfFragrec - 1;  ptrAss(regFragPtr, fragrecord);  regFragPtr.p->nextfreefrag = RNIL;  cfirstfreefrag = 0;}//Dbtup::initializeFragrecord()void Dbtup::initializeHostBuffer() {  Uint32 hostId;  cpackedListIndex = 0;  for (hostId = 0; hostId < MAX_NODES; hostId++) {    hostBuffer[hostId].inPackedList = false;    hostBuffer[hostId].noOfPacketsTA = 0;    hostBuffer[hostId].packetLenTA = 0;  }//for}//Dbtup::initializeHostBuffer()void Dbtup::initializeLocalLogInfo() {  LocalLogInfoPtr localLogInfoPtr;  for (localLogInfoPtr.i = 0;       localLogInfoPtr.i < cnoOfParallellUndoFiles; localLogInfoPtr.i++) {    ptrAss(localLogInfoPtr, localLogInfo);    localLogInfoPtr.p->lliActiveLcp = 0;    localLogInfoPtr.p->lliUndoFileHandle = RNIL;  }//for}//Dbtup::initializeLocalLogInfo()void Dbtup::initializeOperationrec() {  OperationrecPtr regOpPtr;  for (regOpPtr.i = 0; regOpPtr.i < cnoOfOprec; regOpPtr.i++) {    refresh_watch_dog();    ptrAss(regOpPtr, operationrec);    regOpPtr.p->firstAttrinbufrec = RNIL;    regOpPtr.p->lastAttrinbufrec = RNIL;    regOpPtr.p->prevOprecInList = RNIL;    regOpPtr.p->nextOprecInList = regOpPtr.i + 1;    regOpPtr.p->optype = ZREAD;    regOpPtr.p->inFragList = ZFALSE;    regOpPtr.p->inActiveOpList = ZFALSE;/* FOR ABORT HANDLING BEFORE ANY SUCCESSFUL OPERATION */    regOpPtr.p->transstate = DISCONNECTED;    regOpPtr.p->storedProcedureId = ZNIL;    regOpPtr.p->prevActiveOp = RNIL;    regOpPtr.p->nextActiveOp = RNIL;    regOpPtr.p->tupVersion = ZNIL;    regOpPtr.p->deleteInsertFlag = 0;  }//for  regOpPtr.i = cnoOfOprec - 1;  ptrAss(regOpPtr, operationrec);  regOpPtr.p->nextOprecInList = RNIL;  cfirstfreeOprec = 0;}//Dbtup::initializeOperationrec()void Dbtup::initializePendingFileOpenInfoRecord() {  PendingFileOpenInfoPtr pendingFileOpenInfoPtr;  for (pendingFileOpenInfoPtr.i = 0;       pendingFileOpenInfoPtr.i < cnoOfConcurrentOpenOp; pendingFileOpenInfoPtr.i++) {    ptrAss(pendingFileOpenInfoPtr, pendingFileOpenInfo);    pendingFileOpenInfoPtr.p->pfoNextRec = pendingFileOpenInfoPtr.i + 1;  }//for  pendingFileOpenInfoPtr.i = cnoOfConcurrentOpenOp - 1;  ptrAss(pendingFileOpenInfoPtr, pendingFileOpenInfo);  pendingFileOpenInfoPtr.p->pfoNextRec = RNIL;  cfirstfreePfo = 0;}//Dbtup::initializePendingFileOpenInfoRecord()void Dbtup::initializeRestartInfoRec() {  RestartInfoRecordPtr restartInfoPtr;  for (restartInfoPtr.i = 0; restartInfoPtr.i < cnoOfRestartInfoRec; restartInfoPtr.i++) {    ptrAss(restartInfoPtr, restartInfoRecord);    restartInfoPtr.p->sriNextRec = restartInfoPtr.i + 1;  }//for  restartInfoPtr.i = cnoOfRestartInfoRec - 1;  ptrAss(restartInfoPtr, restartInfoRecord);  restartInfoPtr.p->sriNextRec = RNIL;  cfirstfreeSri = 0;}//Dbtup::initializeRestartInfoRec()void Dbtup::initializeTablerec() {  TablerecPtr regTabPtr;  for (regTabPtr.i = 0; regTabPtr.i < cnoOfTablerec; regTabPtr.i++) {    ljam();    refresh_watch_dog();    ptrAss(regTabPtr, tablerec);    initTab(regTabPtr.p);  }//for}//Dbtup::initializeTablerec()voidDbtup::initTab(Tablerec* const regTabPtr){  for (Uint32 i = 0; i < (2 * MAX_FRAG_PER_NODE); i++) {    regTabPtr->fragid[i] = RNIL;    regTabPtr->fragrec[i] = RNIL;  }//for  regTabPtr->readFunctionArray = NULL;  regTabPtr->updateFunctionArray = NULL;  regTabPtr->charsetArray = NULL;  regTabPtr->tabDescriptor = RNIL;  regTabPtr->attributeGroupDescriptor = RNIL;  regTabPtr->readKeyArray = RNIL;  regTabPtr->checksumIndicator = false;  regTabPtr->GCPIndicator = false;  regTabPtr->noOfAttr = 0;  regTabPtr->noOfKeyAttr = 0;  regTabPtr->noOfNewAttr = 0;  regTabPtr->noOfAttributeGroups = 0;  regTabPtr->tupheadsize = 0;  regTabPtr->tupNullIndex = 0;  regTabPtr->tupNullWords = 0;  regTabPtr->tupChecksumIndex = 0;  regTabPtr->tupGCPIndex = 0;  regTabPtr->m_dropTable.tabUserPtr = RNIL;  regTabPtr->m_dropTable.tabUserRef = 0;  regTabPtr->tableStatus = NOT_DEFINED;  // Clear trigger data  if (!regTabPtr->afterInsertTriggers.isEmpty())    regTabPtr->afterInsertTriggers.release();  if (!regTabPtr->afterDeleteTriggers.isEmpty())    regTabPtr->afterDeleteTriggers.release();  if (!regTabPtr->afterUpdateTriggers.isEmpty())    regTabPtr->afterUpdateTriggers.release();  if (!regTabPtr->subscriptionInsertTriggers.isEmpty())    regTabPtr->subscriptionInsertTriggers.release();  if (!regTabPtr->subscriptionDeleteTriggers.isEmpty())    regTabPtr->subscriptionDeleteTriggers.release();  if (!regTabPtr->subscriptionUpdateTriggers.isEmpty())    regTabPtr->subscriptionUpdateTriggers.release();  if (!regTabPtr->constraintUpdateTriggers.isEmpty())    regTabPtr->constraintUpdateTriggers.release();  if (!regTabPtr->tuxCustomTriggers.isEmpty())    regTabPtr->tuxCustomTriggers.release();}//Dbtup::initTab()void Dbtup::initializeTabDescr() {  TableDescriptorPtr regTabDesPtr;  for (Uint32 i = 0; i < 16; i++) {    cfreeTdList[i] = RNIL;  }//for  for (regTabDesPtr.i = 0; regTabDesPtr.i < cnoOfTabDescrRec; regTabDesPtr.i++) {    refresh_watch_dog();    ptrAss(regTabDesPtr, tableDescriptor);    regTabDesPtr.p->tabDescr = RNIL;  }//for  freeTabDescr(0, cnoOfTabDescrRec);}//Dbtup::initializeTabDescr()void Dbtup::initializeUndoPage() {  UndoPagePtr undoPagep;  for (undoPagep.i = 0;       undoPagep.i < cnoOfUndoPage;       undoPagep.i = undoPagep.i + ZUB_SEGMENT_SIZE) {    refresh_watch_dog();    ptrAss(undoPagep, undoPage);    undoPagep.p->undoPageWord[ZPAGE_NEXT_POS] = undoPagep.i +                                                  ZUB_SEGMENT_SIZE;    cnoFreeUndoSeg++;  }//for  undoPagep.i = cnoOfUndoPage - ZUB_SEGMENT_SIZE;  ptrAss(undoPagep, undoPage);  undoPagep.p->undoPageWord[ZPAGE_NEXT_POS] = RNIL;  cfirstfreeUndoSeg = 0;}//Dbtup::initializeUndoPage()/* ---------------------------------------------------------------- *//* ---------------------------------------------------------------- *//* --------------- CONNECT/DISCONNECT MODULE ---------------------- *//* ---------------------------------------------------------------- *//* ---------------------------------------------------------------- */void Dbtup::execTUPSEIZEREQ(Signal* signal){  OperationrecPtr regOperPtr;  ljamEntry();  Uint32 userPtr = signal->theData[0];  BlockReference userRef = signal->theData[1];  if (cfirstfreeOprec != RNIL) {    ljam();    seizeOpRec(regOperPtr);  } else {    ljam();    signal->theData[0] = userPtr;    signal->theData[1] = ZGET_OPREC_ERROR;    sendSignal(userRef, GSN_TUPSEIZEREF, signal, 2, JBB);    return;  }//if  regOperPtr.p->optype = ZREAD;  initOpConnection(regOperPtr.p, 0);  regOperPtr.p->userpointer = userPtr;  regOperPtr.p->userblockref = userRef;  signal->theData[0] = regOperPtr.p->userpointer;  signal->theData[1] = regOperPtr.i;  sendSignal(userRef, GSN_TUPSEIZECONF, signal, 2, JBB);  return;}//Dbtup::execTUPSEIZEREQ()#define printFragment(t){ for(Uint32 i = 0; i < (2 * MAX_FRAG_PER_NODE);i++){\  ndbout_c("table = %d fragid[%d] = %d fragrec[%d] = %d", \           t.i, t.p->fragid[i], i, t.p->fragrec[i]); }}void Dbtup::execTUPRELEASEREQ(Signal* signal) {  OperationrecPtr regOperPtr;  ljamEntry();  regOperPtr.i = signal->theData[0];  ptrCheckGuard(regOperPtr, cnoOfOprec, operationrec);  regOperPtr.p->transstate = DISCONNECTED;  regOperPtr.p->nextOprecInList = cfirstfreeOprec;  cfirstfreeOprec = regOperPtr.i;  signal->theData[0] = regOperPtr.p->userpointer;  sendSignal(regOperPtr.p->userblockref, GSN_TUPRELEASECONF, signal, 1, JBB);  return;}//Dbtup::execTUPRELEASEREQ()/* ---------------------------------------------------------------- *//* ---------------- FREE_DISK_BUFFER_SEGMENT_RECORD --------------- *//* ---------------------------------------------------------------- *//*                                                                  *//* THIS ROUTINE DEALLOCATES A DISK SEGMENT AND ITS DATA PAGES       *//*                                                                  *//* INPUT:  DISK_BUFFER_SEGMENT_PTR    THE DISK SEGMENT              *//*                                                                  *//* -----------------------------------------------------------------*/void Dbtup::freeDiskBufferSegmentRecord(Signal* signal, DiskBufferSegmentInfoPtr dbsiPtr) {  switch (dbsiPtr.p->pdxBuffertype) {  case UNDO_PAGES:  case COMMON_AREA_PAGES:    ljam();    freeUndoBufferPages(signal, dbsiPtr);    break;  case UNDO_RESTART_PAGES:    ljam();    dbsiPtr.p->pdxDataPage[0] = dbsiPtr.p->pdxUndoBufferSet[0];    freeUndoBufferPages(signal, dbsiPtr);    dbsiPtr.p->pdxDataPage[0] = dbsiPtr.p->pdxUndoBufferSet[1];    freeUndoBufferPages(signal, dbsiPtr);    break;  default:    ndbrequire(false);    break;  }//switch  releaseDiskBufferSegmentRecord(dbsiPtr);}//Dbtup::freeDiskBufferSegmentRecord()/* ---------------------------------------------------------------- *//* -------------------- FREE_UNDO_BUFFER_PAGES -------------------- *//* ---------------------------------------------------------------- *//*                                                                  *//* THIS ROUTINE DEALLOCATES A SEGMENT OF UNDO PAGES                 *//*                                                                  *//* INPUT:  UNDO_PAGEP    POINTER TO FIRST PAGE IN SEGMENT          *//*                                                                  *//* -----------------------------------------------------------------*/void Dbtup::freeUndoBufferPages(Signal* signal, DiskBufferSegmentInfoPtr dbsiPtr) {  UndoPagePtr undoPagePtr;  undoPagePtr.i = dbsiPtr.p->pdxDataPage[0];  ptrCheckGuard(undoPagePtr, cnoOfUndoPage, undoPage);  undoPagePtr.p->undoPageWord[ZPAGE_NEXT_POS] = cfirstfreeUndoSeg;  cfirstfreeUndoSeg = undoPagePtr.i;  cnoFreeUndoSeg++;  if (cnoFreeUndoSeg == ZMIN_PAGE_LIMIT_TUP_COMMITREQ) {    EXECUTE_DIRECT(DBLQH, GSN_TUP_COM_UNBLOCK, signal, 1);    ljamEntry();  }//if}//Dbtup::freeUndoBufferPages()void Dbtup::releaseCheckpointInfoRecord(CheckpointInfoPtr ciPtr) {  ciPtr.p->lcpNextRec = cfirstfreeLcp;  cfirstfreeLcp = ciPtr.i;}//Dbtup::releaseCheckpointInfoRecord()void Dbtup::releaseDiskBufferSegmentRecord(DiskBufferSegmentInfoPtr dbsiPtr) {  dbsiPtr.p->pdxNextRec = cfirstfreePdx;  cfirstfreePdx = dbsiPtr.i;}//Dbtup::releaseDiskBufferSegmentRecord()void Dbtup::releaseFragrec(FragrecordPtr regFragPtr) {  regFragPtr.p->nextfreefrag = cfirstfreefrag;  cfirstfreefrag = regFragPtr.i;}//Dbtup::releaseFragrec()void Dbtup::releasePendingFileOpenInfoRecord(PendingFileOpenInfoPtr pfoPtr) {  pfoPtr.p->pfoNextRec = cfirstfreePfo;  cfirstfreePfo = pfoPtr.i;}//Dbtup::releasePendingFileOpenInfoRecord()void Dbtup::releaseRestartInfoRecord(RestartInfoRecordPtr riPtr) {  riPtr.p->sriNextRec = cfirstfreeSri;  cfirstfreeSri = riPtr.i;}//Dbtup::releaseRestartInfoRecord()void Dbtup::seizeCheckpointInfoRecord(CheckpointInfoPtr& ciPtr) {  ciPtr.i = cfirstfreeLcp;  ptrCheckGuard(ciPtr, cnoOfLcpRec, checkpointInfo);  cfirstfreeLcp = ciPtr.p->lcpNextRec;  ciPtr.p->lcpNextRec = RNIL;}//Dbtup::seizeCheckpointInfoRecord()void Dbtup::seizeDiskBufferSegmentRecord(DiskBufferSegmentInfoPtr& dbsiPtr) {  dbsiPtr.i = cfirstfreePdx;  ptrCheckGuard(dbsiPtr, cnoOfConcurrentWriteOp, diskBufferSegmentInfo);  cfirstfreePdx = dbsiPtr.p->pdxNextRec;  dbsiPtr.p->pdxNextRec = RNIL;  for (Uint32 i = 0; i < 16; i++) {    dbsiPtr.p->pdxDataPage[i] = RNIL;  }//for  dbsiPtr.p->pdxCheckpointInfoP = RNIL;  dbsiPtr.p->pdxRestartInfoP = RNIL;  dbsiPtr.p->pdxLocalLogInfoP = RNIL;  dbsiPtr.p->pdxFilePage = 0;  dbsiPtr.p->pdxNumDataPages = 0;}//Dbtup::seizeDiskBufferSegmentRecord()void Dbtup::seizeOpRec(OperationrecPtr& regOperPtr) {  regOperPtr.i = cfirstfreeOprec;  ptrCheckGuard(regOperPtr, cnoOfOprec, operationrec);  cfirstfreeOprec = regOperPtr.p->nextOprecInList;}//Dbtup::seizeOpRec()void Dbtup::seizePendingFileOpenInfoRecord(PendingFileOpenInfoPtr& pfoiPtr) {  pfoiPtr.i = cfirstfreePfo;  ptrCheckGuard(pfoiPtr, cnoOfConcurrentOpenOp, pendingFileOpenInfo);  cfirstfreePfo = pfoiPtr.p->pfoNextRec;  pfoiPtr.p->pfoNextRec = RNIL;}//Dbtup::seizePendingFileOpenInfoRecord()void Dbtup::execSET_VAR_REQ(Signal* signal) {#if 0  SetVarReq* const setVarReq = (SetVarReq*)signal->getDataPtrSend();  ConfigParamId var = setVarReq->variable();  int val = setVarReq->value();  switch (var) {  case NoOfDiskPagesToDiskAfterRestartTUP:    clblPagesPerTick = val;    sendSignal(CMVMI_REF, GSN_SET_VAR_CONF, signal, 1, JBB);    break;  case NoOfDiskPagesToDiskDuringRestartTUP:    // Valid only during start so value not set.    sendSignal(CMVMI_REF, GSN_SET_VAR_CONF, signal, 1, JBB);    break;  default:    sendSignal(CMVMI_REF, GSN_SET_VAR_REF, signal, 1, JBB);  } // switch#endif}//execSET_VAR_REQ()

⌨️ 快捷键说明

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