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

📄 dblqhmain.cpp

📁 mysql-5.0.22.tar.gz源码包
💻 CPP
📖 第 1 页 / 共 5 页
字号:
void Dblqh::fragrefLab(Signal* signal,                       BlockReference fragBlockRef,                       Uint32 fragConPtr,                       Uint32 errorCode) {  LqhFragRef * ref = (LqhFragRef*)signal->getDataPtrSend();  ref->senderData = fragConPtr;  ref->errorCode = errorCode;  sendSignal(fragBlockRef, GSN_LQHFRAGREF, signal, 	     LqhFragRef::SignalLength, JBB);  return;}//Dblqh::fragrefLab()/* * Abort on-going ops. */void Dblqh::abortAddFragOps(Signal* signal){  fragptr.i = addfragptr.p->fragmentPtr;  ptrCheckGuard(fragptr, cfragrecFileSize, fragrecord);  signal->theData[0] = (Uint32)-1;  if (addfragptr.p->tup1Connectptr != RNIL) {    jam();    signal->theData[1] = addfragptr.p->tup1Connectptr;    sendSignal(fragptr.p->tupBlockref, GSN_TUPFRAGREQ, signal, 2, JBB);    addfragptr.p->tup1Connectptr = RNIL;  }  if (addfragptr.p->tup2Connectptr != RNIL) {    jam();    signal->theData[1] = addfragptr.p->tup2Connectptr;    sendSignal(fragptr.p->tupBlockref, GSN_TUPFRAGREQ, signal, 2, JBB);    addfragptr.p->tup2Connectptr = RNIL;  }  if (addfragptr.p->tux1Connectptr != RNIL) {    jam();    signal->theData[1] = addfragptr.p->tux1Connectptr;    sendSignal(fragptr.p->tuxBlockref, GSN_TUXFRAGREQ, signal, 2, JBB);    addfragptr.p->tux1Connectptr = RNIL;  }  if (addfragptr.p->tux2Connectptr != RNIL) {    jam();    signal->theData[1] = addfragptr.p->tux2Connectptr;    sendSignal(fragptr.p->tuxBlockref, GSN_TUXFRAGREQ, signal, 2, JBB);    addfragptr.p->tux2Connectptr = RNIL;  }}/* ************>> *//*  ACCFRAGREF  > *//* ************>> */void Dblqh::execACCFRAGREF(Signal* signal) {  jamEntry();  addfragptr.i = signal->theData[0];  ptrCheckGuard(addfragptr, caddfragrecFileSize, addFragRecord);  terrorCode = signal->theData[1];  ndbrequire(addfragptr.p->addfragStatus == AddFragRecord::ACC_ADDFRAG);  addfragptr.p->addfragErrorCode = terrorCode;  const Uint32 ref = addfragptr.p->dictBlockref;  const Uint32 senderData = addfragptr.p->dictConnectptr;  const Uint32 errorCode = addfragptr.p->addfragErrorCode;  releaseAddfragrec(signal);  fragrefLab(signal, ref, senderData, errorCode);  return;}//Dblqh::execACCFRAGREF()/* ************>> *//*  TUPFRAGREF  > *//* ************>> */void Dblqh::execTUPFRAGREF(Signal* signal) {  jamEntry();  addfragptr.i = signal->theData[0];  ptrCheckGuard(addfragptr, caddfragrecFileSize, addFragRecord);  terrorCode = signal->theData[1];  fragptr.i = addfragptr.p->fragmentPtr;  ptrCheckGuard(fragptr, cfragrecFileSize, fragrecord);  addfragptr.p->addfragErrorCode = terrorCode;  // no operation to release, just add some jams  switch (addfragptr.p->addfragStatus) {  case AddFragRecord::WAIT_TWO_TUP:    jam();    break;  case AddFragRecord::WAIT_ONE_TUP:    jam();    break;  case AddFragRecord::WAIT_TWO_TUX:    jam();    break;  case AddFragRecord::WAIT_ONE_TUX:    jam();    break;  default:    ndbrequire(false);    break;  }  abortAddFragOps(signal);  const Uint32 ref = addfragptr.p->dictBlockref;  const Uint32 senderData = addfragptr.p->dictConnectptr;  const Uint32 errorCode = addfragptr.p->addfragErrorCode;  releaseAddfragrec(signal);  fragrefLab(signal, ref, senderData, errorCode);}//Dblqh::execTUPFRAGREF()/* ************>> *//*  TUXFRAGREF  > *//* ************>> */void Dblqh::execTUXFRAGREF(Signal* signal) {  jamEntry();  execTUPFRAGREF(signal);}//Dblqh::execTUXFRAGREF/* *********************> *//*  TUP_ADD_ATTREF      > *//* *********************> */void Dblqh::execTUP_ADD_ATTRREF(Signal* signal) {  jamEntry();  addfragptr.i = signal->theData[0];  ptrCheckGuard(addfragptr, caddfragrecFileSize, addFragRecord);  terrorCode = signal->theData[1];  addfragptr.p->addfragErrorCode = terrorCode;  // operation was released on the other side  switch (addfragptr.p->addfragStatus) {  case AddFragRecord::TUP_ATTR_WAIT1:    jam();    ndbrequire(addfragptr.p->tup1Connectptr != RNIL);    addfragptr.p->tup1Connectptr = RNIL;    break;  case AddFragRecord::TUP_ATTR_WAIT2:    jam();    ndbrequire(addfragptr.p->tup2Connectptr != RNIL);    addfragptr.p->tup2Connectptr = RNIL;    break;  case AddFragRecord::TUX_ATTR_WAIT1:    jam();    ndbrequire(addfragptr.p->tux1Connectptr != RNIL);    addfragptr.p->tux1Connectptr = RNIL;    break;  case AddFragRecord::TUX_ATTR_WAIT2:    jam();    ndbrequire(addfragptr.p->tux2Connectptr != RNIL);    addfragptr.p->tux2Connectptr = RNIL;    break;  default:    ndbrequire(false);    break;  }  abortAddFragOps(signal);    const Uint32 Ref = addfragptr.p->dictBlockref;  const Uint32 senderData = addfragptr.p->dictConnectptr;  const Uint32 errorCode = addfragptr.p->addfragErrorCode;  releaseAddfragrec(signal);    LqhAddAttrRef *const ref = (LqhAddAttrRef*)signal->getDataPtrSend();  ref->senderData = senderData;  ref->errorCode = errorCode;  sendSignal(Ref, GSN_LQHADDATTREF, signal, 	     LqhAddAttrRef::SignalLength, JBB);  }//Dblqh::execTUP_ADD_ATTRREF()/* **********************> *//*  TUX_ADD_ATTRREF      > *//* **********************> */void Dblqh::execTUX_ADD_ATTRREF(Signal* signal) {  jamEntry();  execTUP_ADD_ATTRREF(signal);}//Dblqh::execTUX_ADD_ATTRREFvoidDblqh::execPREP_DROP_TAB_REQ(Signal* signal){  jamEntry();  PrepDropTabReq* req = (PrepDropTabReq*)signal->getDataPtr();    Uint32 senderRef = req->senderRef;  Uint32 senderData = req->senderData;    TablerecPtr tabPtr;  tabPtr.i = req->tableId;  ptrCheckGuard(tabPtr, ctabrecFileSize, tablerec);    Uint32 errCode = 0;  errCode = checkDropTabState(tabPtr.p->tableStatus, GSN_PREP_DROP_TAB_REQ);  if(errCode != 0){    jam();    PrepDropTabRef* ref = (PrepDropTabRef*)signal->getDataPtrSend();    ref->senderRef = reference();    ref->senderData = senderData;    ref->tableId = tabPtr.i;    ref->errorCode = errCode;    sendSignal(senderRef, GSN_PREP_DROP_TAB_REF, signal,	       PrepDropTabRef::SignalLength, JBB);    return;  }    tabPtr.p->tableStatus = Tablerec::PREP_DROP_TABLE_ONGOING;  tabPtr.p->waitingTC.clear();  tabPtr.p->waitingDIH.clear();    PrepDropTabConf * conf = (PrepDropTabConf*)signal->getDataPtrSend();  conf->tableId = tabPtr.i;  conf->senderRef = reference();  conf->senderData = senderData;  sendSignal(senderRef, GSN_PREP_DROP_TAB_CONF, signal,	     PrepDropTabConf::SignalLength, JBB);    signal->theData[0] = ZPREP_DROP_TABLE;  signal->theData[1] = tabPtr.i;  signal->theData[2] = senderRef;  signal->theData[3] = senderData;  checkDropTab(signal);}voidDblqh::checkDropTab(Signal* signal){  TablerecPtr tabPtr;  tabPtr.i = signal->theData[1];  ptrCheckGuard(tabPtr, ctabrecFileSize, tablerec);    ndbrequire(tabPtr.p->tableStatus == Tablerec::PREP_DROP_TABLE_ONGOING);    if(tabPtr.p->usageCount > 0){    jam();    sendSignalWithDelay(reference(), GSN_CONTINUEB, signal, 100, 4);    return;  }  bool lcpDone = true;  lcpPtr.i = 0;  ptrAss(lcpPtr, lcpRecord);  if(lcpPtr.p->lcpState != LcpRecord::LCP_IDLE){    jam();    if(lcpPtr.p->currentFragment.lcpFragOrd.tableId == tabPtr.i){      jam();      lcpDone = false;    }        if(lcpPtr.p->lcpQueued &&        lcpPtr.p->queuedFragment.lcpFragOrd.tableId == tabPtr.i){      jam();      lcpDone = false;    }  }    if(!lcpDone){    jam();    sendSignalWithDelay(reference(), GSN_CONTINUEB, signal, 100, 4);    return;  }    tabPtr.p->tableStatus = Tablerec::PREP_DROP_TABLE_DONE;  WaitDropTabConf * conf = (WaitDropTabConf*)signal->getDataPtrSend();  conf->tableId = tabPtr.i;  conf->senderRef = reference();  for(Uint32 i = 1; i<MAX_NDB_NODES; i++){    if(tabPtr.p->waitingTC.get(i)){      tabPtr.p->waitingTC.clear(i);      sendSignal(calcTcBlockRef(i), GSN_WAIT_DROP_TAB_CONF, signal,		 WaitDropTabConf::SignalLength, JBB);    }    if(tabPtr.p->waitingDIH.get(i)){      tabPtr.p->waitingDIH.clear(i);      sendSignal(calcDihBlockRef(i), GSN_WAIT_DROP_TAB_CONF, signal,		 WaitDropTabConf::SignalLength, JBB);    }  }}voidDblqh::execWAIT_DROP_TAB_REQ(Signal* signal){  jamEntry();  WaitDropTabReq * req = (WaitDropTabReq*)signal->getDataPtr();    TablerecPtr tabPtr;  tabPtr.i = req->tableId;  ptrCheckGuard(tabPtr, ctabrecFileSize, tablerec);    Uint32 senderRef = req->senderRef;  Uint32 nodeId = refToNode(senderRef);  Uint32 blockNo = refToBlock(senderRef);  if(tabPtr.p->tableStatus == Tablerec::PREP_DROP_TABLE_ONGOING){    jam();    switch(blockNo){    case DBTC:      tabPtr.p->waitingTC.set(nodeId);      break;    case DBDIH:      tabPtr.p->waitingDIH.set(nodeId);      break;    default:      ndbrequire(false);    }    return;  }  if(tabPtr.p->tableStatus == Tablerec::PREP_DROP_TABLE_DONE){    jam();    WaitDropTabConf * conf = (WaitDropTabConf*)signal->getDataPtrSend();    conf->tableId = tabPtr.i;    conf->senderRef = reference();    sendSignal(senderRef, GSN_WAIT_DROP_TAB_CONF, signal,	       WaitDropTabConf::SignalLength, JBB);    return;  }  WaitDropTabRef * ref = (WaitDropTabRef*)signal->getDataPtrSend();  ref->tableId = tabPtr.i;  ref->senderRef = reference();  bool ok = false;  switch(tabPtr.p->tableStatus){  case Tablerec::TABLE_DEFINED:    ok = true;    ref->errorCode = WaitDropTabRef::IllegalTableState;    break;  case Tablerec::NOT_DEFINED:    ok = true;    ref->errorCode = WaitDropTabRef::NoSuchTable;    break;  case Tablerec::ADD_TABLE_ONGOING:    ok = true;    ref->errorCode = WaitDropTabRef::IllegalTableState;    break;  case Tablerec::PREP_DROP_TABLE_ONGOING:  case Tablerec::PREP_DROP_TABLE_DONE:    // Should have been take care of above    ndbrequire(false);  }  ndbrequire(ok);  ref->tableStatus = tabPtr.p->tableStatus;  sendSignal(senderRef, GSN_WAIT_DROP_TAB_REF, signal,	     WaitDropTabRef::SignalLength, JBB);  return;}voidDblqh::execDROP_TAB_REQ(Signal* signal){  jamEntry();  DropTabReq* req = (DropTabReq*)signal->getDataPtr();    Uint32 senderRef = req->senderRef;  Uint32 senderData = req->senderData;    TablerecPtr tabPtr;  tabPtr.i = req->tableId;  ptrCheckGuard(tabPtr, ctabrecFileSize, tablerec);    do {    if(req->requestType == DropTabReq::RestartDropTab){      jam();      break;    }        if(req->requestType == DropTabReq::OnlineDropTab){      jam();      Uint32 errCode = 0;      errCode = checkDropTabState(tabPtr.p->tableStatus, GSN_DROP_TAB_REQ);      if(errCode != 0){	jam();		DropTabRef* ref = (DropTabRef*)signal->getDataPtrSend();	ref->senderRef = reference();	ref->senderData = senderData;	ref->tableId = tabPtr.i;	ref->errorCode = errCode;	sendSignal(senderRef, GSN_DROP_TAB_REF, signal,		   DropTabRef::SignalL

⌨️ 快捷键说明

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