Commit 0300c895 authored by unknown's avatar unknown
Browse files

tux optim 1 - use physical fragment addresses

parent ead8bb63
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -69,7 +69,7 @@ class TuxFragReq {
  friend class Dblqh;
  friend class Dbtux;
public:
  STATIC_CONST( SignalLength = 9 );
  STATIC_CONST( SignalLength = 14 );
private:
  Uint32 userPtr;
  Uint32 userRef;
@@ -80,6 +80,9 @@ private:
  Uint32 fragOff;
  Uint32 tableType;
  Uint32 primaryTableId;
  Uint32 tupIndexFragPtrI;
  Uint32 tupTableFragPtrI[2];
  Uint32 accTableFragPtrI[2];
};

class TuxFragConf {
+1 −0
Original line number Diff line number Diff line
@@ -2432,6 +2432,7 @@ void Dbacc::execACC_LOCKREQ(Signal* signal)
    }
    fragrecptr.i = req->fragPtrI;
    ptrCheckGuard(fragrecptr, cfragmentsize, fragmentrec);
    ndbrequire(req->fragId == fragrecptr.p->myfid);
    // caller must be explicit here
    ndbrequire(req->accOpPtr == RNIL);
    // seize operation to hold the lock
+12 −0
Original line number Diff line number Diff line
@@ -1225,6 +1225,18 @@ Dblqh::sendAddFragReq(Signal* signal)
      tuxreq->fragOff = addfragptr.p->lh3DistrBits;
      tuxreq->tableType = addfragptr.p->tableType;
      tuxreq->primaryTableId = addfragptr.p->primaryTableId;
      // pointer to index fragment in TUP
      tuxreq->tupIndexFragPtrI =
        addfragptr.p->addfragStatus == AddFragRecord::WAIT_TWO_TUX ?
        fragptr.p->tupFragptr[0] : fragptr.p->tupFragptr[1];
      // pointers to table fragments in TUP and ACC
      FragrecordPtr tFragPtr;
      tFragPtr.i = fragptr.p->tableFragptr;
      ptrCheckGuard(tFragPtr, cfragrecFileSize, fragrecord);
      tuxreq->tupTableFragPtrI[0] = tFragPtr.p->tupFragptr[0];
      tuxreq->tupTableFragPtrI[1] = tFragPtr.p->tupFragptr[1];
      tuxreq->accTableFragPtrI[0] = tFragPtr.p->accFragptr[0];
      tuxreq->accTableFragPtrI[1] = tFragPtr.p->accFragptr[1];
      sendSignal(fragptr.p->tuxBlockref, GSN_TUXFRAGREQ,
          signal, TuxFragReq::SignalLength, JBB);
      return;
+9 −1
Original line number Diff line number Diff line
@@ -446,6 +446,9 @@ private:
    Uint32 m_nodeList;          // node cache of current operation
    Uint32 m_nodeFree;          // one node pre-allocated for insert
    DLList<ScanOp> m_scanList;  // current scans on this fragment
    Uint32 m_tupIndexFragPtrI;
    Uint32 m_tupTableFragPtrI[2];
    Uint32 m_accTableFragPtrI[2];
    union {
    Uint32 nextPool;
    };
@@ -981,8 +984,13 @@ Dbtux::Frag::Frag(ArrayPool<ScanOp>& scanOpPool) :
  m_tree(),
  m_nodeList(RNIL),
  m_nodeFree(RNIL),
  m_scanList(scanOpPool)
  m_scanList(scanOpPool),
  m_tupIndexFragPtrI(RNIL)
{
  m_tupTableFragPtrI[0] = RNIL;
  m_tupTableFragPtrI[1] = RNIL;
  m_accTableFragPtrI[0] = RNIL;
  m_accTableFragPtrI[1] = RNIL;
}

inline
+3 −3
Original line number Diff line number Diff line
@@ -199,7 +199,7 @@ Dbtux::tupReadAttrs(Signal* signal, const Frag& frag, ReadPar& readPar)
  req->requestInfo = 0;
  req->tableId = frag.m_tableId;
  req->fragId = frag.m_fragId | (ent.m_fragBit << frag.m_fragOff);
  req->fragPtrI = RNIL;
  req->fragPtrI = frag.m_tupTableFragPtrI[ent.m_fragBit];
  req->tupAddr = ent.m_tupAddr;
  req->tupVersion = ent.m_tupVersion;
  req->pageId = RNIL;
@@ -246,7 +246,7 @@ Dbtux::tupReadKeys(Signal* signal, const Frag& frag, ReadPar& readPar)
  req->requestInfo = TupReadAttrs::ReadKeys;
  req->tableId = frag.m_tableId;
  req->fragId = frag.m_fragId | (ent.m_fragBit << frag.m_fragOff);
  req->fragPtrI = RNIL;
  req->fragPtrI = frag.m_tupTableFragPtrI[ent.m_fragBit];
  req->tupAddr = ent.m_tupAddr;
  req->tupVersion = RNIL; // not used
  req->pageId = RNIL;
@@ -284,7 +284,7 @@ Dbtux::tupStoreTh(Signal* signal, const Frag& frag, NodeHandlePtr nodePtr, Store
  req->errorCode = RNIL;
  req->tableId = frag.m_indexId;
  req->fragId = frag.m_fragId;
  req->fragPtrI = RNIL;
  req->fragPtrI = frag.m_tupIndexFragPtrI;
  req->tupAddr = nodePtr.p->m_addr;
  req->tupVersion = 0;
  req->pageId = nodePtr.p->m_loc.m_pageId;
Loading