void Restore::sendSTTORRY(Signal* signal){ signal->theData[0] = 0; signal->theData[3] = 1; signal->theData[4] = 255; // No more start phases from missra BlockReference cntrRef = !isNdbMtLqh() ? NDBCNTR_REF : RESTORE_REF; sendSignal(cntrRef, GSN_STTORRY, signal, 6, JBB); }
/* * STTOR is sent to one block at a time. In NDBCNTR it triggers * NDB_STTOR to the "old" blocks. STTOR carries start phase (SP) and * NDB_STTOR carries internal start phase (ISP). * * SP ISP activities * 1 none * 2 1 * 3 2 recover metadata, activate indexes * 4 3 recover data * 5 4-6 * 6 skip * 7 skip * 8 7 build non-logged indexes on SR * * DBTUX catches type of start (IS, SR, NR, INR) at SP 3 and updates * internal start phase at SP 7. These are used to prevent index * maintenance operations caused by redo log at SR. */ void Dbtux::execSTTOR(Signal* signal) { jamEntry(); Uint32 startPhase = signal->theData[1]; switch (startPhase) { case 1: jam(); CLEAR_ERROR_INSERT_VALUE; c_tup = (Dbtup*)globalData.getBlock(DBTUP, instance()); ndbrequire(c_tup != 0); break; case 3: jam(); c_typeOfStart = signal->theData[7]; break; return; case 7: c_internalStartPhase = 6; /* * config cannot yet be changed dynamically but we start the * loop always anyway because the cost is minimal */ c_statMon.m_loopIndexId = 0; statMonSendContinueB(signal); break; default: jam(); break; } signal->theData[0] = 0; // garbage signal->theData[1] = 0; // garbage signal->theData[2] = 0; // garbage signal->theData[3] = 1; signal->theData[4] = 3; // for c_typeOfStart signal->theData[5] = 7; // for c_internalStartPhase signal->theData[6] = 255; BlockReference cntrRef = !isNdbMtLqh() ? NDBCNTR_REF : DBTUX_REF; sendSignal(cntrRef, GSN_STTORRY, signal, 7, JBB); }