Commit 4d552dbb authored by jonas@perch.ndb.mysql.com's avatar jonas@perch.ndb.mysql.com
Browse files

ndb - bug#34033

  remove LCP-snapshot from MM-tables,
  removing possibility of spurious 899 on MM-tables
parent 664cc992
Loading
Loading
Loading
Loading
+61 −54
Original line number Diff line number Diff line
@@ -53,7 +53,14 @@ Dbtup::execACC_SCANREQ(Signal* signal)
    // flags
    Uint32 bits = 0;
    
    if (!AccScanReq::getLcpScanFlag(req->requestInfo))

    if (AccScanReq::getLcpScanFlag(req->requestInfo))
    {
      jam();
      bits |= ScanOp::SCAN_LCP;
      c_scanOpPool.getPtr(scanPtr, c_lcp_scan_op);
    }
    else
    {
      // seize from pool and link to per-fragment list
      LocalDLList<ScanOp> list(c_scanOpPool, frag.m_scanList);
@@ -61,6 +68,7 @@ Dbtup::execACC_SCANREQ(Signal* signal)
	jam();
	break;
      }
    }
     
    if (!AccScanReq::getNoDiskScanFlag(req->requestInfo)
        && tablePtr.p->m_no_of_disk_attributes)
@@ -81,17 +89,12 @@ Dbtup::execACC_SCANREQ(Signal* signal)
      else
        bits |= ScanOp::SCAN_LOCK_EX;
    }
    } else {
      jam();
      // LCP scan and disk

      ndbrequire(frag.m_lcp_scan_op == c_lcp_scan_op);
      c_scanOpPool.getPtr(scanPtr, frag.m_lcp_scan_op);
      ndbrequire(scanPtr.p->m_fragPtrI == fragPtr.i);
      bits |= ScanOp::SCAN_LCP;
      if (tablePtr.p->m_attributes[MM].m_no_of_varsize > 0) {
        bits |= ScanOp::SCAN_VS;
      }
    if (AccScanReq::getLcpScanFlag(req->requestInfo))
    {
      jam();
      ndbrequire((bits & ScanOp::SCAN_DD) == 0);
      ndbrequire((bits & ScanOp::SCAN_LOCK) == 0);
    }
    
    bits |= AccScanReq::getNRScanFlag(req->requestInfo) ? ScanOp::SCAN_NR : 0;
@@ -1107,16 +1110,17 @@ Dbtup::releaseScanOp(ScanOpPtr& scanPtr)
  fragPtr.i = scanPtr.p->m_fragPtrI;
  ptrCheckGuard(fragPtr, cnoOfFragrec, fragrecord);

  if(! (scanPtr.p->m_bits & ScanOp::SCAN_LCP))
  if(scanPtr.p->m_bits & ScanOp::SCAN_LCP)
  {
    LocalDLList<ScanOp> list(c_scanOpPool, fragPtr.p->m_scanList);    
    list.release(scanPtr);
    jam();
    fragPtr.p->m_lcp_scan_op = RNIL;
    scanPtr.p->m_fragPtrI = RNIL;
  }
  else
  {
    ndbrequire(fragPtr.p->m_lcp_scan_op == scanPtr.i);
    fragPtr.p->m_lcp_scan_op = RNIL;
    scanPtr.p->m_fragPtrI = RNIL;
    jam();
    LocalDLList<ScanOp> list(c_scanOpPool, fragPtr.p->m_scanList);    
    list.release(scanPtr);
  }
}

@@ -1129,6 +1133,8 @@ Dbtup::execLCP_FRAG_ORD(Signal* signal)
  tablePtr.i = req->tableId;
  ptrCheckGuard(tablePtr, cnoOfTablerec, tablerec);

  if (tablePtr.p->m_no_of_disk_attributes)
  {
    jam();
    FragrecordPtr fragPtr;
    Uint32 fragId = req->fragmentId;
@@ -1147,3 +1153,4 @@ Dbtup::execLCP_FRAG_ORD(Signal* signal)
    scanFirst(signal, scanPtr);
    scanPtr.p->m_state = ScanOp::First;
  }
}