MySQL Lists are EOL. Please join:

List:Commits« Previous MessageNext Message »
From:pekka Date:October 9 2006 2:41pm
Subject:bk commit into 5.1 tree (pekka:1.2305)
View as plain text  
Below is the list of changes that have just been committed into a local
5.1 repository of pekka. When pekka does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html

ChangeSet@stripped, 2006-10-09 16:40:57+02:00, pekka@stripped +6 -0
  Merge orca.ndb.mysql.com:/export/home/space/pekka/ndb/version/my50-bug20446
  into  orca.ndb.mysql.com:/export/home/space/pekka/ndb/version/my51-bug20446
  MERGE: 1.1810.2104.2

  storage/ndb/src/kernel/blocks/dbtux/Dbtux.hpp@stripped, 2006-10-09 16:39:30+02:00, pekka@stripped +0 -5
    merge: manual
    MERGE: 1.39.3.2

  storage/ndb/src/kernel/blocks/dbtux/Dbtux.hpp@stripped, 2006-10-09 16:19:12+02:00, pekka@stripped +0 -0
    Merge rename: ndb/src/kernel/blocks/dbtux/Dbtux.hpp -> storage/ndb/src/kernel/blocks/dbtux/Dbtux.hpp

  storage/ndb/src/kernel/blocks/dbtux/DbtuxDebug.cpp@stripped, 2006-10-09 16:39:49+02:00, pekka@stripped +0 -0
    SCCS merged
    MERGE: 1.20.1.2

  storage/ndb/src/kernel/blocks/dbtux/DbtuxDebug.cpp@stripped, 2006-10-09 16:19:12+02:00, pekka@stripped +0 -0
    Merge rename: ndb/src/kernel/blocks/dbtux/DbtuxDebug.cpp -> storage/ndb/src/kernel/blocks/dbtux/DbtuxDebug.cpp

  storage/ndb/src/kernel/blocks/dbtux/DbtuxGen.cpp@stripped, 2006-10-09 16:39:59+02:00, pekka@stripped +0 -0
    SCCS merged
    MERGE: 1.18.2.2

  storage/ndb/src/kernel/blocks/dbtux/DbtuxGen.cpp@stripped, 2006-10-09 16:19:12+02:00, pekka@stripped +0 -0
    Merge rename: ndb/src/kernel/blocks/dbtux/DbtuxGen.cpp -> storage/ndb/src/kernel/blocks/dbtux/DbtuxGen.cpp

  storage/ndb/src/kernel/blocks/dbtux/DbtuxMaint.cpp@stripped, 2006-10-09 16:40:10+02:00, pekka@stripped +0 -0
    SCCS merged
    MERGE: 1.16.1.2

  storage/ndb/src/kernel/blocks/dbtux/DbtuxMaint.cpp@stripped, 2006-10-09 16:19:12+02:00, pekka@stripped +0 -0
    Merge rename: ndb/src/kernel/blocks/dbtux/DbtuxMaint.cpp -> storage/ndb/src/kernel/blocks/dbtux/DbtuxMaint.cpp

  storage/ndb/src/kernel/blocks/dbtux/DbtuxScan.cpp@stripped, 2006-10-09 16:40:37+02:00, pekka@stripped +0 -0
    SCCS merged
    MERGE: 1.27.1.2

  storage/ndb/src/kernel/blocks/dbtux/DbtuxScan.cpp@stripped, 2006-10-09 16:19:12+02:00, pekka@stripped +0 -0
    Merge rename: ndb/src/kernel/blocks/dbtux/DbtuxScan.cpp -> storage/ndb/src/kernel/blocks/dbtux/DbtuxScan.cpp

  storage/ndb/src/kernel/blocks/dbtux/DbtuxSearch.cpp@stripped, 2006-10-09 16:40:46+02:00, pekka@stripped +0 -0
    SCCS merged
    MERGE: 1.9.1.2

  storage/ndb/src/kernel/blocks/dbtux/DbtuxSearch.cpp@stripped, 2006-10-09 16:19:12+02:00, pekka@stripped +0 -0
    Merge rename: ndb/src/kernel/blocks/dbtux/DbtuxSearch.cpp -> storage/ndb/src/kernel/blocks/dbtux/DbtuxSearch.cpp

# This is a BitKeeper patch.  What follows are the unified diffs for the
# set of deltas contained in the patch.  The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User:	pekka
# Host:	orca.ndb.mysql.com
# Root:	/export/home/space/pekka/ndb/version/my51-bug20446/RESYNC

--- 1.39.3.1/ndb/src/kernel/blocks/dbtux/Dbtux.hpp	2006-10-09 16:41:16 +02:00
+++ 1.47/storage/ndb/src/kernel/blocks/dbtux/Dbtux.hpp	2006-10-09 16:41:16 +02:00
@@ -26,7 +26,7 @@
 #include <md5_hash.hpp>
 
 // big brother
-#include <Dbtup.hpp>
+#include <dbtup/Dbtup.hpp>
 
 // signal classes
 #include <signaldata/DictTabInfo.hpp>
@@ -82,10 +82,14 @@
 #define jam()           jamLine(80000 + __LINE__)
 #define jamEntry()      jamEntryLine(80000 + __LINE__)
 #endif
-#ifdef DBTUX_DEBUG_CPP
+#ifdef DBTUX_STAT_CPP
 #define jam()           jamLine(90000 + __LINE__)
 #define jamEntry()      jamEntryLine(90000 + __LINE__)
 #endif
+#ifdef DBTUX_DEBUG_CPP
+#define jam()           jamLine(100000 + __LINE__)
+#define jamEntry()      jamEntryLine(100000 + __LINE__)
+#endif
 #ifndef jam
 #define jam()           jamLine(__LINE__)
 #define jamEntry()      jamEntryLine(__LINE__)
@@ -98,7 +102,7 @@
 
 class Dbtux : public SimulatedBlock {
 public:
-  Dbtux(const Configuration& conf);
+  Dbtux(Block_context& ctx);
   virtual ~Dbtux();
 
   // pointer to TUP instance in this thread
@@ -106,7 +110,7 @@
 
 private:
   // sizes are in words (Uint32)
-  STATIC_CONST( MaxIndexFragments = 2 * MAX_FRAG_PER_NODE );
+  STATIC_CONST( MaxIndexFragments = MAX_FRAG_PER_NODE );
   STATIC_CONST( MaxIndexAttributes = MAX_ATTRIBUTES_IN_INDEX );
   STATIC_CONST( MaxAttrDataSize = 2048 );
 public:
@@ -116,6 +120,7 @@
   STATIC_CONST( MaxPrefSize = MAX_TTREE_PREF_SIZE );
   STATIC_CONST( ScanBoundSegmentSize = 7 );
   STATIC_CONST( MaxAccLockOps = MAX_PARALLEL_OP_PER_SCAN );
+  STATIC_CONST( MaxTreeDepth = 32 );    // strict
   BLOCK_DEFINES(Dbtux);
 
   // forward declarations
@@ -185,7 +190,6 @@
   struct TreeEnt {
     TupLoc m_tupLoc;            // address of original tuple
     unsigned m_tupVersion : 15; // version
-    unsigned m_fragBit : 1;     // which duplicated table fragment
     TreeEnt();
     // methods
     bool eqtuple(const TreeEnt ent) const;
@@ -246,6 +250,7 @@
     Uint8 m_prefSize;           // words in min prefix
     Uint8 m_minOccup;           // min entries in internal node
     Uint8 m_maxOccup;           // max entries in node
+    Uint32 m_entryCount;        // stat: current entries
     TupLoc m_root;              // root node
     TreeHead();
     // methods
@@ -460,8 +465,8 @@
     TupLoc m_freeLoc;           // list of free index nodes
     DLList<ScanOp> m_scanList;  // current scans on this fragment
     Uint32 m_tupIndexFragPtrI;
-    Uint32 m_tupTableFragPtrI[2];
-    Uint32 m_accTableFragPtrI[2];
+    Uint32 m_tupTableFragPtrI;
+    Uint32 m_accTableFragPtrI;
     union {
     Uint32 nextPool;
     };
@@ -640,6 +645,14 @@
   int cmpScanBound(const Frag& frag, unsigned dir, ConstData boundInfo, unsigned boundCount, ConstData entryData, unsigned maxlen = MaxAttrDataSize);
 
   /*
+   * DbtuxStat.cpp
+   */
+  void execREAD_PSEUDO_REQ(Signal* signal);
+  void statRecordsInRange(ScanOpPtr scanPtr, Uint32* out);
+  Uint32 getEntriesBeforeOrAfter(Frag& frag, TreePos pos, unsigned idir);
+  unsigned getPathToNode(NodeHandle node, Uint16* path);
+
+  /*
    * DbtuxDebug.cpp
    */
   void execDUMP_STATE_ORD(Signal* signal);
@@ -780,8 +793,7 @@
 inline
 Dbtux::TreeEnt::TreeEnt() :
   m_tupLoc(),
-  m_tupVersion(0),
-  m_fragBit(0)
+  m_tupVersion(0)
 {
 }
 
@@ -798,18 +810,12 @@
 {
   return
     m_tupLoc == ent.m_tupLoc &&
-    m_tupVersion == ent.m_tupVersion &&
-    m_fragBit == ent.m_fragBit;
+    m_tupVersion == ent.m_tupVersion;
 }
 
 inline int
 Dbtux::TreeEnt::cmp(const TreeEnt ent) const
 {
-  // compare frag first to improve cacheing in 5.0
-  if (m_fragBit < ent.m_fragBit)
-    return -1;
-  if (m_fragBit > ent.m_fragBit)
-    return +1;
   if (m_tupLoc.getPageId() < ent.m_tupLoc.getPageId())
     return -1;
   if (m_tupLoc.getPageId() > ent.m_tupLoc.getPageId())
@@ -863,6 +869,7 @@
   m_prefSize(0),
   m_minOccup(0),
   m_maxOccup(0),
+  m_entryCount(0),
   m_root()
 {
 }
@@ -994,10 +1001,8 @@
   m_scanList(scanOpPool),
   m_tupIndexFragPtrI(RNIL)
 {
-  m_tupTableFragPtrI[0] = RNIL;
-  m_tupTableFragPtrI[1] = RNIL;
-  m_accTableFragPtrI[0] = RNIL;
-  m_accTableFragPtrI[1] = RNIL;
+  m_tupTableFragPtrI = RNIL;
+  m_accTableFragPtrI = RNIL;
 }
 
 // Dbtux::FragOp
@@ -1177,7 +1182,7 @@
 inline Uint32
 Dbtux::getTupAddr(const Frag& frag, TreeEnt ent)
 {
-  const Uint32 tableFragPtrI = frag.m_tupTableFragPtrI[ent.m_fragBit];
+  const Uint32 tableFragPtrI = frag.m_tupTableFragPtrI;
   const TupLoc tupLoc = ent.m_tupLoc;
   Uint32 tupAddr = NullTupAddr;
   c_tup->tuxGetTupAddr(tableFragPtrI, tupLoc.getPageId(), tupLoc.getPageOffset(), tupAddr);

--- 1.20.1.1/ndb/src/kernel/blocks/dbtux/DbtuxDebug.cpp	2006-10-09 16:41:16 +02:00
+++ 1.23/storage/ndb/src/kernel/blocks/dbtux/DbtuxDebug.cpp	2006-10-09 16:41:16 +02:00
@@ -53,37 +53,7 @@
     return;
   }
   if (signal->theData[0] == DumpStateOrd::TuxMetaDataJunk) {
-    // read table definition
-    Uint32 tableId = signal->theData[1];
-    Uint32 tableVersion = signal->theData[2];
-    int ret;
-    MetaData md(this);
-    MetaData::Table table;
-    MetaData::Attribute attribute;
-    infoEvent("md: read table %u %u", tableId, tableVersion);
-    if ((ret = md.lock(false)) < 0) {
-      infoEvent("md.lock error %d", ret);
-      return;
-    }
-    if ((ret = md.getTable(table, tableId, tableVersion)) < 0) {
-      infoEvent("md.getTable error %d", ret);
-      // lock is released by destructor
-      return;
-    }
-    infoEvent("md: %s type=%d attrs=%u", table.tableName, table.tableType, table.noOfAttributes);
-    for (Uint32 i = 0; i < table.noOfAttributes; i++) {
-      if ((ret = md.getAttribute(attribute, table, i)) < 0) {
-        infoEvent("mg.getAttribute %u error %d", i, ret);
-        // lock is released by destructor
-        return;
-      }
-      infoEvent("md: %d %s", attribute.attributeId, attribute.attributeName);
-    }
-    if ((ret = md.unlock(false)) < 0) {
-      infoEvent("md.unlock error %d", ret);
-      return;
-    }
-    return;
+    abort();
   }
 #endif
 }
@@ -268,8 +238,7 @@
 NdbOut&
 operator<<(NdbOut& out, const Dbtux::TreeEnt& ent)
 {
-  out << dec << ent.m_fragBit;
-  out << "-" << ent.m_tupLoc;
+  out << ent.m_tupLoc;
   out << "-" << dec << ent.m_tupVersion;
   return out;
 }

--- 1.18.2.1/ndb/src/kernel/blocks/dbtux/DbtuxGen.cpp	2006-10-09 16:41:16 +02:00
+++ 1.24/storage/ndb/src/kernel/blocks/dbtux/DbtuxGen.cpp	2006-10-09 16:41:16 +02:00
@@ -17,8 +17,8 @@
 #define DBTUX_GEN_CPP
 #include "Dbtux.hpp"
 
-Dbtux::Dbtux(const Configuration& conf) :
-  SimulatedBlock(DBTUX, conf),
+Dbtux::Dbtux(Block_context& ctx) :
+  SimulatedBlock(DBTUX, ctx),
   c_tup(0),
   c_descPageList(RNIL),
 #ifdef VM_TRACE
@@ -66,6 +66,10 @@
   addRecSignal(GSN_ACCKEYREF, &Dbtux::execACCKEYREF);
   addRecSignal(GSN_ACC_ABORTCONF, &Dbtux::execACC_ABORTCONF);
   /*
+   * DbtuxStat.cpp
+   */
+  addRecSignal(GSN_READ_PSEUDO_REQ, &Dbtux::execREAD_PSEUDO_REQ);
+  /*
    * DbtuxDebug.cpp
    */
   addRecSignal(GSN_DUMP_STATE_ORD, &Dbtux::execDUMP_STATE_ORD);
@@ -161,7 +165,7 @@
   Uint32 nScanOp; 
 
   const ndb_mgm_configuration_iterator * p = 
-    theConfiguration.getOwnConfigIterator();
+    m_ctx.m_config.getOwnConfigIterator();
   ndbrequire(p != 0);
 
   ndbrequire(!ndb_mgm_get_int_parameter(p, CFG_TUX_INDEX, &nIndex));
@@ -234,7 +238,7 @@
 Dbtux::readKeyAttrs(const Frag& frag, TreeEnt ent, unsigned start, Data keyData)
 {
   ConstData keyAttrs = c_keyAttrs; // global
-  const Uint32 tableFragPtrI = frag.m_tupTableFragPtrI[ent.m_fragBit];
+  const Uint32 tableFragPtrI = frag.m_tupTableFragPtrI;
   const TupLoc tupLoc = ent.m_tupLoc;
   const Uint32 tupVersion = ent.m_tupVersion;
   ndbrequire(start < frag.m_numAttrs);
@@ -270,7 +274,7 @@
 void
 Dbtux::readTablePk(const Frag& frag, TreeEnt ent, Data pkData, unsigned& pkSize)
 {
-  const Uint32 tableFragPtrI = frag.m_tupTableFragPtrI[ent.m_fragBit];
+  const Uint32 tableFragPtrI = frag.m_tupTableFragPtrI;
   const TupLoc tupLoc = ent.m_tupLoc;
   int ret = c_tup->tuxReadPk(tableFragPtrI, tupLoc.getPageId(), tupLoc.getPageOffset(), pkData, true);
   jamEntry();

--- 1.16.1.1/ndb/src/kernel/blocks/dbtux/DbtuxMaint.cpp	2006-10-09 16:41:16 +02:00
+++ 1.19/storage/ndb/src/kernel/blocks/dbtux/DbtuxMaint.cpp	2006-10-09 16:41:16 +02:00
@@ -33,7 +33,7 @@
     jam();
 #ifdef VM_TRACE
     if (debugFlags & DebugMaint) {
-      TupLoc tupLoc(sig->pageId, sig->pageOffset);
+      TupLoc tupLoc(sig->pageId, sig->pageIndex);
       debugOut << "opInfo=" << hex << sig->opInfo;
       debugOut << " tableId=" << dec << sig->tableId;
       debugOut << " indexId=" << dec << sig->indexId;
@@ -57,8 +57,7 @@
   c_indexPool.getPtr(indexPtr, req->indexId);
   ndbrequire(indexPtr.p->m_tableId == req->tableId);
   // get base fragment id and extra bits
-  const Uint32 fragId = req->fragId & ~1;
-  const Uint32 fragBit = req->fragId & 1;
+  const Uint32 fragId = req->fragId;
   // get the fragment
   FragPtr fragPtr;
   fragPtr.i = RNIL;
@@ -76,9 +75,8 @@
   setKeyAttrs(frag);
   // set up search entry
   TreeEnt ent;
-  ent.m_tupLoc = TupLoc(req->pageId, req->pageOffset);
+  ent.m_tupLoc = TupLoc(req->pageId, req->pageIndex);
   ent.m_tupVersion = req->tupVersion;
-  ent.m_fragBit = fragBit;
   // read search key
   readKeyAttrs(frag, ent, 0, c_searchKey);
   if (! frag.m_storeNullKey) {

--- 1.27.1.1/ndb/src/kernel/blocks/dbtux/DbtuxScan.cpp	2006-10-09 16:41:16 +02:00
+++ 1.31/storage/ndb/src/kernel/blocks/dbtux/DbtuxScan.cpp	2006-10-09 16:41:16 +02:00
@@ -35,7 +35,7 @@
     fragPtr.i = RNIL;
     for (unsigned i = 0; i < indexPtr.p->m_numFrags; i++) {
       jam();
-      if (indexPtr.p->m_fragId[i] == req->fragmentNo << 1) {
+      if (indexPtr.p->m_fragId[i] == req->fragmentNo) {
         jam();
         c_fragPool.getPtr(fragPtr, indexPtr.p->m_fragPtrI[i]);
         break;
@@ -161,8 +161,19 @@
     Uint32 dstWords = 0;
     if (! ah->isNULL()) {
       jam();
+      const uchar* srcPtr = (const uchar*)&data[offset + 2];
       const DescAttr& descAttr = descEnt.m_descAttr[attrId];
-      Uint32 srcBytes = AttributeDescriptor::getSizeInBytes(descAttr.m_attrDesc);
+      Uint32 typeId = descAttr.m_typeId;
+      Uint32 maxBytes = AttributeDescriptor::getSizeInBytes(descAttr.m_attrDesc);
+      Uint32 lb, len;
+      bool ok = NdbSqlUtil::get_var_length(typeId, srcPtr, maxBytes, lb, len);
+      if (! ok) {
+        jam();
+        scan.m_state = ScanOp::Invalid;
+        sig->errorCode = TuxBoundInfo::InvalidCharFormat;
+        return;
+      }
+      Uint32 srcBytes = lb + len;
       Uint32 srcWords = (srcBytes + 3) / 4;
       if (srcWords != dataSize) {
         jam();
@@ -171,27 +182,17 @@
         return;
       }
       uchar* dstPtr = (uchar*)&xfrmData[dstPos + 2];
-      const uchar* srcPtr = (const uchar*)&data[offset + 2];
       if (descAttr.m_charset == 0) {
         memcpy(dstPtr, srcPtr, srcWords << 2);
         dstWords = srcWords;
       } else {
         jam();
-        Uint32 typeId = descAttr.m_typeId;
-        Uint32 lb, len;
-        bool ok = NdbSqlUtil::get_var_length(typeId, srcPtr, srcBytes, lb, len);
-        if (! ok) {
-          jam();
-          scan.m_state = ScanOp::Invalid;
-          sig->errorCode = TuxBoundInfo::InvalidCharFormat;
-          return;
-        }
         CHARSET_INFO* cs = all_charsets[descAttr.m_charset];
         Uint32 xmul = cs->strxfrm_multiply;
         if (xmul == 0)
           xmul = 1;
         // see comment in DbtcMain.cpp
-        Uint32 dstLen = xmul * (srcBytes - lb);
+        Uint32 dstLen = xmul * (maxBytes - lb);
         if (dstLen > ((dstSize - dstPos) << 2)) {
           jam();
           scan.m_state = ScanOp::Invalid;
@@ -320,7 +321,7 @@
       conf->scanPtr = scan.m_userPtr;
       unsigned signalLength = 1;
       sendSignal(scanPtr.p->m_userRef, GSN_NEXT_SCANCONF,
-          signal, signalLength, JBB);
+		 signal, signalLength, JBB);
       return;
     }
     break;
@@ -343,7 +344,8 @@
       lockReq->returnCode = RNIL;
       lockReq->requestInfo = AccLockReq::AbortWithConf;
       lockReq->accOpPtr = scan.m_accLockOp;
-      EXECUTE_DIRECT(DBACC, GSN_ACC_LOCKREQ, signal, AccLockReq::UndoSignalLength);
+      EXECUTE_DIRECT(DBACC, GSN_ACC_LOCKREQ, signal, 
+		     AccLockReq::UndoSignalLength);
       jamEntry();
       ndbrequire(lockReq->returnCode == AccLockReq::Success);
       scan.m_state = ScanOp::Aborting;
@@ -354,9 +356,10 @@
       ndbrequire(scan.m_accLockOp != RNIL);
       AccLockReq* const lockReq = (AccLockReq*)signal->getDataPtrSend();
       lockReq->returnCode = RNIL;
-      lockReq->requestInfo = AccLockReq::Unlock;
+      lockReq->requestInfo = AccLockReq::Abort;
       lockReq->accOpPtr = scan.m_accLockOp;
-      EXECUTE_DIRECT(DBACC, GSN_ACC_LOCKREQ, signal, AccLockReq::UndoSignalLength);
+      EXECUTE_DIRECT(DBACC, GSN_ACC_LOCKREQ, signal, 
+		     AccLockReq::UndoSignalLength);
       jamEntry();
       ndbrequire(lockReq->returnCode == AccLockReq::Success);
       scan.m_accLockOp = RNIL;
@@ -410,7 +413,7 @@
     NextScanConf* const conf = (NextScanConf*)signal->getDataPtrSend();
     conf->scanPtr = scan.m_userPtr;
     conf->accOperationPtr = RNIL;       // no tuple returned
-    conf->fragId = frag.m_fragId | ent.m_fragBit;
+    conf->fragId = frag.m_fragId;
     unsigned signalLength = 3;
     // if TC has ordered scan close, it will be detected here
     sendSignal(scan.m_userRef, GSN_NEXT_SCANCONF,
@@ -449,8 +452,8 @@
       lockReq->userPtr = scanPtr.i;
       lockReq->userRef = reference();
       lockReq->tableId = scan.m_tableId;
-      lockReq->fragId = frag.m_fragId | ent.m_fragBit;
-      lockReq->fragPtrI = frag.m_accTableFragPtrI[ent.m_fragBit];
+      lockReq->fragId = frag.m_fragId;
+      lockReq->fragPtrI = frag.m_accTableFragPtrI;
       const Uint32* const buf32 = static_cast<Uint32*>(pkData);
       const Uint64* const buf64 = reinterpret_cast<const Uint64*>(buf32);
       lockReq->hashValue = md5_hash(buf64, pkSize);
@@ -541,7 +544,7 @@
       accLockOp = (Uint32)-1;
     }
     conf->accOperationPtr = accLockOp;
-    conf->fragId = frag.m_fragId | ent.m_fragBit;
+    conf->fragId = frag.m_fragId;
     conf->localKey[0] = getTupAddr(frag, ent);
     conf->localKey[1] = 0;
     conf->localKeyLength = 1;
@@ -607,7 +610,7 @@
     jam();
     AccLockReq* const lockReq = (AccLockReq*)signal->getDataPtrSend();
     lockReq->returnCode = RNIL;
-    lockReq->requestInfo = AccLockReq::Unlock;
+    lockReq->requestInfo = AccLockReq::Abort;
     lockReq->accOpPtr = scan.m_accLockOp;
     EXECUTE_DIRECT(DBACC, GSN_ACC_LOCKREQ, signal, AccLockReq::UndoSignalLength);
     jamEntry();
@@ -985,14 +988,13 @@
 {
   const ScanOp& scan = *scanPtr.p;
   const Frag& frag = *c_fragPool.getPtr(scan.m_fragPtrI);
-  Uint32 fragBit = ent.m_fragBit;
-  Uint32 tableFragPtrI = frag.m_tupTableFragPtrI[fragBit];
-  Uint32 fragId = frag.m_fragId | fragBit;
+  Uint32 tableFragPtrI = frag.m_tupTableFragPtrI;
+  Uint32 fragId = frag.m_fragId;
   Uint32 tupAddr = getTupAddr(frag, ent);
   Uint32 tupVersion = ent.m_tupVersion;
   // check for same tuple twice in row
-  if (scan.m_scanEnt.m_tupLoc == ent.m_tupLoc &&
-      scan.m_scanEnt.m_fragBit == fragBit) {
+  if (scan.m_scanEnt.m_tupLoc == ent.m_tupLoc)
+  {
     jam();
     return false;
   }
Thread
bk commit into 5.1 tree (pekka:1.2305)pekka9 Oct