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

📄 backup.cpp

📁 mysql-5.0.24源码包
💻 CPP
📖 第 1 页 / 共 5 页
字号:
  CRASH_INSERTION((10010));    BackupFragmentConf * conf = (BackupFragmentConf*)signal->getDataPtr();  const Uint32 ptrI = conf->backupPtr;  //const Uint32 backupId = conf->backupId;  const Uint32 tableId = conf->tableId;  const Uint32 fragmentNo = conf->fragmentNo;  const Uint32 nodeId = refToNode(signal->senderBlockRef());  const Uint64 noOfBytes =    conf->noOfBytesLow + (((Uint64)conf->noOfBytesHigh) << 32);  const Uint64 noOfRecords =    conf->noOfRecordsLow + (((Uint64)conf->noOfRecordsHigh) << 32);  BackupRecordPtr ptr;  c_backupPool.getPtr(ptr, ptrI);  ptr.p->noOfBytes += noOfBytes;  ptr.p->noOfRecords += noOfRecords;  ptr.p->masterData.sendCounter--;  TablePtr tabPtr;  ndbrequire(findTable(ptr, tabPtr, tableId));  tabPtr.p->noOfRecords += noOfRecords;  FragmentPtr fragPtr;  tabPtr.p->fragments.getPtr(fragPtr, fragmentNo);  fragPtr.p->noOfRecords = noOfRecords;  ndbrequire(fragPtr.p->scanned == 0);  ndbrequire(fragPtr.p->scanning == 1);  ndbrequire(fragPtr.p->node == nodeId);  fragPtr.p->scanned = 1;  fragPtr.p->scanning = 0;  if (ERROR_INSERTED(10028))   {    ptr.p->errorCode = 328;  }  if(ptr.p->checkError())   {    if(ptr.p->masterData.sendCounter.done())    {      jam();      masterAbort(signal, ptr);      return;    }//if  }  else  {    NodeBitmask nodes = ptr.p->nodes;    nodes.clear(getOwnNodeId());    if (!nodes.isclear())    {      BackupFragmentCompleteRep *rep =        (BackupFragmentCompleteRep*)signal->getDataPtrSend();      rep->backupId = ptr.p->backupId;      rep->backupPtr = ptr.i;      rep->tableId = tableId;      rep->fragmentNo = fragmentNo;      rep->noOfTableRowsLow = (Uint32)(tabPtr.p->noOfRecords & 0xFFFFFFFF);      rep->noOfTableRowsHigh = (Uint32)(tabPtr.p->noOfRecords >> 32);      rep->noOfFragmentRowsLow = (Uint32)(noOfRecords & 0xFFFFFFFF);      rep->noOfFragmentRowsHigh = (Uint32)(noOfRecords >> 32);      NodeReceiverGroup rg(BACKUP, ptr.p->nodes);      sendSignal(rg, GSN_BACKUP_FRAGMENT_COMPLETE_REP, signal,                 BackupFragmentCompleteRep::SignalLength, JBB);    }    nextFragment(signal, ptr);  }}voidBackup::execBACKUP_FRAGMENT_REF(Signal* signal){  jamEntry();  CRASH_INSERTION((10011));  BackupFragmentRef * ref = (BackupFragmentRef*)signal->getDataPtr();  const Uint32 ptrI = ref->backupPtr;  //const Uint32 backupId = ref->backupId;  const Uint32 nodeId = ref->nodeId;    BackupRecordPtr ptr;  c_backupPool.getPtr(ptr, ptrI);  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);        if(fragPtr.p->scanning != 0 && nodeId == fragPtr.p->node)       {        jam();	ndbrequire(fragPtr.p->scanned == 0);	fragPtr.p->scanned = 1;	fragPtr.p->scanning = 0;	goto done;      }    }  }  goto err;done:  ptr.p->masterData.sendCounter--;  ptr.p->setErrorCode(ref->errorCode);    if(ptr.p->masterData.sendCounter.done())  {    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);}voidBackup::execBACKUP_FRAGMENT_COMPLETE_REP(Signal* signal){  jamEntry();  BackupFragmentCompleteRep * rep =    (BackupFragmentCompleteRep*)signal->getDataPtr();  BackupRecordPtr ptr;  c_backupPool.getPtr(ptr, rep->backupPtr);  TablePtr tabPtr;  ndbrequire(findTable(ptr, tabPtr, rep->tableId));  tabPtr.p->noOfRecords =    rep->noOfTableRowsLow + (((Uint64)rep->noOfTableRowsHigh) << 32);  FragmentPtr fragPtr;  tabPtr.p->fragments.getPtr(fragPtr, rep->fragmentNo);  fragPtr.p->noOfRecords =    rep->noOfFragmentRowsLow + (((Uint64)rep->noOfFragmentRowsHigh) << 32);}/***************************************************************************** *  * 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->noOfBytesLow = (Uint32)(ptr.p->noOfBytes & 0xFFFFFFFF);      rep->noOfRecordsLow = (Uint32)(ptr.p->noOfRecords & 0xFFFFFFFF);      rep->noOfBytesHigh = (Uint32)(ptr.p->noOfBytes >> 32);      rep->noOfRecordsHigh = (Uint32)(ptr.p->noOfRecords >> 32);      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] = (Uint32)(ptr.p->noOfBytes & 0xFFFFFFFF);    signal->theData[6] = (Uint32)(ptr.p->noOfRecords & 0xFFFFFFFF);    signal->theData[7] = ptr.p->noOfLogBytes;    signal->theData[8] = ptr.p->noOfLogRecords;    ptr.p->nodes.copyto(NdbNodeBitmask::Size, signal->theData+9);    signal->theData[9+NdbNodeBitmask::Size] = (Uint32)(ptr.p->noOfBytes >> 32);    signal->theData[10+NdbNodeBitmask::Size] = (Uint32)(ptr.p->noOfRecords >> 32);    sendSignal(CMVMI_REF, GSN_EVENT_REP, signal, 11+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 B

⌨️ 快捷键说明

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