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

📄 dbtupsystemrestart.cpp

📁 mysql-5.0.22.tar.gz源码包
💻 CPP
📖 第 1 页 / 共 3 页
字号:
      ljam();      xlcIndicateNoOpActive(xlcStruct);      break;    case ZLCPR_TYPE_UPDATE_GCI:      ljam();      xlcUpdateGCI(xlcStruct);      break;    default:      ndbrequire(false);      break;    }//switch  } while (1);}//Dbtup::xlcGetNextRecordLab()/* ---------------------------------------------------------------- *//* -----------------   XLC_GET_LOG_HEADER    ---------------------- *//* ---------------------------------------------------------------- */void Dbtup::xlcGetLogHeader(XlcStruct& xlcStruct) {  Uint32 pIndex = xlcStruct.PageIndex;  Uint32 fragId;  Uint32 tableId;  Uint32 prevId;  if ((pIndex + 4) < ZWORDS_ON_PAGE) {    UndoPage* const regUndoPagePtr = xlcStruct.UPPtr.p;    ljam();    xlcStruct.LogRecordType = regUndoPagePtr->undoPageWord[pIndex];    prevId = regUndoPagePtr->undoPageWord[pIndex + 1];    tableId = regUndoPagePtr->undoPageWord[pIndex + 2];    fragId = regUndoPagePtr->undoPageWord[pIndex + 3];    xlcStruct.PageIndex = pIndex + 4;  } else {    ljam();    xlcStruct.LogRecordType = xlcGetLogWord(xlcStruct);    prevId = xlcGetLogWord(xlcStruct);    tableId = xlcGetLogWord(xlcStruct);    fragId = xlcGetLogWord(xlcStruct);  }//if  xlcStruct.LliPtr.p->lliPrevRecordId = prevId;  xlcStruct.FragId = fragId;  xlcStruct.TabPtr.i = tableId;  ptrCheckGuard(xlcStruct.TabPtr, cnoOfTablerec, tablerec);}//Dbtup::xlcGetLogHeader()/* ------------------------------------------------------------------- *//* ---------------------- XLC_GET_LOG_WORD --------------------------- *//* ------------------------------------------------------------------- */Uint32 Dbtup::xlcGetLogWord(XlcStruct& xlcStruct) {  Uint32 pIndex = xlcStruct.PageIndex;  ndbrequire(xlcStruct.UPPtr.p != NULL);  ndbrequire(pIndex < ZWORDS_ON_PAGE);  Uint32 logWord = xlcStruct.UPPtr.p->undoPageWord[pIndex];  pIndex++;  xlcStruct.PageIndex = pIndex;  if (pIndex == ZWORDS_ON_PAGE) {    ljam();    xlcStruct.PageIndex = ZUNDO_PAGE_HEADER_SIZE;    xlcStruct.PageId++;    if ((xlcStruct.PageId - xlcStruct.DbsiPtr.p->pdxFilePage) >= (2 * ZUB_SEGMENT_SIZE)) {      ljam();      xlcStruct.UPPtr.i = RNIL;      ptrNull(xlcStruct.UPPtr);    } else {      ljam();      Uint32 index = xlcStruct.PageId - xlcStruct.DbsiPtr.p->pdxFilePage;      ndbrequire(index < 16);      xlcStruct.UPPtr.i = xlcStruct.DbsiPtr.p->pdxDataPage[index];      ptrCheckGuard(xlcStruct.UPPtr, cnoOfUndoPage, undoPage);    }//if  }//if  return logWord;}//Dbtup::xlcGetLogWord()   /****************************************************/   /* INSERT A TUPLE HEADER THE DATA IS THE TUPLE DATA */   /****************************************************/void Dbtup::xlcInsertTh(XlcStruct& xlcStruct) {  PagePtr pagePtr;  Fragrecord* const regFragPtr = xlcStruct.FragPtr.p;  Tablerec* const regTabPtr = xlcStruct.TabPtr.p;  Uint32 fragPageId = xlcGetLogWord(xlcStruct);  Uint32 pageIndex = xlcGetLogWord(xlcStruct);  ndbrequire((pageIndex & 1) == 0);  pagePtr.i = getRealpid(regFragPtr, fragPageId);  ptrCheckGuard(pagePtr, cnoOfPage, page);  Uint32 pageOffset;  getThAtPageSr(pagePtr.p, pageOffset);  ndbrequire(pageOffset == (ZPAGE_HEADER_SIZE + (regTabPtr->tupheadsize * (pageIndex >> 1))));  if (xlcStruct.LogRecordType == ZLCPR_TYPE_INSERT_TH) {    ljam();    xlcCopyData(xlcStruct, pageOffset, regTabPtr->tupheadsize, pagePtr);  } else {    ndbrequire(xlcStruct.LogRecordType == ZLCPR_TYPE_INSERT_TH_NO_DATA);    ljam();  }//if/* ----------------------------------------*//* INDICATE THAT NO OPERATIONS ACTIVE      *//* ----------------------------------------*/  ndbrequire(pageOffset < ZWORDS_ON_PAGE);  pagePtr.p->pageWord[pageOffset] = RNIL;}//Dbtup::xlcInsertTh()   /**********************************************/   /* DELETE A TUPLE HEADER - NO ADDITIONAL DATA */   /**********************************************/void Dbtup::xlcDeleteTh(XlcStruct& xlcStruct) {  PagePtr pagePtr;  Fragrecord* const regFragPtr = xlcStruct.FragPtr.p;  Tablerec* const regTabPtr = xlcStruct.TabPtr.p;  Uint32 fragPageId = xlcGetLogWord(xlcStruct);  Uint32 pageIndex = xlcGetLogWord(xlcStruct);  ndbrequire((pageIndex & 1) == 0);  pagePtr.i = getRealpid(regFragPtr, fragPageId);  ptrCheckGuard(pagePtr, cnoOfPage, page);  Uint32 pageOffset = ZPAGE_HEADER_SIZE + (regTabPtr->tupheadsize * (pageIndex >> 1));  freeThSr(regTabPtr, pagePtr.p, pageOffset);}//Dbtup::xlcDeleteTh()   /*****************************************************/   /* UPDATE A TUPLE HEADER, THE DATA IS THE TUPLE DATA */   /*****************************************************/void Dbtup::xlcUpdateTh(XlcStruct& xlcStruct) {  PagePtr pagePtr;  Fragrecord* const regFragPtr = xlcStruct.FragPtr.p;  Tablerec* const regTabPtr = xlcStruct.TabPtr.p;  Uint32 fragPageId = xlcGetLogWord(xlcStruct);  Uint32 pageIndex = xlcGetLogWord(xlcStruct);  ndbrequire((pageIndex & 1) == 0);  pagePtr.i = getRealpid(regFragPtr, fragPageId);  ptrCheckGuard(pagePtr, cnoOfPage, page);  Uint32 pageOffset = ZPAGE_HEADER_SIZE + (regTabPtr->tupheadsize * (pageIndex >> 1));  xlcCopyData(xlcStruct, pageOffset, regTabPtr->tupheadsize, pagePtr);/* ----------------------------------------*//* INDICATE THAT NO OPERATIONS ACTIVE      *//* ----------------------------------------*/  ndbrequire(pageOffset < ZWORDS_ON_PAGE);  pagePtr.p->pageWord[pageOffset] = RNIL;}//Dbtup::xlcUpdateTh()   /**************************************************/   /* ABORT AN INSERT OPERATION - NO ADDITIONAL DATA */   /**************************************************/void Dbtup::xlcAbortInsert(Signal* signal, XlcStruct& xlcStruct) {  PagePtr pagePtr;  Fragrecord* const regFragPtr = xlcStruct.FragPtr.p;  Tablerec* const regTabPtr = xlcStruct.TabPtr.p;  Uint32 fragPageId = xlcGetLogWord(xlcStruct);  Uint32 pageIndex = xlcGetLogWord(xlcStruct);  ndbrequire((pageIndex & 1) == 0);  pagePtr.i = getRealpid(regFragPtr, fragPageId);  ptrCheckGuard(pagePtr, cnoOfPage, page);  Uint32 pageOffset = ZPAGE_HEADER_SIZE + (regTabPtr->tupheadsize * (pageIndex >> 1));  freeTh(regFragPtr, regTabPtr, signal, pagePtr.p, pageOffset);}//Dbtup::xlcAbortInsert()   /*****************************************************/   /* COPY DATA FROM COPY TUPLE TO ORIGINAL TUPLE       */   /*****************************************************/void Dbtup::xlcAbortUpdate(Signal* signal, XlcStruct& xlcStruct) {  PagePtr pagePtr;  Fragrecord* const regFragPtr = xlcStruct.FragPtr.p;  Tablerec* const regTabPtr = xlcStruct.TabPtr.p;  Uint32 tuple_size = regTabPtr->tupheadsize;  Uint32 fragPageIdC = xlcGetLogWord(xlcStruct);  Uint32 pageIndexC = xlcGetLogWord(xlcStruct);  ndbrequire((pageIndexC & 1) == 0);  Uint32 TdestPageId = getRealpid(regFragPtr, fragPageIdC);  Uint32 TcmDestIndex = ZPAGE_HEADER_SIZE +                       (tuple_size * (pageIndexC >> 1));  Uint32 fragPageId = xlcGetLogWord(xlcStruct);  Uint32 pageIndex = xlcGetLogWord(xlcStruct);  ndbrequire((pageIndex & 1) == 0);  Uint32 TsourcePageId = getRealpid(regFragPtr, fragPageId);  Uint32 TcmSourceIndex = ZPAGE_HEADER_SIZE +                         (tuple_size * (pageIndex >> 1));  Uint32 end_source = tuple_size + TcmSourceIndex;  Uint32 end_dest = tuple_size + TcmDestIndex;  void* Tdestination = (void*)&page[TdestPageId].pageWord[TcmDestIndex + 1];   const void* Tsource =     (void*)&page[TsourcePageId].pageWord[TcmSourceIndex + 1];  ndbrequire(TsourcePageId < cnoOfPage &&             TdestPageId < cnoOfPage &&             end_source <= ZWORDS_ON_PAGE &&             end_dest <= ZWORDS_ON_PAGE);  MEMCOPY_NO_WORDS(Tdestination, Tsource, (tuple_size - 1));  pagePtr.i = TsourcePageId;  ptrAss(pagePtr, page);  freeTh(regFragPtr, regTabPtr, signal, pagePtr.p, TcmSourceIndex);  pagePtr.i = TdestPageId;  ptrAss(pagePtr, page);  pagePtr.p->pageWord[TcmDestIndex] = RNIL;}//Dbtup::xlcAbortUpdate()   /*****************************/   /* RESTORE UPDATED GCI VALUE */   /*****************************/void Dbtup::xlcUpdateGCI(XlcStruct& xlcStruct) {  PagePtr pagePtr;  Fragrecord* const regFragPtr = xlcStruct.FragPtr.p;  Tablerec* const regTabPtr = xlcStruct.TabPtr.p;  Uint32 fragPageId = xlcGetLogWord(xlcStruct);  Uint32 pageIndex = xlcGetLogWord(xlcStruct);  Uint32 restoredGCI = xlcGetLogWord(xlcStruct);  ndbrequire((pageIndex & 1) == 0);  pagePtr.i = getRealpid(regFragPtr, fragPageId);  ptrCheckGuard(pagePtr, cnoOfPage, page);  Uint32 pageOffset = ZPAGE_HEADER_SIZE + (regTabPtr->tupheadsize * (pageIndex >> 1));  Uint32 gciOffset = pageOffset + regTabPtr->tupGCPIndex;  ndbrequire((gciOffset < ZWORDS_ON_PAGE) &&             (regTabPtr->tupGCPIndex < regTabPtr->tupheadsize));  pagePtr.p->pageWord[gciOffset] = restoredGCI;}//Dbtup::xlcUpdateGCI()   /*****************************************************/   /* READ TABLE DESCRIPTOR FROM UNDO LOG               */   /*****************************************************/void Dbtup::xlcTableDescriptor(XlcStruct& xlcStruct) {  xlcStruct.LliPtr.p->lliNumFragments--;  xlcStruct.FragPtr.p->fragStatus = ACTIVE;}//Dbtup::xlcTableDescriptor()   /********************************************************/   /* UPDATE PAGE STATE AND NEXT POINTER IN PAGE           */   /********************************************************/void Dbtup::xlcUndoLogPageHeader(XlcStruct& xlcStruct) {  Fragrecord* const regFragPtr = xlcStruct.FragPtr.p;  PagePtr xlcPagep;  Uint32 fragPageId = xlcGetLogWord(xlcStruct);  xlcPagep.i = getRealpid(regFragPtr, fragPageId);  ptrCheckGuard(xlcPagep, cnoOfPage, page);  Uint32 logWord = xlcGetLogWord(xlcStruct);  ndbrequire(logWord != 0);  ndbrequire(logWord <= ZAC_MM_FREE_COPY);  xlcPagep.p->pageWord[ZPAGE_STATE_POS] = logWord;  xlcPagep.p->pageWord[ZPAGE_NEXT_POS] = xlcGetLogWord(xlcStruct);}//Dbtup::xlcUndoLogPageHeader()   /********************************************************/   /* INDICATE THAT NO OPERATIONS ACTIVE                   */   /********************************************************/void Dbtup::xlcIndicateNoOpActive(XlcStruct& xlcStruct) {  PagePtr pagePtr;  Fragrecord* const regFragPtr = xlcStruct.FragPtr.p;  Tablerec* const regTabPtr = xlcStruct.TabPtr.p;  Uint32 fragPageId = xlcGetLogWord(xlcStruct);  Uint32 pageIndex = xlcGetLogWord(xlcStruct);  ndbrequire((pageIndex & 1) == 0);  pagePtr.i = getRealpid(regFragPtr, fragPageId);  ptrCheckGuard(pagePtr, cnoOfPage, page);  Uint32 pageOffset = ZPAGE_HEADER_SIZE + (regTabPtr->tupheadsize * (pageIndex >> 1));/* ----------------------------------------*//* INDICATE THAT NO OPERATIONS ACTIVE      *//* ----------------------------------------*/  ndbrequire(pageOffset < ZWORDS_ON_PAGE);  pagePtr.p->pageWord[pageOffset] = RNIL;}//Dbtup::xlcIndicateNoOpActive()   /********************************************************/   /* THIS IS THE COMMON ROUTINE TO COPY DATA FROM THE     */   /* UNDO BUFFER TO THE DATA PAGES. IT USES THE           */   /* XLC_REQUEST_SEGMENT SUB TO GET MORE DATA WHEN NEEDED */   /********************************************************/void Dbtup::xlcCopyData(XlcStruct& xlcStruct, Uint32 pageOffset, Uint32 noOfWords, PagePtr pagePtr) {  ndbrequire((pageOffset + noOfWords - 1) < ZWORDS_ON_PAGE);  for (Uint32 i = 1; i < noOfWords; i++) {    ljam();    pagePtr.p->pageWord[pageOffset + i] = xlcGetLogWord(xlcStruct);  }//for}//Dbtup::xlcCopyData()void Dbtup::allocRestartUndoBufferSegment(Signal* signal, DiskBufferSegmentInfoPtr& dbsiPtr, LocalLogInfoPtr lliPtr) {  UndoPagePtr undoPagePtr;  ndbrequire(cfirstfreeUndoSeg != RNIL);  if (cnoFreeUndoSeg == ZMIN_PAGE_LIMIT_TUP_COMMITREQ) {    EXECUTE_DIRECT(DBLQH, GSN_TUP_COM_BLOCK, signal, 1);    ljamEntry();  }//if  cnoFreeUndoSeg--;  ndbrequire(cnoFreeUndoSeg >= 0);  undoPagePtr.i = cfirstfreeUndoSeg;  ptrCheckGuard(undoPagePtr, cnoOfUndoPage, undoPage);  cfirstfreeUndoSeg = undoPagePtr.p->undoPageWord[ZPAGE_NEXT_POS];  undoPagePtr.p->undoPageWord[ZPAGE_NEXT_POS] = RNIL;  seizeDiskBufferSegmentRecord(dbsiPtr);  dbsiPtr.p->pdxBuffertype = UNDO_RESTART_PAGES;  dbsiPtr.p->pdxUndoBufferSet[0] = undoPagePtr.i;  Uint32 i;  for (i = 0; i < ZUB_SEGMENT_SIZE; i++) {    dbsiPtr.p->pdxDataPage[i] = undoPagePtr.i + i;  }//for  ndbrequire(cfirstfreeUndoSeg != RNIL);  if (cnoFreeUndoSeg == ZMIN_PAGE_LIMIT_TUP_COMMITREQ) {    EXECUTE_DIRECT(DBLQH, GSN_TUP_COM_BLOCK, signal, 1);    ljamEntry();  }//if  cnoFreeUndoSeg--;  ndbrequire(cnoFreeUndoSeg >= 0);  undoPagePtr.i = cfirstfreeUndoSeg;  ptrCheckGuard(undoPagePtr, cnoOfUndoPage, undoPage);  cfirstfreeUndoSeg = undoPagePtr.p->undoPageWord[ZPAGE_NEXT_POS];  undoPagePtr.p->undoPageWord[ZPAGE_NEXT_POS] = RNIL;  dbsiPtr.p->pdxUndoBufferSet[1] = undoPagePtr.i;//  lliPtr.p->lliUndoPage = undoPagePtr.i;  for (i = ZUB_SEGMENT_SIZE; i < (2 * ZUB_SEGMENT_SIZE); i++) {    dbsiPtr.p->pdxDataPage[i] = undoPagePtr.i + (i - ZUB_SEGMENT_SIZE);  }//for  return;}//Dbtup::allocRestartUndoBufferSegment()

⌨️ 快捷键说明

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