📄 dbtcmain.cpp
字号:
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 + -