void DblqhProxy::execLQHFRAGREQ(Signal* signal) { LqhFragReq* req = (LqhFragReq*)signal->getDataPtrSend(); Uint32 instance = getInstanceKey(req->tableId, req->fragId); // wl4391_todo impl. method that fakes senders block-ref sendSignal(numberToRef(DBLQH, instance, getOwnNodeId()), GSN_LQHFRAGREQ, signal, signal->getLength(), JBB); }
void DblqhProxy::execLQHFRAGREQ(Signal* signal) { LqhFragReq* req = (LqhFragReq*)signal->getDataPtrSend(); Uint32 instance = getInstanceKey(req->tableId, req->fragId); /* Ensure instance hasn't quietly mapped back to proxy! */ ndbrequire(signal->getSendersBlockRef() != reference()); // wl4391_todo impl. method that fakes senders block-ref sendSignal(numberToRef(DBLQH, instance, getOwnNodeId()), GSN_LQHFRAGREQ, signal, signal->getLength(), JBB); }
void DblqhProxy::execLCP_FRAG_ORD(Signal* signal) { ndbrequire(signal->getLength() == LcpFragOrd::SignalLength); const LcpFragOrd* req = (const LcpFragOrd*)signal->getDataPtr(); const LcpFragOrd req_copy = *req; bool lcp_complete_ord = req->lastFragmentFlag; if (c_lcpRecord.m_state == LcpRecord::L_IDLE) { jam(); D("LCP: start" << V(req->lcpId)); c_lcpRecord.m_state = LcpRecord::L_STARTING; c_lcpRecord.m_lcpId = req->lcpId; c_lcpRecord.m_lcp_frag_rep_cnt = 0; c_lcpRecord.m_lcp_frag_ord_cnt = 0; c_lcpRecord.m_complete_outstanding = 0; c_lcpRecord.m_lastFragmentFlag = false; c_lcpRecord.m_empty_lcp_req.clear(); // handle start of LCP in PGMAN and TSMAN LcpFragOrd* req = (LcpFragOrd*)signal->getDataPtrSend(); *req = req_copy; EXECUTE_DIRECT(PGMAN, GSN_LCP_FRAG_ORD, signal, LcpFragOrd::SignalLength); *req = req_copy; EXECUTE_DIRECT(TSMAN, GSN_LCP_FRAG_ORD, signal, LcpFragOrd::SignalLength); c_lcpRecord.m_state = LcpRecord::L_RUNNING; } jam(); D("LCP: continue" << V(req->lcpId) << V(c_lcpRecord.m_lcp_frag_ord_cnt)); ndbrequire(c_lcpRecord.m_state == LcpRecord::L_RUNNING); ndbrequire(c_lcpRecord.m_lcpId == req->lcpId); if (lcp_complete_ord) { jam(); c_lcpRecord.m_lastFragmentFlag = true; if (getNoOfOutstanding(c_lcpRecord) == 0) { jam(); completeLCP_1(signal); return; } /** * Wait for all LCP_FRAG_ORD/REP to complete */ return; } else { jam(); c_lcpRecord.m_last_lcp_frag_ord = req_copy; } c_lcpRecord.m_lcp_frag_ord_cnt++; // Forward ndbrequire(req->tableId < c_tableRecSize); if (c_tableRec[req->tableId] == 0) { jam(); /** * Send to lqh-0...that will handle it... */ sendSignal(workerRef(0), GSN_LCP_FRAG_ORD, signal, LcpFragOrd::SignalLength, JBB); } else { jam(); Uint32 instance = getInstanceKey(req->tableId, req->fragmentId); sendSignal(numberToRef(DBLQH, instance, getOwnNodeId()), GSN_LCP_FRAG_ORD, signal, LcpFragOrd::SignalLength, JBB); } }