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

📄 dbtcmain.cpp

📁 mysql-5.0.22.tar.gz源码包
💻 CPP
📖 第 1 页 / 共 5 页
字号:
    jam();    return;  }    {    PrepDropTabConf* conf = (PrepDropTabConf*)signal->getDataPtrSend();    conf->tableId = tabPtr.i;    conf->senderRef = reference();    conf->senderData = tabPtr.p->dropTable.senderData;    sendSignal(tabPtr.p->dropTable.senderRef, GSN_PREP_DROP_TAB_CONF, signal,	       PrepDropTabConf::SignalLength, JBB);    tabPtr.p->dropTable.senderRef = 0;  }}voidDbtc::execWAIT_DROP_TAB_REF(Signal* signal){  jamEntry();  WaitDropTabRef * ref = (WaitDropTabRef*)signal->getDataPtr();  TableRecordPtr tabPtr;  tabPtr.i = ref->tableId;  ptrCheckGuard(tabPtr, ctabrecFilesize, tableRecord);    ndbrequire(tabPtr.p->dropping == true);  Uint32 nodeId = refToNode(ref->senderRef);  tabPtr.p->dropTable.waitDropTabCount.clearWaitingFor(nodeId);    ndbrequire(ref->errorCode == WaitDropTabRef::NoSuchTable ||	     ref->errorCode == WaitDropTabRef::NF_FakeErrorREF);    if(!tabPtr.p->dropTable.waitDropTabCount.done()){    jam();    return;  }    {    PrepDropTabConf* conf = (PrepDropTabConf*)signal->getDataPtrSend();    conf->tableId = tabPtr.i;    conf->senderRef = reference();    conf->senderData = tabPtr.p->dropTable.senderData;    sendSignal(tabPtr.p->dropTable.senderRef, GSN_PREP_DROP_TAB_CONF, signal,	       PrepDropTabConf::SignalLength, JBB);    tabPtr.p->dropTable.senderRef = 0;  }}  voidDbtc::checkWaitDropTabFailedLqh(Signal* signal, Uint32 nodeId, Uint32 tableId){    TableRecordPtr tabPtr;  tabPtr.i = tableId;  WaitDropTabConf * conf = (WaitDropTabConf*)signal->getDataPtr();  conf->tableId = tableId;  const Uint32 RT_BREAK = 16;  for(Uint32 i = 0; i<RT_BREAK && tabPtr.i < ctabrecFilesize; i++, tabPtr.i++){    jam();    ptrAss(tabPtr, tableRecord);    if(tabPtr.p->enabled && tabPtr.p->dropping){      if(tabPtr.p->dropTable.waitDropTabCount.isWaitingFor(nodeId)){        jam();	conf->senderRef = calcLqhBlockRef(nodeId);	execWAIT_DROP_TAB_CONF(signal);	tabPtr.i++;	break;      }    }  }    if(tabPtr.i == ctabrecFilesize){    /**     * Finished     */    jam();    checkNodeFailComplete(signal, nodeId, HostRecord::NF_CHECK_DROP_TAB);    return;  }    signal->theData[0] = TcContinueB::CHECK_WAIT_DROP_TAB_FAILED_LQH;  signal->theData[1] = nodeId;  signal->theData[2] = tabPtr.i;  sendSignal(reference(), GSN_CONTINUEB, signal, 3, JBB);}voidDbtc::execDROP_TAB_REQ(Signal* signal){  jamEntry();  DropTabReq* req = (DropTabReq*)signal->getDataPtr();    TableRecordPtr tabPtr;  tabPtr.i = req->tableId;  ptrCheckGuard(tabPtr, ctabrecFilesize, tableRecord);    Uint32 senderRef = req->senderRef;  Uint32 senderData = req->senderData;  DropTabReq::RequestType rt = (DropTabReq::RequestType)req->requestType;    if(!tabPtr.p->enabled && rt == DropTabReq::OnlineDropTab){    jam();    DropTabRef* ref = (DropTabRef*)signal->getDataPtrSend();    ref->senderRef = reference();    ref->senderData = senderData;    ref->tableId = tabPtr.i;    ref->errorCode = DropTabRef::NoSuchTable;    sendSignal(senderRef, GSN_DROP_TAB_REF, signal,	       DropTabRef::SignalLength, JBB);    return;  }  if(!tabPtr.p->dropping && rt == DropTabReq::OnlineDropTab){    jam();    DropTabRef* ref = (DropTabRef*)signal->getDataPtrSend();    ref->senderRef = reference();    ref->senderData = senderData;    ref->tableId = tabPtr.i;    ref->errorCode = DropTabRef::DropWoPrep;    sendSignal(senderRef, GSN_DROP_TAB_REF, signal,	       DropTabRef::SignalLength, JBB);    return;  }    tabPtr.p->enabled = false;  tabPtr.p->dropping = false;    DropTabConf * conf = (DropTabConf*)signal->getDataPtrSend();  conf->tableId = tabPtr.i;  conf->senderRef = reference();  conf->senderData = senderData;  sendSignal(senderRef, GSN_DROP_TAB_CONF, signal,	     PrepDropTabConf::SignalLength, JBB);}void Dbtc::execALTER_TAB_REQ(Signal * signal){  AlterTabReq* const req = (AlterTabReq*)signal->getDataPtr();  const Uint32 senderRef = req->senderRef;  const Uint32 senderData = req->senderData;  const Uint32 changeMask = req->changeMask;  const Uint32 tableId = req->tableId;  const Uint32 tableVersion = req->tableVersion;  const Uint32 gci = req->gci;  AlterTabReq::RequestType requestType =     (AlterTabReq::RequestType) req->requestType;  TableRecordPtr tabPtr;  tabPtr.i = req->tableId;  ptrCheckGuard(tabPtr, ctabrecFilesize, tableRecord);  tabPtr.p->currentSchemaVersion = tableVersion;  // Request handled successfully   AlterTabConf * conf = (AlterTabConf*)signal->getDataPtrSend();  conf->senderRef = reference();  conf->senderData = senderData;  conf->changeMask = changeMask;  conf->tableId = tableId;  conf->tableVersion = tableVersion;  conf->gci = gci;  conf->requestType = requestType;  sendSignal(senderRef, GSN_ALTER_TAB_CONF, signal, 	     AlterTabConf::SignalLength, JBB);}/* ***************************************************************************//*                                START / RESTART                            *//* ***************************************************************************/void Dbtc::execREAD_CONFIG_REQ(Signal* signal) {  const ReadConfigReq * req = (ReadConfigReq*)signal->getDataPtr();  Uint32 ref = req->senderRef;  Uint32 senderData = req->senderData;  ndbrequire(req->noOfParameters == 0);    jamEntry();    const ndb_mgm_configuration_iterator * p =     theConfiguration.getOwnConfigIterator();  ndbrequire(p != 0);    initData();    UintR apiConnect;  UintR tcConnect;  UintR tables;  UintR localScan;  UintR tcScan;  ndbrequire(!ndb_mgm_get_int_parameter(p, CFG_TC_API_CONNECT, &apiConnect));  ndbrequire(!ndb_mgm_get_int_parameter(p, CFG_TC_TC_CONNECT, &tcConnect));  ndbrequire(!ndb_mgm_get_int_parameter(p, CFG_TC_TABLE, &tables));  ndbrequire(!ndb_mgm_get_int_parameter(p, CFG_TC_LOCAL_SCAN, &localScan));  ndbrequire(!ndb_mgm_get_int_parameter(p, CFG_TC_SCAN, &tcScan));  ccacheFilesize = (apiConnect/3) + 1;  capiConnectFilesize = apiConnect;  ctcConnectFilesize  = tcConnect;  ctabrecFilesize     = tables;  cscanrecFileSize = tcScan;  cscanFragrecFileSize = localScan;  initRecords();  initialiseRecordsLab(signal, 0, ref, senderData);  Uint32 val = 3000;  ndb_mgm_get_int_parameter(p, CFG_DB_TRANSACTION_DEADLOCK_TIMEOUT, &val);  set_timeout_value(val);  val = 3000;  ndb_mgm_get_int_parameter(p, CFG_DB_TRANSACTION_INACTIVE_TIMEOUT, &val);  set_appl_timeout_value(val);  val = 1;  //ndb_mgm_get_int_parameter(p, CFG_DB_PARALLEL_TRANSACTION_TAKEOVER, &val);  set_no_parallel_takeover(val);  ctimeOutCheckDelay = 50; // 500ms}//Dbtc::execSIZEALT_REP()void Dbtc::execSTTOR(Signal* signal) {  Uint16 tphase;  jamEntry();                                                     /* START CASE */  tphase = signal->theData[1];  csignalKey = signal->theData[6];  switch (tphase) {  case ZSPH1:    jam();    startphase1x010Lab(signal);    return;  default:    jam();    sttorryLab(signal); /* START PHASE 255 */    return;  }//switch}//Dbtc::execSTTOR()void Dbtc::sttorryLab(Signal* signal) {  signal->theData[0] = csignalKey;  signal->theData[1] = 3;    /* BLOCK CATEGORY */  signal->theData[2] = 2;    /* SIGNAL VERSION NUMBER */  signal->theData[3] = ZSPH1;  signal->theData[4] = 255;  sendSignal(NDBCNTR_REF, GSN_STTORRY, signal, 5, JBB);}//Dbtc::sttorryLab()/* ***************************************************************************//*                          INTERNAL  START / RESTART                        *//*****************************************************************************/void Dbtc::execNDB_STTOR(Signal* signal) {  Uint16 tndbstartphase;  Uint16 tstarttype;  jamEntry();  tusersblkref = signal->theData[0];  tnodeid = signal->theData[1];  tndbstartphase = signal->theData[2];   /* START PHASE      */  tstarttype = signal->theData[3];       /* START TYPE       */  switch (tndbstartphase) {  case ZINTSPH1:    jam();    intstartphase1x010Lab(signal);    return;  case ZINTSPH2:    jam();    intstartphase2x010Lab(signal);    return;  case ZINTSPH3:    jam();    intstartphase3x010Lab(signal);      /* SEIZE CONNECT RECORD IN EACH LQH*/// Start transaction event reporting.    c_counters.c_trans_status = TransCounters::Timer;    c_counters.reset();    signal->theData[0] = TcContinueB::ZTRANS_EVENT_REP;    sendSignalWithDelay(cownref, GSN_CONTINUEB, signal, 10, 1);    return;  case ZINTSPH6:    jam();    csystemStart = SSS_TRUE;    break;  default:    jam();    break;  }//switch  ndbsttorry010Lab(signal);  return;}//Dbtc::execNDB_STTOR()void Dbtc::ndbsttorry010Lab(Signal* signal) {  signal->theData[0] = cownref;  sendSignal(cndbcntrblockref, GSN_NDB_STTORRY, signal, 1, JBB);}//Dbtc::ndbsttorry010Lab()voidDbtc::set_timeout_value(Uint32 timeOut){  timeOut = timeOut / 10;  if (timeOut < 2) {    jam();    timeOut = 100;  }//if  ctimeOutValue = timeOut;}voidDbtc::set_appl_timeout_value(Uint32 timeOut){  if (timeOut)  {    timeOut /= 10;    if (timeOut < ctimeOutValue) {      jam();      c_appl_timeout_value = ctimeOutValue;    }//if  }  c_appl_timeout_value = timeOut;}voidDbtc::set_no_parallel_takeover(Uint32 noParallelTakeOver){  if (noParallelTakeOver == 0) {    jam();    noParallelTakeOver = 1;  } else if (noParallelTakeOver > MAX_NDB_NODES) {    jam();    noParallelTakeOver = MAX_NDB_NODES;  }//if  cnoParallelTakeOver = noParallelTakeOver;}/* ***************************************************************************//*                        S T A R T P H A S E 1 X                            *//*                     INITIALISE BLOCKREF AND BLOCKNUMBERS                  *//* ***************************************************************************/void Dbtc::startphase1x010Lab(Signal* signal) {  csystemStart = SSS_FALSE;  ctimeOutCheckCounter = 0;  ctimeOutCheckFragCounter = 0;  ctimeOutMissedHeartbeats = 0;  ctimeOutCheckHeartbeat = 0;  ctimeOutCheckLastHeartbeat = 0;  ctimeOutCheckActive = TOCS_FALSE;  ctimeOutCheckFragActive = TOCS_FALSE;  sttorryLab(signal);}//Dbtc::startphase1x010Lab()/*****************************************************************************//*                        I N T S T A R T P H A S E 1 X                      *//*                         INITIALISE ALL RECORDS.                           *//*****************************************************************************/void Dbtc::intstartphase1x010Lab(Signal* signal) {  cownNodeid = tnodeid;  cownref =          calcTcBlockRef(cownNodeid);  clqhblockref =     calcLqhBlockRef(cownNodeid);  cdihblockref =     calcDihBlockRef(cownNodeid);  cdictblockref =    calcDictBlockRef(cownNodeid);  cndbcntrblockref = calcNdbCntrBlockRef(cownNodeid);  cerrorBlockref   = calcNdbCntrBlockRef(cownNodeid);  coperationsize = 0;  cfailure_nr = 0;  ndbsttorry010Lab(signal);}//Dbtc::intstartphase1x010Lab()/*****************************************************************************//*                         I N T S T A R T P H A S E 2 X                     *//*                          SET-UP LOCAL CONNECTIONS.                        *//*****************************************************************************/void Dbtc::intstartphase2x010Lab(Signal* signal) {  tcConnectptr.i = cfirstfreeTcConnect;  intstartphase2x020Lab(signal);}//Dbtc::intstartphase2x010Lab()void Dbtc::intstartphase2x020Lab(Signal* signal) {  if (tcConnectptr.i == RNIL) {    jam();    ndbsttorry010Lab(signal);    return;  }//if  ptrCheckGuard(tcConnectptr, ctcConnectFilesize, tcConnectRecord);  tcConnectptr.p->tcConnectstate = OS_CONNECTING_DICT;/* ****************** *//*     DISEIZEREQ   < *//* ****************** */  signal->theData[0] = tcConnectptr.i;  signal->theData[1] = cownref;  sendSignal(cdihblockref, GSN_DISEIZEREQ, signal, 2, JBB);}//Dbtc::intstartphase2x020Lab()void Dbtc::execDISEIZECONF(Signal* signal) {  jamEntry();  tcConnectptr.i = signal->theData[0];  ptrCheckGuard(tcConnectptr, ctcConnectFilesize, tcConnectRecord);  tcConnectptr.p->dihConnectptr = signal->theData[1];  tcConnectptr.i = tcConnectptr.p->nextTcConnect;  intstartphase2x020Lab(signal);}//Dbtc::execDISEIZECONF()/*****************************************************************************//*                         I N T S T A R T P H A S E 3 X                     *//*                        PREPARE DISTRIBUTED CONNECTIONS                    *//*****************************************************************************/void Dbtc::intstartphase3x010Lab(Signal* signal) {  signal->theData[0] = cownref;  sendSignal(cndbcntrblockref, GSN_READ_NODESREQ, signal, 1, JBB);}//Dbtc::intstartphase3x010Lab()void Dbtc::execREAD_NODESCONF(Signal* signal) {  UintR guard0;  jamEntry();  ReadNodesConf * const readNodes = (ReadNodesConf *)&signal->theData[0];  csystemnodes  = readNodes->noOfNodes;

⌨️ 快捷键说明

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