ndb - bug#25636

  Fix DD problem during NR after 3 missed LCP's
parent f8fdb7c9
......@@ -2916,6 +2916,17 @@ Dbdih::nr_start_fragment(Signal* signal,
takeOverPtr.p->toCurrentTabref,
takeOverPtr.p->toCurrentFragid);
replicaPtr.p->lcpIdStarted = 0;
BlockReference ref = calcLqhBlockRef(takeOverPtr.p->toStartingNode);
StartFragReq *req = (StartFragReq *)signal->getDataPtrSend();
req->userPtr = 0;
req->userRef = reference();
req->lcpNo = ZNIL;
req->lcpId = 0;
req->tableId = takeOverPtr.p->toCurrentTabref;
req->fragId = takeOverPtr.p->toCurrentFragid;
req->noOfLogNodes = 0;
sendSignal(ref, GSN_START_FRAGREQ, signal,
StartFragReq::SignalLength, JBB);
}
else
{
......
......@@ -13836,6 +13836,7 @@ void Dblqh::execSTART_FRAGREQ(Signal* signal)
Uint32 lcpNo = startFragReq->lcpNo;
Uint32 noOfLogNodes = startFragReq->noOfLogNodes;
Uint32 lcpId = startFragReq->lcpId;
ndbrequire(noOfLogNodes <= 4);
fragptr.p->fragStatus = Fragrecord::CRASH_RECOVERING;
fragptr.p->srBlockref = startFragReq->userRef;
......@@ -13890,7 +13891,16 @@ void Dblqh::execSTART_FRAGREQ(Signal* signal)
signal->theData[1] = fragId;
sendSignal(DBACC_REF, GSN_EXPANDCHECK2, signal, 2, JBB);
}
if (getNodeState().getNodeRestartInProgress())
{
jam();
fragptr.p->fragStatus = Fragrecord::ACTIVE_CREATION;
}
c_tup->disk_restart_mark_no_lcp(tabptr.i, fragId);
jamEntry();
return;
}//if
......@@ -16713,8 +16723,8 @@ void Dblqh::initialiseRecordsLab(Signal* signal, Uint32 data,
ccurrentGcprec = RNIL;
caddNodeState = ZFALSE;
cstartRecReq = ZFALSE;
cnewestGci = ~0;
cnewestCompletedGci = ~0;
cnewestGci = 0;
cnewestCompletedGci = 0;
crestartOldestGci = 0;
crestartNewestGci = 0;
csrPhaseStarted = ZSR_NO_PHASE_STARTED;
......
......@@ -2711,6 +2711,8 @@ public:
Ptr<Extent_info> m_extent_ptr;
Local_key m_key;
};
void disk_restart_mark_no_lcp(Uint32 table, Uint32 frag);
private:
void disk_restart_undo_next(Signal*);
......
......@@ -1422,6 +1422,13 @@ Dbtup::disk_restart_undo_next(Signal* signal)
sendSignal(LGMAN_REF, GSN_CONTINUEB, signal, 1, JBB);
}
void
Dbtup::disk_restart_mark_no_lcp(Uint32 tableId, Uint32 fragId)
{
jamEntry();
disk_restart_undo_lcp(tableId, fragId, Fragrecord::UC_CREATE);
}
void
Dbtup::disk_restart_undo_lcp(Uint32 tableId, Uint32 fragId, Uint32 flag)
{
......
......@@ -1258,6 +1258,8 @@ Pgman::process_lcp(Signal* signal)
void
Pgman::process_lcp_locked(Signal* signal, Ptr<Page_entry> ptr)
{
CRASH_INSERTION(11006);
ptr.p->m_last_lcp = m_last_lcp;
if (ptr.p->m_state & Page_entry::DIRTY)
{
......@@ -2351,6 +2353,11 @@ Pgman::execDUMP_STATE_ORD(Signal* signal)
{
g_dbg_lcp = ~g_dbg_lcp;
}
if (signal->theData[0] == 11006)
{
SET_ERROR_INSERT_VALUE(11006);
}
}
// page cache client
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment