void DblqhProxy::execLQH_TRANSREQ(Signal* signal) { jamEntry(); if (!checkNodeFailSequence(signal)) { jam(); return; } const LqhTransReq* req = (const LqhTransReq*)signal->getDataPtr(); Ss_LQH_TRANSREQ& ss = ssSeize<Ss_LQH_TRANSREQ>(); ss.m_req = *req; ndbrequire(signal->getLength() == LqhTransReq::SignalLength); sendREQ(signal, ss); /** * See if this is a "resend" (i.e multi TC failure) * and if so, mark "old" record as invalid */ Uint32 nodeId = ss.m_req.failedNodeId; for (Uint32 i = 0; i<NDB_ARRAY_SIZE(c_ss_LQH_TRANSREQ.m_pool); i++) { if (c_ss_LQH_TRANSREQ.m_pool[i].m_ssId != 0 && c_ss_LQH_TRANSREQ.m_pool[i].m_ssId != ss.m_ssId && c_ss_LQH_TRANSREQ.m_pool[i].m_req.failedNodeId == nodeId) { jam(); c_ss_LQH_TRANSREQ.m_pool[i].m_valid = false; } } }
void DbtcProxy::execTAKE_OVERTCCONF(Signal* signal) { jamEntry(); if (!checkNodeFailSequence(signal)) { jam(); return; } for (Uint32 i = 0; i < c_workers; i++) { jam(); Uint32 ref = numberToRef(number(), workerInstance(i), getOwnNodeId()); sendSignal(ref, GSN_TAKE_OVERTCCONF, signal, signal->getLength(), JBB); } }
void DblqhProxy::execLQH_TRANSREQ(Signal* signal) { jamEntry(); if (!checkNodeFailSequence(signal)) { jam(); return; } const LqhTransReq* req = (const LqhTransReq*)signal->getDataPtr(); Ss_LQH_TRANSREQ& ss = ssSeize<Ss_LQH_TRANSREQ>(); ss.m_maxInstanceId = 0; ss.m_req = *req; if (signal->getLength() < LqhTransReq::SignalLength) { /** * TC that performs take over doesn't suppport taking over one * TC instance at a time */ ss.m_req.instanceId = RNIL; } ndbrequire(signal->getLength() <= LqhTransReq::SignalLength); sendREQ(signal, ss); /** * See if this is a "resend" (i.e multi TC failure) * and if so, mark "old" record as invalid */ Uint32 nodeId = ss.m_req.failedNodeId; for (Uint32 i = 0; i<NDB_ARRAY_SIZE(c_ss_LQH_TRANSREQ.m_pool); i++) { if (c_ss_LQH_TRANSREQ.m_pool[i].m_ssId != 0 && c_ss_LQH_TRANSREQ.m_pool[i].m_ssId != ss.m_ssId && c_ss_LQH_TRANSREQ.m_pool[i].m_req.failedNodeId == nodeId) { jam(); c_ss_LQH_TRANSREQ.m_pool[i].m_valid = false; } } }