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

📄 backup.cpp

📁 mysql-5.0.22.tar.gz源码包
💻 CPP
📖 第 1 页 / 共 5 页
字号:
    p = 'G';    break;  default:    p = 0;  }  char str[2];  str[0] = p;  str[1] = 0;  Uint32 tmp = (val.val + (loop >> 1)) / loop;#if 1  if(p > 0)    out << tmp << str;  else    out << tmp;#else  out << val.val;#endif  return out;}voidBackup::execBACKUP_CONF(Signal* signal){  jamEntry();  BackupConf * conf = (BackupConf*)signal->getDataPtr();    ndbout_c("Backup %d has started", conf->backupId);}voidBackup::execBACKUP_REF(Signal* signal){  jamEntry();  BackupRef * ref = (BackupRef*)signal->getDataPtr();  ndbout_c("Backup (%d) has NOT started %d", ref->senderData, ref->errorCode);}voidBackup::execBACKUP_COMPLETE_REP(Signal* signal){  jamEntry();  BackupCompleteRep* rep = (BackupCompleteRep*)signal->getDataPtr();   startTime = NdbTick_CurrentMillisecond() - startTime;    ndbout_c("Backup %d has completed", rep->backupId);  const Uint32 bytes = rep->noOfBytes;  const Uint32 records = rep->noOfRecords;  Number rps = xps(records, startTime);  Number bps = xps(bytes, startTime);  ndbout << " Data [ "	 << Number(records) << " rows " 	 << Number(bytes) << " bytes " << startTime << " ms ] " 	 << " => "	 << rps << " row/s & " << bps << "b/s" << endl;  bps = xps(rep->noOfLogBytes, startTime);  rps = xps(rep->noOfLogRecords, startTime);  ndbout << " Log [ "	 << Number(rep->noOfLogRecords) << " log records " 	 << Number(rep->noOfLogBytes) << " bytes " << startTime << " ms ] " 	 << " => "	 << rps << " records/s & " << bps << "b/s" << endl;}voidBackup::execBACKUP_ABORT_REP(Signal* signal){  jamEntry();  BackupAbortRep* rep = (BackupAbortRep*)signal->getDataPtr();    ndbout_c("Backup %d has been aborted %d", rep->backupId, rep->reason);}const TriggerEvent::Value triggerEventValues[] = {  TriggerEvent::TE_INSERT,  TriggerEvent::TE_UPDATE,  TriggerEvent::TE_DELETE};const char* triggerNameFormat[] = {  "NDB$BACKUP_%d_%d_INSERT",  "NDB$BACKUP_%d_%d_UPDATE",  "NDB$BACKUP_%d_%d_DELETE"};const Backup::State Backup::validSlaveTransitions[] = {  INITIAL,  DEFINING,  DEFINING, DEFINED,  DEFINED,  STARTED,  STARTED,  STARTED, // Several START_BACKUP_REQ is sent  STARTED,  SCANNING,  SCANNING, STARTED,  STARTED,  STOPPING,  STOPPING, CLEANING,  CLEANING, INITIAL,    INITIAL,  ABORTING, // Node fail  DEFINING, ABORTING,  DEFINED,  ABORTING,  STARTED,  ABORTING,  SCANNING, ABORTING,  STOPPING, ABORTING,  CLEANING, ABORTING, // Node fail w/ master takeover  ABORTING, ABORTING, // Slave who initiates ABORT should have this transition    ABORTING, INITIAL,  INITIAL,  INITIAL};const Uint32Backup::validSlaveTransitionsCount = sizeof(Backup::validSlaveTransitions) / sizeof(Backup::State);voidBackup::CompoundState::setState(State newState){  bool found = false;  const State currState = state;  for(unsigned i = 0; i<noOfValidTransitions; i+= 2) {    jam();    if(validTransitions[i]   == currState &&       validTransitions[i+1] == newState){      jam();      found = true;      break;    }  }  //ndbrequire(found);    if (newState == INITIAL)    abortState = INITIAL;  if(newState == ABORTING && currState != ABORTING) {    jam();    abortState = currState;  }  state = newState;#ifdef DEBUG_ABORT  if (newState != currState) {    ndbout_c("%u: Old state = %u, new state = %u, abort state = %u",	     id, currState, newState, abortState);  }#endif}voidBackup::CompoundState::forceState(State newState){  const State currState = state;  if (newState == INITIAL)    abortState = INITIAL;  if(newState == ABORTING && currState != ABORTING) {    jam();    abortState = currState;  }  state = newState;#ifdef DEBUG_ABORT  if (newState != currState) {    ndbout_c("%u: FORCE: Old state = %u, new state = %u, abort state = %u",	     id, currState, newState, abortState);  }#endif}Backup::Table::Table(ArrayPool<Attribute> & ah, 		     ArrayPool<Fragment> & fh)   : attributes(ah), fragments(fh){  triggerIds[0] = ILLEGAL_TRIGGER_ID;  triggerIds[1] = ILLEGAL_TRIGGER_ID;  triggerIds[2] = ILLEGAL_TRIGGER_ID;  triggerAllocated[0] = false;  triggerAllocated[1] = false;  triggerAllocated[2] = false;}/***************************************************************************** *  * Node state handling * *****************************************************************************/voidBackup::execNODE_FAILREP(Signal* signal){  jamEntry();  NodeFailRep * rep = (NodeFailRep*)signal->getDataPtr();    bool doStuff = false;  /*  Start by saving important signal data which will be destroyed before the  process is completed.  */  NodeId new_master_node_id = rep->masterNodeId;  Uint32 theFailedNodes[NodeBitmask::Size];  for (Uint32 i = 0; i < NodeBitmask::Size; i++)    theFailedNodes[i] = rep->theNodes[i];    c_masterNodeId = new_master_node_id;  NodePtr nodePtr;  for(c_nodes.first(nodePtr); nodePtr.i != RNIL; c_nodes.next(nodePtr)) {    jam();    if(NodeBitmask::get(theFailedNodes, nodePtr.p->nodeId)){      if(nodePtr.p->alive){	jam();	ndbrequire(c_aliveNodes.get(nodePtr.p->nodeId));	doStuff = true;      } else {        jam();	ndbrequire(!c_aliveNodes.get(nodePtr.p->nodeId));      }//if      nodePtr.p->alive = 0;      c_aliveNodes.clear(nodePtr.p->nodeId);    }//if  }//for  if(!doStuff){    jam();    return;  }//if  #ifdef DEBUG_ABORT  ndbout_c("****************** Node fail rep ******************");#endif  NodeId newCoordinator = c_masterNodeId;  BackupRecordPtr ptr;  for(c_backups.first(ptr); ptr.i != RNIL; c_backups.next(ptr)) {    jam();    checkNodeFail(signal, ptr, newCoordinator, theFailedNodes);  }}boolBackup::verifyNodesAlive(BackupRecordPtr ptr,			 const NdbNodeBitmask& aNodeBitMask){  Uint32 version = getNodeInfo(getOwnNodeId()).m_version;  for (Uint32 i = 0; i < MAX_NDB_NODES; i++) {    jam();    if(aNodeBitMask.get(i)) {      if(!c_aliveNodes.get(i)){        jam();	ptr.p->setErrorCode(AbortBackupOrd::BackupFailureDueToNodeFail);        return false;      }//if      if(getNodeInfo(i).m_version != version)      {	jam();	ptr.p->setErrorCode(AbortBackupOrd::IncompatibleVersions);	return false;      }    }//if  }//for  return true;}voidBackup::checkNodeFail(Signal* signal,		      BackupRecordPtr ptr,		      NodeId newCoord,		      Uint32 theFailedNodes[NodeBitmask::Size]){  NdbNodeBitmask mask;  mask.assign(2, theFailedNodes);  /* Update ptr.p->nodes to be up to date with current alive nodes   */  NodePtr nodePtr;  bool found = false;  for(c_nodes.first(nodePtr); nodePtr.i != RNIL; c_nodes.next(nodePtr)) {    jam();    if(NodeBitmask::get(theFailedNodes, nodePtr.p->nodeId)) {      jam();      if (ptr.p->nodes.get(nodePtr.p->nodeId)) {	jam();	ptr.p->nodes.clear(nodePtr.p->nodeId); 	found = true;      }    }//if  }//for  if(!found) {    jam();    return; // failed node is not part of backup process, safe to continue  }  if(mask.get(refToNode(ptr.p->masterRef)))  {    /**     * Master died...abort     */    ptr.p->masterRef = reference();    ptr.p->nodes.clear();    ptr.p->nodes.set(getOwnNodeId());    ptr.p->setErrorCode(AbortBackupOrd::BackupFailureDueToNodeFail);    switch(ptr.p->m_gsn){    case GSN_DEFINE_BACKUP_REQ:    case GSN_START_BACKUP_REQ:    case GSN_BACKUP_FRAGMENT_REQ:    case GSN_STOP_BACKUP_REQ:      // I'm currently processing...reply to self and abort...      ptr.p->masterData.gsn = ptr.p->m_gsn;      ptr.p->masterData.sendCounter = ptr.p->nodes;      return;    case GSN_DEFINE_BACKUP_REF:    case GSN_DEFINE_BACKUP_CONF:    case GSN_START_BACKUP_REF:    case GSN_START_BACKUP_CONF:    case GSN_BACKUP_FRAGMENT_REF:    case GSN_BACKUP_FRAGMENT_CONF:    case GSN_STOP_BACKUP_REF:    case GSN_STOP_BACKUP_CONF:      ptr.p->masterData.gsn = GSN_DEFINE_BACKUP_REQ;      masterAbort(signal, ptr);      return;    case GSN_ABORT_BACKUP_ORD:      // Already aborting      return;    }  }  else if (newCoord == getOwnNodeId())  {    /**     * I'm master for this backup     */    jam();    CRASH_INSERTION((10001));#ifdef DEBUG_ABORT    ndbout_c("**** Master: Node failed: Master id = %u", 	     refToNode(ptr.p->masterRef));#endif    Uint32 gsn, len, pos;    ptr.p->nodes.bitANDC(mask);    switch(ptr.p->masterData.gsn){    case GSN_DEFINE_BACKUP_REQ:    {      DefineBackupRef * ref = (DefineBackupRef*)signal->getDataPtr();      ref->backupPtr = ptr.i;      ref->backupId = ptr.p->backupId;      ref->errorCode = AbortBackupOrd::BackupFailureDueToNodeFail;      gsn= GSN_DEFINE_BACKUP_REF;      len= DefineBackupRef::SignalLength;      pos= &ref->nodeId - signal->getDataPtr();      break;    }    case GSN_START_BACKUP_REQ:    {      StartBackupRef * ref = (StartBackupRef*)signal->getDataPtr();      ref->backupPtr = ptr.i;      ref->backupId = ptr.p->backupId;      ref->errorCode = AbortBackupOrd::BackupFailureDueToNodeFail;      ref->signalNo = ptr.p->masterData.startBackup.signalNo;      gsn= GSN_START_BACKUP_REF;      len= StartBackupRef::SignalLength;      pos= &ref->nodeId - signal->getDataPtr();      break;    }    case GSN_BACKUP_FRAGMENT_REQ:    {      BackupFragmentRef * ref = (BackupFragmentRef*)signal->getDataPtr();      ref->backupPtr = ptr.i;      ref->backupId = ptr.p->backupId;      ref->errorCode = AbortBackupOrd::BackupFailureDueToNodeFail;      gsn= GSN_BACKUP_FRAGMENT_REF;      len= BackupFragmentRef::SignalLength;      pos= &ref->nodeId - signal->getDataPtr();      break;    }    case GSN_STOP_BACKUP_REQ:    {      StopBackupRef * ref = (StopBackupRef*)signal->getDataPtr();      ref->backupPtr = ptr.i;      ref->backupId = ptr.p->backupId;      ref->errorCode = AbortBackupOrd::BackupFailureDueToNodeFail;      gsn= GSN_STOP_BACKUP_REF;      len= StopBackupRef::SignalLength;      pos= &ref->nodeId - signal->getDataPtr();      break;    }    case GSN_WAIT_GCP_REQ:    case GSN_DROP_TRIG_REQ:    case GSN_CREATE_TRIG_REQ:    case GSN_ALTER_TRIG_REQ:      ptr.p->setErrorCode(AbortBackupOrd::BackupFailureDueToNodeFail);      return;    case GSN_UTIL_SEQUENCE_REQ:    case GSN_UTIL_LOCK_REQ:      return;    default:      ndbrequire(false);    }        for(Uint32 i = 0; (i = mask.find(i+1)) != NdbNodeBitmask::NotFound; )    {      signal->theData[pos] = i;      sendSignal(reference(), gsn, signal, len, JBB);#ifdef DEBUG_ABORT      ndbout_c("sending %d to self from %d", gsn, i);#endif    }    return;  }//if    /**   * I abort myself as slave if not master   */  CRASH_INSERTION((10021));} voidBackup::execINCL_NODEREQ(Signal* signal){  jamEntry();    const Uint32 senderRef = signal->theData[0];  const Uint32 inclNode  = signal->theData[1];  NodePtr node;  for(c_nodes.first(node); node.i != RNIL; c_nodes.next(node)) {    jam();    const Uint32 nodeId = node.p->nodeId;    if(inclNode == nodeId){      jam();            ndbrequire(node.p->alive == 0);      ndbrequire(!c_aliveNodes.get(nodeId));            node.p->alive = 1;      c_aliveNodes.set(nodeId);            break;    }//if  }//for  signal->theData[0] = reference();  sendSignal(senderRef, GSN_INCL_NODECONF, signal, 1, JBB);}/***************************************************************************** *  * Master functionallity - Define backup * *****************************************************************************/voidBackup::execBACKUP_REQ(Signal* signal){  jamEntry();  BackupReq * req = (BackupReq*)signal->getDataPtr();    const Uint32 senderData = req->senderData;  const BlockReference senderRef = signal->senderBlockRef();  const Uint32 dataLen32 = req->backupDataLen; // In 32 bit words  const Uint32 flags = signal->getLength() > 2 ? req->flags : 2;  if(getOwnNodeId() != getMasterNodeId()) {    jam();    sendBackupRef(senderRef, flags, signal, senderData, BackupRef::IAmNotMaster);    return;  }//if  if (m_diskless)  {    sendBackupRef(senderRef, flags, signal, senderData, 		  BackupRef::CannotBackupDiskless);    return;  }    if(dataLen32 != 0) {    jam();    sendBackupRef(senderRef, flags, signal, senderData, 		  BackupRef::BackupDefinitionNotImplemented);    return;  }//if  #ifdef DEBUG_ABORT  dumpUsedResources();#endif  /**   * Seize a backup record   */  BackupRecordPtr ptr;  c_backups.seize(ptr);  if(ptr.i == RNIL) {    jam();    sendBackupRef(senderRef, flags, signal, senderData, BackupRef::OutOfBackupRecord);    return;  }//if

⌨️ 快捷键说明

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