void Dbtup::buildIndexOffline(Signal* signal, Uint32 buildPtrI) { jam(); /** * We need to make table read-only...as mtoib does not work otherwise */ BuildIndexPtr buildPtr; buildPtr.i= buildPtrI; c_buildIndexList.getPtr(buildPtr); const BuildIndxImplReq* buildReq = (const BuildIndxImplReq*)&buildPtr.p->m_request; AlterTabReq* req = (AlterTabReq*)signal->getDataPtrSend(); /** * Note: before 7.3.4, 7.2.15, 7.1.30 fifth word and * up was undefined. */ bzero(req, sizeof(*req)); req->senderRef = reference(); req->senderData = buildPtrI; req->tableId = buildReq->tableId; req->requestType = AlterTabReq::AlterTableReadOnly; sendSignal(calcInstanceBlockRef(DBLQH), GSN_ALTER_TAB_REQ, signal, AlterTabReq::SignalLength, JBB); }
void Dbtup::deleteScanProcedure(Signal* signal, Operationrec* regOperPtr) { StoredProcPtr storedPtr; Uint32 storedProcId = signal->theData[4]; c_storedProcPool.getPtr(storedPtr, storedProcId); ndbrequire(storedPtr.p->storedCode != ZSTORED_PROCEDURE_FREE); if (unlikely(storedPtr.p->storedCode == ZCOPY_PROCEDURE)) { releaseCopyProcedure(); } else { /* ZSCAN_PROCEDURE */ releaseSection(storedPtr.p->storedProcIVal); } storedPtr.p->storedCode = ZSTORED_PROCEDURE_FREE; storedPtr.p->storedProcIVal= RNIL; c_storedProcPool.release(storedPtr); set_trans_state(regOperPtr, TRANS_IDLE); signal->theData[0] = regOperPtr->userpointer; signal->theData[1] = storedProcId; BlockReference lqhRef = calcInstanceBlockRef(DBLQH); sendSignal(lqhRef, GSN_STORED_PROCCONF, signal, 2, JBB); }//Dbtup::deleteScanProcedure()
void Dbtup::storedProcBufferSeizeErrorLab(Signal* signal, Operationrec* regOperPtr, Uint32 storedProcPtr, Uint32 errorCode) { regOperPtr->m_any_value = 0; set_trans_state(regOperPtr, TRANS_ERROR_WAIT_STORED_PROCREQ); signal->theData[0] = regOperPtr->userpointer; signal->theData[1] = errorCode; signal->theData[2] = storedProcPtr; BlockReference lqhRef = calcInstanceBlockRef(DBLQH); sendSignal(lqhRef, GSN_STORED_PROCREF, signal, 3, JBB); }//Dbtup::storedSeizeAttrinbufrecErrorLab()
void Dbtup::scanProcedure(Signal* signal, Operationrec* regOperPtr, SectionHandle* handle, bool isCopy) { /* Size a stored procedure record, and link the * stored procedure AttrInfo section from it */ ndbrequire( handle->m_cnt == 1 ); ndbrequire( handle->m_ptr[0].p->m_sz > 0 ); StoredProcPtr storedPtr; c_storedProcPool.seize(storedPtr); ndbrequire(storedPtr.i != RNIL); storedPtr.p->storedCode = (isCopy)? ZCOPY_PROCEDURE : ZSCAN_PROCEDURE; Uint32 lenAttrInfo= handle->m_ptr[0].p->m_sz; storedPtr.p->storedProcIVal= handle->m_ptr[0].i; handle->clear(); set_trans_state(regOperPtr, TRANS_IDLE); if (lenAttrInfo >= ZATTR_BUFFER_SIZE) { // yes ">=" jam(); // send REF and change state storedProcBufferSeizeErrorLab(signal, regOperPtr, storedPtr.i, ZSTORED_TOO_MUCH_ATTRINFO_ERROR); return; } signal->theData[0] = regOperPtr->userpointer; signal->theData[1] = storedPtr.i; BlockReference lqhRef = calcInstanceBlockRef(DBLQH); sendSignal(lqhRef, GSN_STORED_PROCCONF, signal, 2, JBB); }//Dbtup::scanProcedure()
void Dbtup::buildIndexOffline_table_readonly(Signal* signal, Uint32 buildPtrI) { // get build record BuildIndexPtr buildPtr; buildPtr.i= buildPtrI; c_buildIndexList.getPtr(buildPtr); const BuildIndxImplReq* buildReq = (const BuildIndxImplReq*)&buildPtr.p->m_request; // get table TablerecPtr tablePtr; tablePtr.i= buildReq->tableId; ptrCheckGuard(tablePtr, cnoOfTablerec, tablerec); for (;buildPtr.p->m_fragNo < NDB_ARRAY_SIZE(tablePtr.p->fragrec); buildPtr.p->m_fragNo++) { jam(); FragrecordPtr fragPtr; fragPtr.i = tablePtr.p->fragrec[buildPtr.p->m_fragNo]; if (fragPtr.i == RNIL) { jam(); continue; } ptrCheckGuard(fragPtr, cnoOfFragrec, fragrecord); mt_BuildIndxReq req; bzero(&req, sizeof(req)); req.senderRef = reference(); req.senderData = buildPtr.i; req.tableId = buildReq->tableId; req.indexId = buildPtr.p->m_indexId; req.fragId = tablePtr.p->fragid[buildPtr.p->m_fragNo]; SimulatedBlock * tux = globalData.getBlock(DBTUX); if (instance() != 0) { tux = tux->getInstance(instance()); ndbrequire(tux != 0); } req.tux_ptr = tux; req.tup_ptr = this; req.func_ptr = Dbtux_mt_buildIndexFragment_wrapper_C; req.buffer_size = 16*32768; // thread-local-buffer Uint32 * req_ptr = signal->getDataPtrSend(); memcpy(req_ptr, &req, sizeof(req)); sendSignal(NDBFS_REF, GSN_BUILD_INDX_IMPL_REQ, signal, (sizeof(req) + 15) / 4, JBB); buildPtr.p->m_outstanding++; if (buildPtr.p->m_outstanding >= m_max_parallel_index_build) { jam(); return; } } if (buildPtr.p->m_outstanding == 0) { jam(); AlterTabReq* req = (AlterTabReq*)signal->getDataPtrSend(); /** * Note: before 7.3.4, 7.2.15, 7.1.30 fifth word and * up was undefined. */ bzero(req, sizeof(*req)); req->senderRef = reference(); req->senderData = buildPtrI; req->tableId = buildReq->tableId; req->requestType = AlterTabReq::AlterTableReadWrite; sendSignal(calcInstanceBlockRef(DBLQH), GSN_ALTER_TAB_REQ, signal, AlterTabReq::SignalLength, JBB); return; } else { jam(); // wait for replies return; } }