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

📄 backup.cpp

📁 mysql-5.0.22.tar.gz源码包
💻 CPP
📖 第 1 页 / 共 5 页
字号:
  {    jam();    masterAbort(signal, ptr);    return;  }//iferr:  AbortBackupOrd *ord = (AbortBackupOrd*)signal->getDataPtrSend();  ord->backupId = ptr.p->backupId;  ord->backupPtr = ptr.i;  ord->requestType = AbortBackupOrd::LogBufferFull;  ord->senderData= ptr.i;  execABORT_BACKUP_ORD(signal);}/***************************************************************************** *  * Master functionallity - Drop triggers * *****************************************************************************/voidBackup::sendDropTrig(Signal* signal, BackupRecordPtr ptr){  TablePtr tabPtr;  if (ptr.p->masterData.dropTrig.tableId == RNIL) {    jam();    ptr.p->tables.first(tabPtr);  } else {    jam();    ndbrequire(findTable(ptr, tabPtr, ptr.p->masterData.dropTrig.tableId));    ptr.p->tables.next(tabPtr);  }//if  if (tabPtr.i != RNIL) {    jam();    sendDropTrig(signal, ptr, tabPtr);  } else {    jam();    ptr.p->masterData.dropTrig.tableId = RNIL;    sendStopBackup(signal, ptr);  }//if}voidBackup::sendDropTrig(Signal* signal, BackupRecordPtr ptr, TablePtr tabPtr){  jam();  DropTrigReq * req = (DropTrigReq *)signal->getDataPtrSend();  ptr.p->masterData.gsn = GSN_DROP_TRIG_REQ;  ptr.p->masterData.sendCounter = 0;      req->setConnectionPtr(ptr.i);  req->setUserRef(reference()); // Sending to myself  req->setRequestType(DropTrigReq::RT_USER);  req->setIndexId(RNIL);  req->setTriggerInfo(0);       // not used on DROP via DICT  char triggerName[MAX_TAB_NAME_SIZE];  Uint32 nameBuffer[2 + ((MAX_TAB_NAME_SIZE + 3) >> 2)];  // SP string  LinearWriter w(nameBuffer, sizeof(nameBuffer) >> 2);  LinearSectionPtr lsPtr[3];    ptr.p->masterData.dropTrig.tableId = tabPtr.p->tableId;  req->setTableId(tabPtr.p->tableId);  for (int i = 0; i < 3; i++) {    Uint32 id = tabPtr.p->triggerIds[i];    req->setTriggerId(id);    if (id != ILLEGAL_TRIGGER_ID) {      sendSignal(DBDICT_REF, GSN_DROP_TRIG_REQ, 		 signal, DropTrigReq::SignalLength, JBB);    } else {      BaseString::snprintf(triggerName, sizeof(triggerName), triggerNameFormat[i],	       ptr.p->backupId, tabPtr.p->tableId);      w.reset();      w.add(CreateTrigReq::TriggerNameKey, triggerName);      lsPtr[0].p = nameBuffer;      lsPtr[0].sz = w.getWordsUsed();      sendSignal(DBDICT_REF, GSN_DROP_TRIG_REQ, 		 signal, DropTrigReq::SignalLength, JBB, lsPtr, 1);    }    ptr.p->masterData.sendCounter ++;  }}voidBackup::execDROP_TRIG_REF(Signal* signal){  jamEntry();  DropTrigRef* ref = (DropTrigRef*)signal->getDataPtr();  const Uint32 ptrI = ref->getConnectionPtr();    BackupRecordPtr ptr;  c_backupPool.getPtr(ptr, ptrI);   //ndbrequire(ref->getErrorCode() == DropTrigRef::NoSuchTrigger);  dropTrigReply(signal, ptr);}voidBackup::execDROP_TRIG_CONF(Signal* signal){  jamEntry();    DropTrigConf* conf = (DropTrigConf*)signal->getDataPtr();  const Uint32 ptrI = conf->getConnectionPtr();    BackupRecordPtr ptr;  c_backupPool.getPtr(ptr, ptrI);    dropTrigReply(signal, ptr);}voidBackup::dropTrigReply(Signal* signal, BackupRecordPtr ptr){  CRASH_INSERTION((10012));  ndbrequire(ptr.p->masterRef == reference());  ndbrequire(ptr.p->masterData.gsn == GSN_DROP_TRIG_REQ);  ndbrequire(ptr.p->masterData.sendCounter.done() == false);    ptr.p->masterData.sendCounter--;  if(ptr.p->masterData.sendCounter.done() == false){    jam();    return;  }//if    sendDropTrig(signal, ptr); // recursive next}/***************************************************************************** *  * Master functionallity - Stop backup * *****************************************************************************/voidBackup::execSTOP_BACKUP_REF(Signal* signal){  jamEntry();  StopBackupRef* ref = (StopBackupRef*)signal->getDataPtr();  const Uint32 ptrI = ref->backupPtr;  //const Uint32 backupId = ref->backupId;  const Uint32 nodeId = ref->nodeId;    BackupRecordPtr ptr;  c_backupPool.getPtr(ptr, ptrI);  ptr.p->setErrorCode(ref->errorCode);  stopBackupReply(signal, ptr, nodeId);}voidBackup::sendStopBackup(Signal* signal, BackupRecordPtr ptr){  jam();  StopBackupReq* stop = (StopBackupReq*)signal->getDataPtrSend();  stop->backupPtr = ptr.i;  stop->backupId = ptr.p->backupId;  stop->startGCP = ptr.p->startGCP;  stop->stopGCP = ptr.p->stopGCP;  ptr.p->masterData.gsn = GSN_STOP_BACKUP_REQ;  ptr.p->masterData.sendCounter = ptr.p->nodes;  NodeReceiverGroup rg(BACKUP, ptr.p->nodes);  sendSignal(rg, GSN_STOP_BACKUP_REQ, signal, 	     StopBackupReq::SignalLength, JBB);}voidBackup::execSTOP_BACKUP_CONF(Signal* signal){  jamEntry();    StopBackupConf* conf = (StopBackupConf*)signal->getDataPtr();  const Uint32 ptrI = conf->backupPtr;  //const Uint32 backupId = conf->backupId;  const Uint32 nodeId = refToNode(signal->senderBlockRef());    BackupRecordPtr ptr;  c_backupPool.getPtr(ptr, ptrI);  ptr.p->noOfLogBytes += conf->noOfLogBytes;  ptr.p->noOfLogRecords += conf->noOfLogRecords;    stopBackupReply(signal, ptr, nodeId);}voidBackup::stopBackupReply(Signal* signal, BackupRecordPtr ptr, Uint32 nodeId){  CRASH_INSERTION((10013));  if (!haveAllSignals(ptr, GSN_STOP_BACKUP_REQ, nodeId)) {    jam();    return;  }  sendAbortBackupOrd(signal, ptr, AbortBackupOrd::BackupComplete);    if(!ptr.p->checkError())  {    if (SEND_BACKUP_COMPLETED_FLAG(ptr.p->flags))    {      BackupCompleteRep * rep = (BackupCompleteRep*)signal->getDataPtrSend();      rep->backupId = ptr.p->backupId;      rep->senderData = ptr.p->clientData;      rep->startGCP = ptr.p->startGCP;      rep->stopGCP = ptr.p->stopGCP;      rep->noOfBytes = ptr.p->noOfBytes;      rep->noOfRecords = ptr.p->noOfRecords;      rep->noOfLogBytes = ptr.p->noOfLogBytes;      rep->noOfLogRecords = ptr.p->noOfLogRecords;      rep->nodes = ptr.p->nodes;      sendSignal(ptr.p->clientRef, GSN_BACKUP_COMPLETE_REP, signal,		 BackupCompleteRep::SignalLength, JBB);    }    signal->theData[0] = NDB_LE_BackupCompleted;    signal->theData[1] = ptr.p->clientRef;    signal->theData[2] = ptr.p->backupId;    signal->theData[3] = ptr.p->startGCP;    signal->theData[4] = ptr.p->stopGCP;    signal->theData[5] = ptr.p->noOfBytes;    signal->theData[6] = ptr.p->noOfRecords;    signal->theData[7] = ptr.p->noOfLogBytes;    signal->theData[8] = ptr.p->noOfLogRecords;    ptr.p->nodes.copyto(NdbNodeBitmask::Size, signal->theData+9);    sendSignal(CMVMI_REF, GSN_EVENT_REP, signal, 9+NdbNodeBitmask::Size, JBB);  }  else  {    masterAbort(signal, ptr);  }}/***************************************************************************** *  * Master functionallity - Abort backup * *****************************************************************************/voidBackup::masterAbort(Signal* signal, BackupRecordPtr ptr){  jam();#ifdef DEBUG_ABORT  ndbout_c("************ masterAbort");#endif  if(ptr.p->masterData.errorCode != 0)  {    jam();    return;  }  if (SEND_BACKUP_COMPLETED_FLAG(ptr.p->flags))  {    BackupAbortRep* rep = (BackupAbortRep*)signal->getDataPtrSend();    rep->backupId = ptr.p->backupId;    rep->senderData = ptr.p->clientData;    rep->reason = ptr.p->errorCode;    sendSignal(ptr.p->clientRef, GSN_BACKUP_ABORT_REP, signal, 	       BackupAbortRep::SignalLength, JBB);  }  signal->theData[0] = NDB_LE_BackupAborted;  signal->theData[1] = ptr.p->clientRef;  signal->theData[2] = ptr.p->backupId;  signal->theData[3] = ptr.p->errorCode;  sendSignal(CMVMI_REF, GSN_EVENT_REP, signal, 4, JBB);  ndbrequire(ptr.p->errorCode);  ptr.p->masterData.errorCode = ptr.p->errorCode;  AbortBackupOrd *ord = (AbortBackupOrd*)signal->getDataPtrSend();  ord->backupId = ptr.p->backupId;  ord->backupPtr = ptr.i;  ord->senderData= ptr.i;  NodeReceiverGroup rg(BACKUP, ptr.p->nodes);    switch(ptr.p->masterData.gsn){  case GSN_DEFINE_BACKUP_REQ:    ord->requestType = AbortBackupOrd::BackupFailure;    sendSignal(rg, GSN_ABORT_BACKUP_ORD, signal, 	       AbortBackupOrd::SignalLength, JBB);    return;  case GSN_CREATE_TRIG_REQ:  case GSN_START_BACKUP_REQ:  case GSN_ALTER_TRIG_REQ:  case GSN_WAIT_GCP_REQ:  case GSN_BACKUP_FRAGMENT_REQ:    jam();    ptr.p->stopGCP= ptr.p->startGCP + 1;    sendDropTrig(signal, ptr); // dropping due to error    return;  case GSN_UTIL_SEQUENCE_REQ:  case GSN_UTIL_LOCK_REQ:  case GSN_DROP_TRIG_REQ:    ndbrequire(false);    return;  case GSN_STOP_BACKUP_REQ:    return;  }}voidBackup::abort_scan(Signal * signal, BackupRecordPtr ptr){  AbortBackupOrd *ord = (AbortBackupOrd*)signal->getDataPtrSend();  ord->backupId = ptr.p->backupId;  ord->backupPtr = ptr.i;  ord->senderData= ptr.i;  ord->requestType = AbortBackupOrd::AbortScan;  TablePtr tabPtr;  ptr.p->tables.first(tabPtr);  for(; tabPtr.i != RNIL; ptr.p->tables.next(tabPtr)) {    jam();    FragmentPtr fragPtr;    Array<Fragment> & frags = tabPtr.p->fragments;    const Uint32 fragCount = frags.getSize();        for(Uint32 i = 0; i<fragCount; i++) {      jam();      tabPtr.p->fragments.getPtr(fragPtr, i);      const Uint32 nodeId = fragPtr.p->node;      if(fragPtr.p->scanning != 0 && ptr.p->nodes.get(nodeId)) {        jam();		const BlockReference ref = numberToRef(BACKUP, nodeId);	sendSignal(ref, GSN_ABORT_BACKUP_ORD, signal,		   AbortBackupOrd::SignalLength, JBB);	      }    }  }}/***************************************************************************** *  * Slave functionallity: Define Backup  * *****************************************************************************/voidBackup::defineBackupRef(Signal* signal, BackupRecordPtr ptr, Uint32 errCode){  ptr.p->m_gsn = GSN_DEFINE_BACKUP_REF;  ptr.p->setErrorCode(errCode);  ndbrequire(ptr.p->errorCode != 0);    DefineBackupRef* ref = (DefineBackupRef*)signal->getDataPtrSend();  ref->backupId = ptr.p->backupId;  ref->backupPtr = ptr.i;  ref->errorCode = ptr.p->errorCode;  ref->nodeId = getOwnNodeId();  sendSignal(ptr.p->masterRef, GSN_DEFINE_BACKUP_REF, signal, 	     DefineBackupRef::SignalLength, JBB);}voidBackup::execDEFINE_BACKUP_REQ(Signal* signal){  jamEntry();  DefineBackupReq* req = (DefineBackupReq*)signal->getDataPtr();    BackupRecordPtr ptr;  const Uint32 ptrI = req->backupPtr;  const Uint32 backupId = req->backupId;  const BlockReference senderRef = req->senderRef;  if(senderRef == reference()){    /**     * Signal sent from myself -> record already seized     */    jam();    c_backupPool.getPtr(ptr, ptrI);  } else { // from other node    jam();#ifdef DEBUG_ABORT    dumpUsedResources();#endif    if(!c_backups.seizeId(ptr, ptrI)) {      jam();      ndbrequire(false); // If master has succeeded slave should succed    }//if  }//if  CRASH_INSERTION((10014));    ptr.p->m_gsn = GSN_DEFINE_BACKUP_REQ;  ptr.p->slaveState.forceState(INITIAL);  ptr.p->slaveState.setState(DEFINING);  ptr.p->errorCode = 0;  ptr.p->clientRef = req->clientRef;  ptr.p->clientData = req->clientData;  if(senderRef == reference())    ptr.p->flags = req->flags;  else    ptr.p->flags = req->flags & ~((Uint32)0x3); /* remove waitCompleted flags						 * as non master should never						 * reply						 */  ptr.p->masterRef = senderRef;  ptr.p->nodes = req->nodes;  ptr.p->backupId = backupId;  ptr.p->backupKey[0] = req->backupKey[0];  ptr.p->backupKey[1] = req->backupKey[1];  ptr.p->backupDataLen = req->backupDataLen;  ptr.p->masterData.dropTrig.tableId = RNIL;  ptr.p->masterData.alterTrig.tableId = RNIL;  ptr.p->masterData.errorCode = 0;  ptr.p->noOfBytes = 0;  ptr.p->noOfRecords = 0;  ptr.p->noOfLogBytes = 0;  ptr.p->noOfLogRecords = 0;  ptr.p->currGCP = 0;    /**   * Allocate files   */  BackupFilePtr files[3];  Uint32 noOfPages[] = {    NO_OF_PAGES_META_FILE,    2,   // 32k    0    // 3M  };  const Uint32 maxInsert[] = {    2048,  // Temporarily to solve TR515    4096,    // 4k    16*3000, // Max 16 tuples  };  Uint32 minWrite[] = {    8192,    8192,    32768  };  Uint32 maxWrite[] = {    8192,    8192,    32768  };    minWrite[1] = c_defaults.m_minWriteSize;  maxWrite[1] = c_defaults.m_maxWriteSize;  noOfPages[1] = (c_defaults.m_logBufferSize + sizeof(Page32) - 1) /     sizeof(Page32);  minWrite[2] = c_defaults.m_minWriteSize;  maxWrite[2] = c_defaults.m_maxWriteSize;  noOfPages[2] = (c_defaults.m_dataBufferSize + sizeof(Page32) - 1) /     sizeof(Page32);    for(Uint32 i = 0; i<3; i++) {    jam();    if(!ptr.p->files.seize(files[i])) {      jam();      defineBackupRef(signal, ptr, 		      DefineBackupRef::FailedToAllocateFileRecord);      return;    }//if    files[i].p->tableId = RNIL;    files[i].p->backupPtr = ptr.i;    files[i].p->filePointer = RNIL;    files[i].p->fileClosing = 0;    files[i].p->fileOpened = 0;    files[i].p->fileRunning = 0;        files[i].p->scanRunning = 0;    files[i].p->errorCode = 0;        if(files[i].p->pages.seize(noOfPages[i]) == false) {      jam();      DEBUG_OUT("Failed to seize " << noOfPages[i] << " pages");      defineBackupRef(signal, ptr, DefineBackupRef::FailedToAllocateBuffers);      return;    }//if    Page32Ptr pagePtr;    files[i].p->pages.getPtr(pagePtr, 0);        const char * msg = files[i].p->      operation.dataBuffer.setup((Uint32*)pagePtr.p, 				 noOfPages[i] * (sizeof(Page32) >> 2),				 128,				 minWrite[i] >> 2,				 maxWrite[i] >> 2,				 maxInsert[i]);    if(msg != 0) {      jam();      defineBackupRef(signal, ptr, DefineBackupRef::FailedToSetupFsBuffers);      return;    }//if 

⌨️ 快捷键说明

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