📄 dbutil.cpp
字号:
const Uint32 pageSizeInWords = 128; Uint32 propPage[pageSizeInWords]; LinearWriter w(&propPage[0], 128); w.first(); w.add(UtilPrepareReq::NoOfOperations, 1); w.add(UtilPrepareReq::OperationType, UtilPrepareReq::Delete); w.add(UtilPrepareReq::TableId, (unsigned int)0); // SYSTAB_0 w.add(UtilPrepareReq::AttributeId, (unsigned int)0);// SYSKEY_0 Uint32 length = w.getWordsUsed(); ndbassert(length <= pageSizeInWords); sendUtilPrepareReqSignals(signal, propPage, length); } if(tCase == 215){ jam(); ndbout << "--------------------------------------------------" << endl; const Uint32 pageSizeInWords = 128; Uint32 propPage[pageSizeInWords]; LinearWriter w(&propPage[0],128); w.first(); w.add(UtilPrepareReq::NoOfOperations, 1); w.add(UtilPrepareReq::OperationType, UtilPrepareReq::Insert); w.add(UtilPrepareReq::TableId, (unsigned int)0); // SYSTAB_0 w.add(UtilPrepareReq::AttributeId, (unsigned int)0); // SYSKEY_0 w.add(UtilPrepareReq::AttributeId, 1); // NEXTID Uint32 length = w.getWordsUsed(); ndbassert(length <= pageSizeInWords); sendUtilPrepareReqSignals(signal, propPage, length); } if(tCase == 216){ jam(); ndbout << "--------------------------------------------------" << endl; const Uint32 pageSizeInWords = 128; Uint32 propPage[pageSizeInWords]; LinearWriter w(&propPage[0],128); w.first(); w.add(UtilPrepareReq::NoOfOperations, 1); w.add(UtilPrepareReq::OperationType, UtilPrepareReq::Update); w.add(UtilPrepareReq::TableId, (unsigned int)0); // SYSTAB_0 w.add(UtilPrepareReq::AttributeId, (unsigned int)0);// SYSKEY_0 w.add(UtilPrepareReq::AttributeId, 1); // NEXTID Uint32 length = w.getWordsUsed(); ndbassert(length <= pageSizeInWords); sendUtilPrepareReqSignals(signal, propPage, length); } if(tCase == 217){ jam(); ndbout << "--------------------------------------------------" << endl; const Uint32 pageSizeInWords = 128; Uint32 propPage[pageSizeInWords]; LinearWriter w(&propPage[0],128); w.first(); w.add(UtilPrepareReq::NoOfOperations, 1); w.add(UtilPrepareReq::OperationType, UtilPrepareReq::Read); w.add(UtilPrepareReq::TableId, (unsigned int)0); // SYSTAB_0 w.add(UtilPrepareReq::AttributeId, (unsigned int)0);// SYSKEY_0 Uint32 length = w.getWordsUsed(); ndbassert(length <= pageSizeInWords); sendUtilPrepareReqSignals(signal, propPage, length); } */ /****************************************************************************/ /* // Obsolete tests, should be rewritten for long signals!! if(tCase == 220){ jam(); ndbout << "--------------------------------------------------" << endl; Uint32 prepI = signal->theData[1]; Uint32 length = signal->theData[2]; Uint32 attributeValue0 = signal->theData[3]; Uint32 attributeValue1a = signal->theData[4]; Uint32 attributeValue1b = signal->theData[5]; ndbrequire(prepI != 0); UtilExecuteReq * req = (UtilExecuteReq *)signal->getDataPtrSend(); req->senderData = 221; req->prepareId = prepI; req->totalDataLen = length; // Including headers req->offset = 0; AttributeHeader::init(&req->attrData[0], 0, 1); // AttrNo 0, DataSize req->attrData[1] = attributeValue0; // AttrValue AttributeHeader::init(&req->attrData[2], 1, 2); // AttrNo 1, DataSize req->attrData[3] = attributeValue1a; // AttrValue req->attrData[4] = attributeValue1b; // AttrValue printUTIL_EXECUTE_REQ(stdout, signal->getDataPtrSend(), 3 + 5,0); sendSignal(DBUTIL_REF, GSN_UTIL_EXECUTE_REQ, signal, 3 + 5, JBB); }*/ /**************************************************************************** * 230 : PRINT STATE */#ifdef ARRAY_GUARD if(tCase == 230){ jam(); ndbout << "--------------------------------------------------" << endl; if (signal->length() <= 1) { ndbout << "Usage: DUMP 230 <recordType> <recordNo>" << endl << "[1] Print Prepare (running) records" << endl << "[2] Print PreparedOperation records" << endl << "[3] Print Transaction records" << endl << "[4] Print Operation records" << endl << "Ex. \"dump 230 1 2\" prints Prepare record no 2." << endl << endl << "210 : PREPARE_REQ DELETE SYSTAB_0 SYSKEY_0" << endl << "211 : PREPARE_REQ INSERT SYSTAB_0 SYSKEY_0 NEXTID" << endl << "212 : PREPARE_REQ UPDATE SYSTAB_0 SYSKEY_0 NEXTID" << endl << "213 : PREPARE_REQ READ SYSTAB_0 SYSKEY_0" << endl << "214 : PREPARE_REQ DELETE SYSTAB_0 SYSKEY_0 using id" << endl << "215 : PREPARE_REQ INSERT SYSTAB_0 SYSKEY_0 NEXTID using id" << endl << "216 : PREPARE_REQ UPDATE SYSTAB_0 SYSKEY_0 NEXTID using id" << endl << "217 : PREPARE_REQ READ SYSTAB_0 SYSKEY_0 using id" << endl << "220 : EXECUTE_REQ <PrepId> <Len> <Val1> <Val2a> <Val2b>" <<endl << "299 : Crash system (using ndbrequire(0))" << endl << "Ex. \"dump 220 3 5 1 0 17 \" prints Prepare record no 2." << endl; return; } switch (signal->theData[1]) { case 1: // ** Print a specific record ** if (signal->length() >= 3) { PreparePtr prepPtr; if (!c_preparePool.isSeized(signal->theData[2])) { ndbout << "Prepare Id: " << signal->theData[2] << " (Not seized!)" << endl; } else { c_preparePool.getPtr(prepPtr, signal->theData[2]); prepPtr.p->print(); } return; } // ** Print all records ** PreparePtr prepPtr; if (!c_runningPrepares.first(prepPtr)) { ndbout << "No Prepare records exist" << endl; return; } while (!prepPtr.isNull()) { prepPtr.p->print(); c_runningPrepares.next(prepPtr); } return; case 2: // ** Print a specific record ** if (signal->length() >= 3) { if (!c_preparedOperationPool.isSeized(signal->theData[2])) { ndbout << "PreparedOperation Id: " << signal->theData[2] << " (Not seized!)" << endl; return; } ndbout << "PreparedOperation Id: " << signal->theData[2] << endl; PreparedOperationPtr prepOpPtr; c_runningPreparedOperations.getPtr(prepOpPtr, signal->theData[2]); prepOpPtr.p->print(); return; } // ** Print all records ** PreparedOperationPtr prepOpPtr; if (!c_runningPreparedOperations.first(prepOpPtr)) { ndbout << "No PreparedOperations exist" << endl; return; } while (!prepOpPtr.isNull()) { ndbout << "[-PreparedOperation no " << prepOpPtr.i << ":"; prepOpPtr.p->print(); ndbout << "]"; c_runningPreparedOperations.next(prepOpPtr); } return; case 3: // ** Print a specific record ** if (signal->length() >= 3) { ndbout << "Print specific record not implemented." << endl; return; } // ** Print all records ** ndbout << "Print all records not implemented, specify an Id." << endl; return; case 4: ndbout << "Not implemented" << endl; return; default: ndbout << "Unknown input (try without any data)" << endl; return; } }#endif if(tCase == 240 && signal->getLength() == 2){ MutexManager::ActiveMutexPtr ptr; ndbrequire(c_mutexMgr.seize(ptr)); ptr.p->m_mutexId = signal->theData[1]; Callback c = { safe_cast(&DbUtil::mutex_created), ptr.i }; ptr.p->m_callback = c; c_mutexMgr.create(signal, ptr); ndbout_c("c_mutexMgr.create ptrI=%d mutexId=%d", ptr.i, ptr.p->m_mutexId); } if(tCase == 241 && signal->getLength() == 2){ MutexManager::ActiveMutexPtr ptr; ndbrequire(c_mutexMgr.seize(ptr)); ptr.p->m_mutexId = signal->theData[1]; Callback c = { safe_cast(&DbUtil::mutex_locked), ptr.i }; ptr.p->m_callback = c; c_mutexMgr.lock(signal, ptr); ndbout_c("c_mutexMgr.lock ptrI=%d mutexId=%d", ptr.i, ptr.p->m_mutexId); } if(tCase == 242 && signal->getLength() == 2){ MutexManager::ActiveMutexPtr ptr; ptr.i = signal->theData[1]; c_mutexMgr.getPtr(ptr); Callback c = { safe_cast(&DbUtil::mutex_unlocked), ptr.i }; ptr.p->m_callback = c; c_mutexMgr.unlock(signal, ptr); ndbout_c("c_mutexMgr.unlock ptrI=%d mutexId=%d", ptr.i, ptr.p->m_mutexId); } if(tCase == 243 && signal->getLength() == 3){ MutexManager::ActiveMutexPtr ptr; ndbrequire(c_mutexMgr.seize(ptr)); ptr.p->m_mutexId = signal->theData[1]; ptr.p->m_mutexKey = signal->theData[2]; Callback c = { safe_cast(&DbUtil::mutex_destroyed), ptr.i }; ptr.p->m_callback = c; c_mutexMgr.destroy(signal, ptr); ndbout_c("c_mutexMgr.destroy ptrI=%d mutexId=%d key=%d", ptr.i, ptr.p->m_mutexId, ptr.p->m_mutexKey); }}voidDbUtil::mutex_created(Signal* signal, Uint32 ptrI, Uint32 retVal){ MutexManager::ActiveMutexPtr ptr; ptr.i = ptrI; c_mutexMgr.getPtr(ptr); ndbout_c("mutex_created - mutexId=%d, retVal=%d", ptr.p->m_mutexId, retVal); c_mutexMgr.release(ptrI);}voidDbUtil::mutex_destroyed(Signal* signal, Uint32 ptrI, Uint32 retVal){ MutexManager::ActiveMutexPtr ptr; ptr.i = ptrI; c_mutexMgr.getPtr(ptr); ndbout_c("mutex_destroyed - mutexId=%d, retVal=%d", ptr.p->m_mutexId, retVal); c_mutexMgr.release(ptrI);}voidDbUtil::mutex_locked(Signal* signal, Uint32 ptrI, Uint32 retVal){ MutexManager::ActiveMutexPtr ptr; ptr.i = ptrI; c_mutexMgr.getPtr(ptr); ndbout_c("mutex_locked - mutexId=%d, retVal=%d key=%d ptrI=%d", ptr.p->m_mutexId, retVal, ptr.p->m_mutexKey, ptrI); if(retVal) c_mutexMgr.release(ptrI);}voidDbUtil::mutex_unlocked(Signal* signal, Uint32 ptrI, Uint32 retVal){ MutexManager::ActiveMutexPtr ptr; ptr.i = ptrI; c_mutexMgr.getPtr(ptr); ndbout_c("mutex_unlocked - mutexId=%d, retVal=%d", ptr.p->m_mutexId, retVal); if(!retVal) c_mutexMgr.release(ptrI);} voidDbUtil::execUTIL_SEQUENCE_REF(Signal* signal){ jamEntry(); ndbout << "UTIL_SEQUENCE_REF" << endl; printUTIL_SEQUENCE_REF(stdout, signal->getDataPtrSend(), signal->length(), 0);}voidDbUtil::execUTIL_SEQUENCE_CONF(Signal* signal){ jamEntry(); ndbout << "UTIL_SEQUENCE_CONF" << endl; printUTIL_SEQUENCE_CONF(stdout, signal->getDataPtrSend(), signal->length(),0);}voidDbUtil::execUTIL_PREPARE_CONF(Signal* signal){ jamEntry(); ndbout << "UTIL_PREPARE_CONF" << endl; printUTIL_PREPARE_CONF(stdout, signal->getDataPtrSend(), signal->length(), 0);}voidDbUtil::execUTIL_PREPARE_REF(Signal* signal){ jamEntry(); ndbout << "UTIL_PREPARE_REF" << endl; printUTIL_PREPARE_REF(stdout, signal->getDataPtrSend(), signal->length(), 0);}void DbUtil::execUTIL_EXECUTE_CONF(Signal* signal) { jamEntry(); ndbout << "UTIL_EXECUTE_CONF" << endl; printUTIL_EXECUTE_CONF(stdout, signal->getDataPtrSend(), signal->length(), 0);}void DbUtil::execUTIL_EXECUTE_REF(Signal* signal) { jamEntry(); ndbout << "UTIL_EXECUTE_REF" << endl; printUTIL_EXECUTE_REF(stdout, signal->getDataPtrSend(), signal->length(), 0);}void DbUtil::execUTIL_RELEASE_CONF(Signal* signal) { jamEntry(); ndbout << "UTIL_RELEASE_CONF" << endl;}void DbUtil::execUTIL_RELEASE_REF(Signal* signal) { jamEntry(); ndbout << "UTIL_RELEASE_REF" << endl;}voidDbUtil::sendUtilPrepareRef(Signal* signal, UtilPrepareRef::ErrorCode error, Uint32 recipient, Uint32 senderData){ UtilPrepareRef * ref = (UtilPrepareRef *)signal->getDataPtrSend(); ref->errorCode = error; ref->senderData = senderData; sendSignal(recipient, GSN_UTIL_PREPARE_REF, signal, UtilPrepareRef::SignalLength, JBB);}voidDbUtil::sendUtilExecuteRef(Signal* signal, UtilExecuteRef::ErrorCode error, Uint32 TCerror, Uint32 recipient, Uint32 senderData){ UtilExecuteRef * ref = (UtilExecuteRef *)signal->getDataPtrSend(); ref->senderData = senderData; ref->errorCode = error; ref->TCErrorCode = TCerror; sendSignal(recipient, GSN_UTIL_EXECUTE_REF, signal, UtilPrepareRef::SignalLength, JBB);}/************************************************************************** * ------------------------------------------------------------------------ * MODULE: Prepare service * ------------------------------------------------------------------------ * * Prepares a transaction by storing info in some structs **************************************************************************/void DbUtil::execUTIL_PREPARE_REQ(Signal* signal){ jamEntry(); /**************** * Decode Signal ****************/ UtilPrepareReq * req = (UtilPrepareReq *)signal->getDataPtr(); const Uint32 senderRef = req->senderRef; const Uint32 senderData = req->senderData; if(signal->getNoOfSections() == 0) { // Missing prepare data jam(); releaseSections(signal); sendUtilPrepareRef(signal, UtilPrepareRef::MISSING_PROPERTIES_SECTION, senderRef, senderData); return; } PreparePtr prepPtr; SegmentedSectionPtr ptr; jam(); if(!c_runningPrepares.seize(prepPtr)) { jam(); releaseSections(signal); sendUtilPrepareRef(signal, UtilPrepareRef::PREPARE_SEIZE_ERROR, senderRef, senderData); return; };
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -