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

📄 simulatedblock.cpp

📁 mysql-5.0.22.tar.gz源码包
💻 CPP
📖 第 1 页 / 共 4 页
字号:
  lsout(ndbout_c("loop: %d secNo: %d secCount: %d sz: %d", 		 loop, secNo, secCount, sz));    /**   * Store fragment id   */  secNos[secCount] = info.m_fragmentId;    Uint32 fragInfo = info.m_fragInfo;  info.m_fragInfo = 2;  switch(loop){  case Unknown:    if(secNo >= 0){      lsout(ndbout_c("Unknown - Full"));      /**       * Not finished       */      break;    }    // Fall through    lsout(ndbout_c("Unknown - Done"));    info.m_status = FragmentSendInfo::SendComplete;    ndbassert(fragInfo == 2);    fragInfo = 3;  case Full:    break;  }    signal->header.m_noOfSections = 0;  signal->header.m_fragmentInfo = fragInfo;    sendSignal(info.m_nodeReceiverGroup,	     info.m_gsn,	     signal, 	     sigLen + secCount + 1,	     (JobBufferLevel)info.m_prio,	     signalPtr,	     secCount);    if(fragInfo == 3){    /**     * This is the last signal     */    g_sectionSegmentPool.release(info.m_theDataSection.p[sigLen]);  }}voidSimulatedBlock::sendFragmentedSignal(BlockReference ref, 				     GlobalSignalNumber gsn, 				     Signal* signal, 				     Uint32 length, 				     JobBufferLevel jbuf,				     Callback & c,				     Uint32 messageSize){  bool res = true;  Ptr<FragmentSendInfo> ptr;  res = c_segmentedFragmentSendList.seize(ptr);  ndbrequire(res);    res = sendFirstFragment(* ptr.p, 			  NodeReceiverGroup(ref),			  gsn,			  signal,			  length,			  jbuf,			  messageSize);  ndbrequire(res);    if(ptr.p->m_status == FragmentSendInfo::SendComplete){    c_segmentedFragmentSendList.release(ptr);    if(c.m_callbackFunction != 0)      execute(signal, c, 0);    return;  }  ptr.p->m_callback = c;  if(!c_fragSenderRunning){    c_fragSenderRunning = true;    ContinueFragmented * sig = (ContinueFragmented*)signal->getDataPtrSend();    sig->line = __LINE__;    sendSignal(reference(), GSN_CONTINUE_FRAGMENTED, signal, 1, JBB);  }}voidSimulatedBlock::sendFragmentedSignal(NodeReceiverGroup rg, 				     GlobalSignalNumber gsn, 				     Signal* signal, 				     Uint32 length, 				     JobBufferLevel jbuf,				     Callback & c,				     Uint32 messageSize){  bool res = true;  Ptr<FragmentSendInfo> ptr;  res = c_segmentedFragmentSendList.seize(ptr);  ndbrequire(res);    res = sendFirstFragment(* ptr.p, 			  rg,			  gsn,			  signal,			  length,			  jbuf,			  messageSize);  ndbrequire(res);    if(ptr.p->m_status == FragmentSendInfo::SendComplete){    c_segmentedFragmentSendList.release(ptr);    if(c.m_callbackFunction != 0)      execute(signal, c, 0);    return;  }  ptr.p->m_callback = c;  if(!c_fragSenderRunning){    c_fragSenderRunning = true;    ContinueFragmented * sig = (ContinueFragmented*)signal->getDataPtrSend();    sig->line = __LINE__;    sendSignal(reference(), GSN_CONTINUE_FRAGMENTED, signal, 1, JBB);  }}SimulatedBlock::Callback SimulatedBlock::TheEmptyCallback = {0, 0};voidSimulatedBlock::sendFragmentedSignal(BlockReference ref, 				     GlobalSignalNumber gsn, 				     Signal* signal, 				     Uint32 length, 				     JobBufferLevel jbuf,				     LinearSectionPtr ptr[3],				     Uint32 noOfSections,				     Callback & c,				     Uint32 messageSize){  bool res = true;  Ptr<FragmentSendInfo> tmp;  res = c_linearFragmentSendList.seize(tmp);  ndbrequire(res);  res = sendFirstFragment(* tmp.p, 			  NodeReceiverGroup(ref),			  gsn,			  signal,			  length,			  jbuf,			  ptr,			  noOfSections,			  messageSize);  ndbrequire(res);    if(tmp.p->m_status == FragmentSendInfo::SendComplete){    c_linearFragmentSendList.release(tmp);    if(c.m_callbackFunction != 0)      execute(signal, c, 0);    return;  }  tmp.p->m_callback = c;    if(!c_fragSenderRunning){    c_fragSenderRunning = true;    ContinueFragmented * sig = (ContinueFragmented*)signal->getDataPtrSend();    sig->line = __LINE__;    sendSignal(reference(), GSN_CONTINUE_FRAGMENTED, signal, 1, JBB);  }}voidSimulatedBlock::sendFragmentedSignal(NodeReceiverGroup rg, 				     GlobalSignalNumber gsn, 				     Signal* signal, 				     Uint32 length, 				     JobBufferLevel jbuf,				     LinearSectionPtr ptr[3],				     Uint32 noOfSections,				     Callback & c,				     Uint32 messageSize){  bool res = true;  Ptr<FragmentSendInfo> tmp;  res = c_linearFragmentSendList.seize(tmp);  ndbrequire(res);  res = sendFirstFragment(* tmp.p, 			  rg,			  gsn,			  signal,			  length,			  jbuf,			  ptr,			  noOfSections,			  messageSize);  ndbrequire(res);    if(tmp.p->m_status == FragmentSendInfo::SendComplete){    c_linearFragmentSendList.release(tmp);    if(c.m_callbackFunction != 0)      execute(signal, c, 0);    return;  }  tmp.p->m_callback = c;    if(!c_fragSenderRunning){    c_fragSenderRunning = true;    ContinueFragmented * sig = (ContinueFragmented*)signal->getDataPtrSend();    sig->line = __LINE__;    sendSignal(reference(), GSN_CONTINUE_FRAGMENTED, signal, 1, JBB);  }}NodeInfo &SimulatedBlock::setNodeInfo(NodeId nodeId) {  ndbrequire(nodeId > 0 && nodeId < MAX_NODES);  return globalData.m_nodeInfo[nodeId];}void SimulatedBlock::execUTIL_CREATE_LOCK_REF(Signal* signal){  ljamEntry();  c_mutexMgr.execUTIL_CREATE_LOCK_REF(signal);}void SimulatedBlock::execUTIL_CREATE_LOCK_CONF(Signal* signal){  ljamEntry();  c_mutexMgr.execUTIL_CREATE_LOCK_CONF(signal);}void SimulatedBlock::execUTIL_DESTORY_LOCK_REF(Signal* signal){  ljamEntry();  c_mutexMgr.execUTIL_DESTORY_LOCK_REF(signal);}void SimulatedBlock::execUTIL_DESTORY_LOCK_CONF(Signal* signal){  ljamEntry();  c_mutexMgr.execUTIL_DESTORY_LOCK_CONF(signal);}void SimulatedBlock::execUTIL_LOCK_REF(Signal* signal){  ljamEntry();  c_mutexMgr.execUTIL_LOCK_REF(signal);}void SimulatedBlock::execUTIL_LOCK_CONF(Signal* signal){  ljamEntry();  c_mutexMgr.execUTIL_LOCK_CONF(signal);}void SimulatedBlock::execUTIL_UNLOCK_REF(Signal* signal){  ljamEntry();  c_mutexMgr.execUTIL_UNLOCK_REF(signal);}void SimulatedBlock::execUTIL_UNLOCK_CONF(Signal* signal){  ljamEntry();  c_mutexMgr.execUTIL_UNLOCK_CONF(signal);}voidSimulatedBlock::ignoreMutexUnlockCallback(Signal* signal, 					  Uint32 ptrI, Uint32 retVal){  c_mutexMgr.release(ptrI);}void UpgradeStartup::installEXEC(SimulatedBlock* block){  SimulatedBlock::ExecFunction * a = block->theExecArray;  switch(block->number()){  case QMGR:    a[UpgradeStartup::GSN_CM_APPCHG] = &SimulatedBlock::execUPGRADE;    break;  case CNTR:    a[UpgradeStartup::GSN_CNTR_MASTERREF] = &SimulatedBlock::execUPGRADE;    a[UpgradeStartup::GSN_CNTR_MASTERCONF] = &SimulatedBlock::execUPGRADE;    break;  }}voidSimulatedBlock::execUPGRADE(Signal* signal){  Uint32 gsn = signal->header.theVerId_signalNumber;  switch(gsn){  case UpgradeStartup::GSN_CM_APPCHG:    UpgradeStartup::execCM_APPCHG(* this, signal);    break;  case UpgradeStartup::GSN_CNTR_MASTERREF:    UpgradeStartup::execCNTR_MASTER_REPLY(* this, signal);    break;  case UpgradeStartup::GSN_CNTR_MASTERCONF:    UpgradeStartup::execCNTR_MASTER_REPLY(* this, signal);    break;  }}voidSimulatedBlock::fsRefError(Signal* signal, Uint32 line, const char *msg) {  const FsRef *fsRef = (FsRef*)signal->getDataPtr();  Uint32 errorCode = fsRef->errorCode;  Uint32 osErrorCode = fsRef->osErrorCode;  char msg2[100];  sprintf(msg2, "%s: %s. OS errno: %u", getBlockName(number()), msg, osErrorCode);  progError(line, errorCode, msg2);}voidSimulatedBlock::execFSWRITEREF(Signal* signal) {  fsRefError(signal, __LINE__, "File system write failed");}voidSimulatedBlock::execFSREADREF(Signal* signal) {  fsRefError(signal, __LINE__, "File system read failed");}voidSimulatedBlock::execFSCLOSEREF(Signal* signal) {  fsRefError(signal, __LINE__, "File system close failed");}voidSimulatedBlock::execFSOPENREF(Signal* signal) {  fsRefError(signal, __LINE__, "File system open failed");}voidSimulatedBlock::execFSREMOVEREF(Signal* signal) {  fsRefError(signal, __LINE__, "File system remove failed");}voidSimulatedBlock::execFSSYNCREF(Signal* signal) {  fsRefError(signal, __LINE__, "File system sync failed");}voidSimulatedBlock::execFSAPPENDREF(Signal* signal) {  fsRefError(signal, __LINE__, "File system append failed");}#ifdef VM_TRACEvoidSimulatedBlock::clear_global_variables(){  Ptr<void> ** tmp = m_global_variables;  while(* tmp != 0){    (* tmp)->i = RNIL;    (* tmp)->p = 0;    tmp++;  }}voidSimulatedBlock::init_globals_list(void ** tmp, size_t cnt){  m_global_variables = new Ptr<void> * [cnt+1];  for(size_t i = 0; i<cnt; i++){    m_global_variables[i] = (Ptr<void>*)tmp[i];  }  m_global_variables[cnt] = 0;}#endif#include "KeyDescriptor.hpp"Uint32SimulatedBlock::xfrm_key(Uint32 tab, const Uint32* src, 			 Uint32 *dst, Uint32 dstSize,			 Uint32 keyPartLen[MAX_ATTRIBUTES_IN_INDEX]) const{  const KeyDescriptor * desc = g_key_descriptor_pool.getPtr(tab);  const Uint32 noOfKeyAttr = desc->noOfKeyAttr;  Uint32 i = 0;  Uint32 srcPos = 0;  Uint32 dstPos = 0;  while (i < noOfKeyAttr)   {    const KeyDescriptor::KeyAttr& keyAttr = desc->keyAttr[i];    Uint32 dstWords =      xfrm_attr(keyAttr.attributeDescriptor, keyAttr.charsetInfo,                src, srcPos, dst, dstPos, dstSize);    keyPartLen[i++] = dstWords;    if (unlikely(dstWords == 0))      return 0;  }  return dstPos;}Uint32SimulatedBlock::xfrm_attr(Uint32 attrDesc, CHARSET_INFO* cs,                          const Uint32* src, Uint32 & srcPos,                          Uint32* dst, Uint32 & dstPos, Uint32 dstSize) const{  Uint32 srcBytes = AttributeDescriptor::getSizeInBytes(attrDesc);  Uint32 srcWords = (srcBytes + 3) / 4;  Uint32 dstWords = ~0;  uchar* dstPtr = (uchar*)&dst[dstPos];  const uchar* srcPtr = (const uchar*)&src[srcPos];    if (cs == NULL)   {    jam();    memcpy(dstPtr, srcPtr, srcWords << 2);    dstWords = srcWords;  }   else   {    jam();    Uint32 typeId = AttributeDescriptor::getType(attrDesc);    Uint32 lb, len;    bool ok = NdbSqlUtil::get_var_length(typeId, srcPtr, srcBytes, lb, len);    if (unlikely(!ok))      return 0;    Uint32 xmul = cs->strxfrm_multiply;    if (xmul == 0)      xmul = 1;    /*     * Varchar end-spaces are ignored in comparisons.  To get same hash     * we blank-pad to maximum length via strnxfrm.     */    Uint32 dstLen = xmul * (srcBytes - lb);    ndbrequire(dstLen <= ((dstSize - dstPos) << 2));    int n = NdbSqlUtil::strnxfrm_bug7284(cs, dstPtr, dstLen, srcPtr + lb, len);    if (unlikely(n == -1))      return 0;    while ((n & 3) != 0)     {      dstPtr[n++] = 0;    }    dstWords = (n >> 2);  }  dstPos += dstWords;  srcPos += srcWords;  return dstWords;}Uint32SimulatedBlock::create_distr_key(Uint32 tableId,				 Uint32 *data, 				 const Uint32 				 keyPartLen[MAX_ATTRIBUTES_IN_INDEX]) const {  const KeyDescriptor* desc = g_key_descriptor_pool.getPtr(tableId);  const Uint32 noOfKeyAttr = desc->noOfKeyAttr;  Uint32 noOfDistrKeys = desc->noOfDistrKeys;    Uint32 *src = data;  Uint32 *dst = data;  Uint32 i = 0;  Uint32 dstPos = 0;    if(keyPartLen)  {    while (i < noOfKeyAttr && noOfDistrKeys)     {      Uint32 attr = desc->keyAttr[i].attributeDescriptor;      Uint32 len = keyPartLen[i];      if(AttributeDescriptor::getDKey(attr))      {	noOfDistrKeys--;	memmove(dst+dstPos, src, len << 2);	dstPos += len;      }      src += len;      i++;    }  }  else  {    while (i < noOfKeyAttr && noOfDistrKeys)     {      Uint32 attr = desc->keyAttr[i].attributeDescriptor;      Uint32 len = AttributeDescriptor::getSizeInWords(attr);      if(AttributeDescriptor::getDKey(attr))      {	noOfDistrKeys--;	memmove(dst+dstPos, src, len << 2);	dstPos += len;      }      src += len;      i++;    }  }  return dstPos;}

⌨️ 快捷键说明

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