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

📄 dbdict.cpp

📁 mysql-5.0.22.tar.gz源码包
💻 CPP
📖 第 1 页 / 共 5 页
字号:
    closeWriteSchemaConf(signal, fsPtr);    break;  case FsConnectRecord::CLOSE_READ_SCHEMA:    jam();    closeReadSchemaConf(signal, fsPtr);    break;  case FsConnectRecord::CLOSE_READ_TAB_FILE:    jam();    closeReadTableConf(signal, fsPtr);    break;  case FsConnectRecord::CLOSE_WRITE_TAB_FILE:    jam();    closeWriteTableConf(signal, fsPtr);    break;  case FsConnectRecord::OPEN_READ_SCHEMA2:    openSchemaFile(signal, 1, fsPtr.i, false, false);    break;  default:    jamLine((fsPtr.p->fsState & 0xFFF));    ndbrequire(false);    break;  }//switch}//execFSCLOSECONF()/* ---------------------------------------------------------------- */// A file was successfully opened./* ---------------------------------------------------------------- */void Dbdict::execFSOPENCONF(Signal* signal) {  FsConnectRecordPtr fsPtr;  jamEntry();  FsConf * const fsConf = (FsConf *)&signal->theData[0];  c_fsConnectRecordPool.getPtr(fsPtr, fsConf->userPointer);  Uint32 filePointer = fsConf->filePointer;  fsPtr.p->filePtr = filePointer;  switch (fsPtr.p->fsState) {  case FsConnectRecord::OPEN_WRITE_SCHEMA:    jam();    fsPtr.p->fsState = FsConnectRecord::WRITE_SCHEMA;    writeSchemaFile(signal, filePointer, fsPtr.i);    break;  case FsConnectRecord::OPEN_READ_SCHEMA1:    jam();    fsPtr.p->fsState = FsConnectRecord::READ_SCHEMA1;    readSchemaFile(signal, filePointer, fsPtr.i);    break;  case FsConnectRecord::OPEN_READ_SCHEMA2:    jam();    fsPtr.p->fsState = FsConnectRecord::READ_SCHEMA2;    readSchemaFile(signal, filePointer, fsPtr.i);    break;  case FsConnectRecord::OPEN_READ_TAB_FILE1:    jam();    fsPtr.p->fsState = FsConnectRecord::READ_TAB_FILE1;    readTableFile(signal, filePointer, fsPtr.i);    break;  case FsConnectRecord::OPEN_READ_TAB_FILE2:    jam();    fsPtr.p->fsState = FsConnectRecord::READ_TAB_FILE2;    readTableFile(signal, filePointer, fsPtr.i);    break;  case FsConnectRecord::OPEN_WRITE_TAB_FILE:    jam();    fsPtr.p->fsState = FsConnectRecord::WRITE_TAB_FILE;    writeTableFile(signal, filePointer, fsPtr.i);    break;  default:    jamLine((fsPtr.p->fsState & 0xFFF));    ndbrequire(false);    break;  }//switch}//execFSOPENCONF()/* ---------------------------------------------------------------- */// An open file was refused./* ---------------------------------------------------------------- */void Dbdict::execFSOPENREF(Signal* signal) {  jamEntry();  FsRef * const fsRef = (FsRef *)&signal->theData[0];  FsConnectRecordPtr fsPtr;  c_fsConnectRecordPool.getPtr(fsPtr, fsRef->userPointer);  switch (fsPtr.p->fsState) {  case FsConnectRecord::OPEN_READ_SCHEMA1:    jam();    openReadSchemaRef(signal, fsPtr);    return;  case FsConnectRecord::OPEN_READ_TAB_FILE1:    jam();    openReadTableRef(signal, fsPtr);    return;  default:    break;  }//switch  {    char msg[100];    sprintf(msg, "File system open failed during FsConnectRecord state %d", (Uint32)fsPtr.p->fsState);    fsRefError(signal,__LINE__,msg);  }}//execFSOPENREF()/* ---------------------------------------------------------------- */// A file was successfully read./* ---------------------------------------------------------------- */void Dbdict::execFSREADCONF(Signal* signal) {  jamEntry();  FsConf * const fsConf = (FsConf *)&signal->theData[0];  FsConnectRecordPtr fsPtr;  c_fsConnectRecordPool.getPtr(fsPtr, fsConf->userPointer);  switch (fsPtr.p->fsState) {  case FsConnectRecord::READ_SCHEMA1:  case FsConnectRecord::READ_SCHEMA2:    readSchemaConf(signal ,fsPtr);    break;  case FsConnectRecord::READ_TAB_FILE1:  case FsConnectRecord::READ_TAB_FILE2:    jam();    readTableConf(signal ,fsPtr);    break;  default:    jamLine((fsPtr.p->fsState & 0xFFF));    ndbrequire(false);    break;  }//switch}//execFSREADCONF()/* ---------------------------------------------------------------- */// A read file was refused./* ---------------------------------------------------------------- */void Dbdict::execFSREADREF(Signal* signal) {  jamEntry();  FsRef * const fsRef = (FsRef *)&signal->theData[0];  FsConnectRecordPtr fsPtr;  c_fsConnectRecordPool.getPtr(fsPtr, fsRef->userPointer);  switch (fsPtr.p->fsState) {  case FsConnectRecord::READ_SCHEMA1:    jam();    readSchemaRef(signal, fsPtr);    return;  case FsConnectRecord::READ_TAB_FILE1:    jam();    readTableRef(signal, fsPtr);    return;  default:    break;  }//switch  {    char msg[100];    sprintf(msg, "File system read failed during FsConnectRecord state %d", (Uint32)fsPtr.p->fsState);    fsRefError(signal,__LINE__,msg);  }}//execFSREADREF()/* ---------------------------------------------------------------- */// A file was successfully written./* ---------------------------------------------------------------- */void Dbdict::execFSWRITECONF(Signal* signal) {  FsConf * const fsConf = (FsConf *)&signal->theData[0];  FsConnectRecordPtr fsPtr;  jamEntry();  c_fsConnectRecordPool.getPtr(fsPtr, fsConf->userPointer);  switch (fsPtr.p->fsState) {  case FsConnectRecord::WRITE_TAB_FILE:    writeTableConf(signal, fsPtr);    break;  case FsConnectRecord::WRITE_SCHEMA:    jam();    writeSchemaConf(signal, fsPtr);    break;  default:    jamLine((fsPtr.p->fsState & 0xFFF));    ndbrequire(false);    break;  }//switch}//execFSWRITECONF()/* ---------------------------------------------------------------- */// Routines to handle Read/Write of Table Files/* ---------------------------------------------------------------- */voidDbdict::writeTableFile(Signal* signal, Uint32 tableId, 		       SegmentedSectionPtr tabInfoPtr, Callback* callback){    ndbrequire(c_writeTableRecord.tableWriteState == WriteTableRecord::IDLE);    Uint32 sz = tabInfoPtr.sz + ZPAGE_HEADER_SIZE;  c_writeTableRecord.noOfPages = DIV(sz, ZSIZE_OF_PAGES_IN_WORDS);  c_writeTableRecord.tableWriteState = WriteTableRecord::TWR_CALLBACK;  c_writeTableRecord.m_callback = * callback;  c_writeTableRecord.pageId = 0;  ndbrequire(c_writeTableRecord.noOfPages < 8);  PageRecordPtr pageRecPtr;  c_pageRecordArray.getPtr(pageRecPtr, c_writeTableRecord.pageId);  copy(&pageRecPtr.p->word[ZPAGE_HEADER_SIZE], tabInfoPtr);    memset(&pageRecPtr.p->word[0], 0, 4 * ZPAGE_HEADER_SIZE);  pageRecPtr.p->word[ZPOS_CHECKSUM] =     computeChecksum(&pageRecPtr.p->word[0], 		    c_writeTableRecord.noOfPages * ZSIZE_OF_PAGES_IN_WORDS);    startWriteTableFile(signal, tableId);}void Dbdict::startWriteTableFile(Signal* signal, Uint32 tableId){  FsConnectRecordPtr fsPtr;  c_writeTableRecord.tableId = tableId;  c_fsConnectRecordPool.getPtr(fsPtr, getFsConnRecord());  fsPtr.p->fsState = FsConnectRecord::OPEN_WRITE_TAB_FILE;  openTableFile(signal, 0, fsPtr.i, tableId, true);  c_writeTableRecord.noOfTableFilesHandled = 0;}//Dbdict::startWriteTableFile()void Dbdict::openTableFile(Signal* signal,                           Uint32 fileNo,                           Uint32 fsConPtr,                           Uint32 tableId,                           bool   writeFlag) {  TableRecordPtr tablePtr;  FsOpenReq * const fsOpenReq = (FsOpenReq *)&signal->theData[0];  c_tableRecordPool.getPtr(tablePtr, tableId);  fsOpenReq->userReference = reference();  fsOpenReq->userPointer = fsConPtr;  if (writeFlag) {    jam();    fsOpenReq->fileFlags =       FsOpenReq::OM_WRITEONLY |       FsOpenReq::OM_TRUNCATE |       FsOpenReq::OM_CREATE |       FsOpenReq::OM_SYNC;  } else {    jam();    fsOpenReq->fileFlags = FsOpenReq::OM_READONLY;  }//if  fsOpenReq->fileNumber[3] = 0; // Initialise before byte changes  FsOpenReq::setVersion(fsOpenReq->fileNumber, 1);  FsOpenReq::setSuffix(fsOpenReq->fileNumber, FsOpenReq::S_TABLELIST);  FsOpenReq::v1_setDisk(fsOpenReq->fileNumber, (fileNo + 1));  FsOpenReq::v1_setTable(fsOpenReq->fileNumber, tableId);  FsOpenReq::v1_setFragment(fsOpenReq->fileNumber, (Uint32)-1);  FsOpenReq::v1_setS(fsOpenReq->fileNumber, tablePtr.p->tableVersion);  FsOpenReq::v1_setP(fsOpenReq->fileNumber, 255);/* ---------------------------------------------------------------- */// File name : D1/DBDICT/T0/S1.TableList// D1 means Disk 1 (set by fileNo + 1)// T0 means table id = 0// S1 means tableVersion 1// TableList indicates that this is a file for a table description./* ---------------------------------------------------------------- */  sendSignal(NDBFS_REF, GSN_FSOPENREQ, signal, FsOpenReq::SignalLength, JBA);}//openTableFile()void Dbdict::writeTableFile(Signal* signal, Uint32 filePtr, Uint32 fsConPtr) {  FsReadWriteReq * const fsRWReq = (FsReadWriteReq *)&signal->theData[0];  fsRWReq->filePointer = filePtr;  fsRWReq->userReference = reference();  fsRWReq->userPointer = fsConPtr;  fsRWReq->operationFlag = 0; // Initialise before bit changes  FsReadWriteReq::setSyncFlag(fsRWReq->operationFlag, 1);  FsReadWriteReq::setFormatFlag(fsRWReq->operationFlag,                                 FsReadWriteReq::fsFormatArrayOfPages);  fsRWReq->varIndex = ZBAT_TABLE_FILE;  fsRWReq->numberOfPages = c_writeTableRecord.noOfPages;  fsRWReq->data.arrayOfPages.varIndex = c_writeTableRecord.pageId;  fsRWReq->data.arrayOfPages.fileOffset = 0; // Write to file page 0  sendSignal(NDBFS_REF, GSN_FSWRITEREQ, signal, 8, JBA);}//writeTableFile()void Dbdict::writeTableConf(Signal* signal,                                FsConnectRecordPtr fsPtr){  fsPtr.p->fsState = FsConnectRecord::CLOSE_WRITE_TAB_FILE;  closeFile(signal, fsPtr.p->filePtr, fsPtr.i);  return;}//Dbdict::writeTableConf()void Dbdict::closeWriteTableConf(Signal* signal,                                 FsConnectRecordPtr fsPtr){  c_writeTableRecord.noOfTableFilesHandled++;  if (c_writeTableRecord.noOfTableFilesHandled < 2) {    jam();    fsPtr.p->fsState = FsConnectRecord::OPEN_WRITE_TAB_FILE;    openTableFile(signal, 1, fsPtr.i, c_writeTableRecord.tableId, true);    return;  }   ndbrequire(c_writeTableRecord.noOfTableFilesHandled == 2);  c_fsConnectRecordPool.release(fsPtr);  WriteTableRecord::TableWriteState state = c_writeTableRecord.tableWriteState;  c_writeTableRecord.tableWriteState = WriteTableRecord::IDLE;  switch (state) {  case WriteTableRecord::IDLE:  case WriteTableRecord::WRITE_ADD_TABLE_MASTER :  case WriteTableRecord::WRITE_ADD_TABLE_SLAVE :  case WriteTableRecord::WRITE_RESTART_FROM_MASTER :  case WriteTableRecord::WRITE_RESTART_FROM_OWN :    ndbrequire(false);    break;  case WriteTableRecord::TWR_CALLBACK:    jam();    execute(signal, c_writeTableRecord.m_callback, 0);    return;  }  ndbrequire(false);}//Dbdict::closeWriteTableConf()void Dbdict::startReadTableFile(Signal* signal, Uint32 tableId){  //globalSignalLoggers.log(number(), "startReadTableFile");  ndbrequire(!c_readTableRecord.inUse);    FsConnectRecordPtr fsPtr;  c_fsConnectRecordPool.getPtr(fsPtr, getFsConnRecord());  c_readTableRecord.inUse = true;  c_readTableRecord.tableId = tableId;  fsPtr.p->fsState = FsConnectRecord::OPEN_READ_TAB_FILE1;  openTableFile(signal, 0, fsPtr.i, tableId, false);}//Dbdict::startReadTableFile()void Dbdict::openReadTableRef(Signal* signal,                              FsConnectRecordPtr fsPtr) {  fsPtr.p->fsState = FsConnectRecord::OPEN_READ_TAB_FILE2;  openTableFile(signal, 1, fsPtr.i, c_readTableRecord.tableId, false);  return;}//Dbdict::openReadTableConf()void Dbdict::readTableFile(Signal* signal, Uint32 filePtr, Uint32 fsConPtr) {  FsReadWriteReq * const fsRWReq = (FsReadWriteReq *)&signal->theData[0];  fsRWReq->filePointer = filePtr;  fsRWReq->userReference = reference();  fsRWReq->userPointer = fsConPtr;  fsRWReq->operationFlag = 0; // Initialise before bit changes  FsReadWriteReq::setSyncFlag(fsRWReq->operationFlag, 0);  FsReadWriteReq::setFormatFlag(fsRWReq->operationFlag,                                 FsReadWriteReq::fsFormatArrayOfPages);  fsRWReq->varIndex = ZBAT_TABLE_FILE;  fsRWReq->numberOfPages = c_readTableRecord.noOfPages;  fsRWReq->data.arrayOfPages.varIndex = c_readTableRecord.pageId;  fsRWReq->data.arrayOfPages.fileOffset = 0; // Write to file page 0  sendSignal(NDBFS_REF, GSN_FSREADREQ, signal, 8, JBA);}//readTableFile()void Dbdict::readTableConf(Signal* signal,			   FsConnectRecordPtr fsPtr){  /* ---------------------------------------------------------------- */  // Verify the data read from disk  /* ---------------------------------------------------------------- */  bool crashInd;  if (fsPtr.p->fsState == FsConnectRecord::READ_TAB_FILE1) {    jam();    crashInd = false;  } else {    jam();    crashInd = true;  }//if  PageRecordPtr tmpPagePtr;  c_pageRecordArray.getPtr(tmpPagePtr, c_readTableRecord.pageId);  Uint32 sz = c_readTableRecord.noOfPages * ZSIZE_OF_PAGES_IN_WORDS;

⌨️ 快捷键说明

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