Commit 9ec05de3 authored by unknown's avatar unknown
Browse files

ndb - bug#25636

  Fix DD problem during NR after 3 missed LCP's


storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp:
  Send START_FRAGREQ also for fragments wo/ LCP
storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp:
  inform TUP that no LCP is restored (if no lcp is restored :-)
storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp:
  inform TUP that no LCP is restored (if no lcp is restored :-)
storage/ndb/src/kernel/blocks/dbtup/DbtupDiskAlloc.cpp:
  inform TUP that no LCP is restored (if no lcp is restored :-)
storage/ndb/src/kernel/blocks/pgman.cpp:
  Add error insert using dump
parent 6226586c
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -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
  {
+13 −3
Original line number Diff line number Diff line
@@ -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;
@@ -13891,6 +13892,15 @@ void Dblqh::execSTART_FRAGREQ(Signal* signal)
      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;
+2 −0
Original line number Diff line number Diff line
@@ -2712,6 +2712,8 @@ public:
    Local_key m_key;
  };

  void disk_restart_mark_no_lcp(Uint32 table, Uint32 frag);
  
private:
  void disk_restart_undo_next(Signal*);
  void disk_restart_undo_lcp(Uint32, Uint32, Uint32 flag);
+7 −0
Original line number Diff line number Diff line
@@ -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)
{
+7 −0
Original line number Diff line number Diff line
@@ -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