List:Commits« Previous MessageNext Message »
From:jonas Date:April 25 2007 11:12pm
Subject:bk commit into 5.1 tree (jonas:1.2550)
View as plain text  
Below is the list of changes that have just been committed into a local
5.1 repository of jonas. When jonas 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, 2007-04-25 23:11:55+02:00, jonas@stripped +13 -0
  Merge perch.ndb.mysql.com:/home/jonas/src/51-gca-tmp
  into  perch.ndb.mysql.com:/home/jonas/src/51-telco-tmp
  MERGE: 1.2403.27.32

  sql/ha_ndbcluster.cc@stripped, 2007-04-25 22:52:39+02:00, jonas@stripped +0 -0
    Auto merged
    MERGE: 1.397.9.10

  sql/ha_ndbcluster_binlog.cc@stripped, 2007-04-25 22:52:39+02:00, jonas@stripped
+0 -0
    Auto merged
    MERGE: 1.95.5.2

  storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp@stripped, 2007-04-25 23:11:52+02:00,
jonas@stripped +0 -0
    merge
    MERGE: 1.55.4.3

  storage/ndb/src/kernel/blocks/dbtup/DbtupAbort.cpp@stripped, 2007-04-25 23:11:52+02:00,
jonas@stripped +2 -4
    merge
    MERGE: 1.14.3.2

  storage/ndb/src/kernel/blocks/dbtup/DbtupCommit.cpp@stripped, 2007-04-25 23:11:52+02:00,
jonas@stripped +6 -4
    merge
    MERGE: 1.21.3.3

  storage/ndb/src/kernel/blocks/dbtup/DbtupDebug.cpp@stripped, 2007-04-25 22:52:39+02:00,
jonas@stripped +0 -0
    Auto merged
    MERGE: 1.14.2.1

  storage/ndb/src/kernel/blocks/dbtup/DbtupExecQuery.cpp@stripped, 2007-04-25 23:11:52+02:00,
jonas@stripped +5 -12
    merge
    MERGE: 1.50.2.3

  storage/ndb/src/kernel/blocks/dbtup/DbtupIndex.cpp@stripped, 2007-04-25 22:52:39+02:00,
jonas@stripped +0 -0
    Auto merged
    MERGE: 1.21.2.2

  storage/ndb/src/kernel/blocks/dbtup/DbtupMeta.cpp@stripped, 2007-04-25 23:11:52+02:00,
jonas@stripped +11 -21
    merge
    MERGE: 1.33.2.2

  storage/ndb/src/kernel/blocks/dbtup/DbtupScan.cpp@stripped, 2007-04-25 22:52:39+02:00,
jonas@stripped +0 -0
    Auto merged
    MERGE: 1.18.3.2

  storage/ndb/src/kernel/blocks/dbtup/DbtupVarAlloc.cpp@stripped, 2007-04-25 23:11:52+02:00,
jonas@stripped +0 -4
    merge
    MERGE: 1.5.2.2

  storage/ndb/src/ndbapi/NdbEventOperationImpl.cpp@stripped, 2007-04-25 22:52:39+02:00,
jonas@stripped +0 -0
    Auto merged
    MERGE: 1.77.4.2

  storage/ndb/test/tools/Makefile.am@stripped, 2007-04-25 23:11:52+02:00,
jonas@stripped +0 -2
    merge
    MERGE: 1.15.1.2

# 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:	jonas
# Host:	perch.ndb.mysql.com
# Root:	/home/jonas/src/51-telco-tmp/RESYNC

--- 1.9/storage/ndb/src/kernel/blocks/dbtup/DbtupVarAlloc.cpp	2007-04-25 23:12:00 +02:00
+++ 1.10/storage/ndb/src/kernel/blocks/dbtup/DbtupVarAlloc.cpp	2007-04-25 23:12:00 +02:00
@@ -68,10 +68,7 @@
   /**
    * TODO alloc fix+var part
    */
-  const Uint32 XXX = Tuple_header::HeaderSize + Var_part_ref::SZ32;
-  tabPtr->m_offsets[MM].m_fix_header_size += XXX;
   Uint32 *ptr = alloc_fix_rec(fragPtr, tabPtr, key, out_frag_page_id);
-  tabPtr->m_offsets[MM].m_fix_header_size -= XXX;
   if (unlikely(ptr == 0))
   {
     return 0;
@@ -81,7 +78,7 @@
   if (likely(alloc_var_part(fragPtr, tabPtr, alloc_size, &varref) != 0))
   {
     Tuple_header* tuple = (Tuple_header*)ptr;
-    Var_part_ref* dst = (Var_part_ref*)tuple->get_var_part_ptr(tabPtr);
+    Var_part_ref* dst = tuple->get_var_part_ref_ptr(tabPtr);
     dst->assign(&varref);
     return ptr;
   }
@@ -159,7 +156,7 @@
   Tuple_header* tuple = (Tuple_header*)ptr;
 
   Local_key ref;
-  Var_part_ref * varref = (Var_part_ref*)tuple->get_var_part_ptr(tabPtr);
+  Var_part_ref * varref = tuple->get_var_part_ref_ptr(tabPtr);
   varref->copyout(&ref);
 
   free_fix_rec(fragPtr, tabPtr, key, (Fix_page*)pagePtr.p);
@@ -394,10 +391,7 @@
 		       Local_key* key,
 		       Uint32 * out_frag_page_id)
 {
-  const Uint32 XXX = Tuple_header::HeaderSize + Var_part_ref::SZ32;
-  tabPtr->m_offsets[MM].m_fix_header_size += XXX;
   Uint32 *ptr = alloc_fix_rowid(fragPtr, tabPtr, key, out_frag_page_id);
-  tabPtr->m_offsets[MM].m_fix_header_size -= XXX;
   if (unlikely(ptr == 0))
   {
     return 0;
@@ -407,7 +401,7 @@
   if (likely(alloc_var_part(fragPtr, tabPtr, alloc_size, &varref) != 0))
   {
     Tuple_header* tuple = (Tuple_header*)ptr;
-    Var_part_ref* dst = (Var_part_ref*)tuple->get_var_part_ptr(tabPtr);
+    Var_part_ref* dst = (Var_part_ref*)tuple->get_var_part_ref_ptr(tabPtr);
     dst->assign(&varref);
     return ptr;
   }

--- 1.68/storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp	2007-04-25 23:12:00 +02:00
+++ 1.69/storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp	2007-04-25 23:12:00 +02:00
@@ -1081,21 +1081,14 @@
       Uint8 m_null_words;
       Uint8 m_null_offset;
       Uint16 m_disk_ref_offset; // In words relative m_data
-      union {
-	Uint16 m_varpart_offset;  // In words relative m_data
-	Uint16 m_fix_header_size; // For fix size tuples= total rec size(part)
-      };
+      Uint16 m_fix_header_size; // For fix size tuples= total rec size(part)
       Uint16 m_max_var_offset;  // In bytes relative m_var_data.m_data_ptr
       Uint16 m_max_dyn_offset;  // In bytes relative m_var_data.m_dyn_data_ptr
       Uint16 m_dyn_null_words;  // 32-bit words in dynattr bitmap
     } m_offsets[2];
     
-
     Uint32 get_check_offset(Uint32 mm) const {
-      Uint32 cnt=
-        m_attributes[mm].m_no_of_varsize + m_attributes[mm].m_no_of_dynamic;
-      Uint32 off= m_offsets[mm].m_varpart_offset;
-      return off - (cnt ? 0 : Tuple_header::HeaderSize);
+      return m_offsets[mm].m_fix_header_size;
     }
 
     struct {
@@ -1397,6 +1390,11 @@
 #endif    
   };
   
+  struct Disk_part_ref
+  {
+    STATIC_CONST( SZ32 = 2 );
+  };
+
   struct Tuple_header
   {
     union {
@@ -1454,14 +1452,24 @@
       return m_null_bits+tabPtrP->m_offsets[mm].m_null_offset;
     }
     
-    Uint32* get_var_part_ptr(const Tablerec* tabPtrP) {
-      return m_data + tabPtrP->m_offsets[MM].m_varpart_offset;      
+    Var_part_ref* get_var_part_ref_ptr(const Tablerec* tabPtrP) {
+      return (Var_part_ref*)(get_disk_ref_ptr(tabPtrP) + Disk_part_ref::SZ32);
     }
 
-    const Uint32* get_var_part_ptr(const Tablerec* tabPtrP) const {
-      return m_data + tabPtrP->m_offsets[MM].m_varpart_offset;      
+    const Var_part_ref* get_var_part_ref_ptr(const Tablerec* tabPtrP) const {
+      return (Var_part_ref*)(get_disk_ref_ptr(tabPtrP) + Disk_part_ref::SZ32);
     }
-
+    
+    Uint32* get_end_of_fix_part_ptr(const Tablerec* tabPtrP) {
+      return m_data + tabPtrP->m_offsets[MM].m_fix_header_size - 
+        Tuple_header::HeaderSize;
+    }
+    
+    const Uint32* get_end_of_fix_part_ptr(const Tablerec* tabPtrP) const {
+      return m_data + tabPtrP->m_offsets[MM].m_fix_header_size - 
+        Tuple_header::HeaderSize;
+    }
+    
     Uint32* get_disk_ref_ptr(const Tablerec* tabPtrP) {
       return m_data + tabPtrP->m_offsets[MM].m_disk_ref_offset;
     }

--- 1.21/storage/ndb/src/kernel/blocks/dbtup/DbtupAbort.cpp	2007-04-25 23:12:00 +02:00
+++ 1.22/storage/ndb/src/kernel/blocks/dbtup/DbtupAbort.cpp	2007-04-25 23:12:00 +02:00
@@ -150,10 +150,9 @@
         Uint32 mm_vars= regTabPtr.p->m_attributes[MM].m_no_of_varsize;
         Uint32 *var_part;
 
-        ndbassert(tuple_ptr->m_header_bits & Tuple_header::CHAINED_ROW);
-        
-        Var_part_ref *ref = 
-          (Var_part_ref*)tuple_ptr->get_var_part_ptr(regTabPtr.p);
+	ndbassert(tuple_ptr->m_header_bits & Tuple_header::CHAINED_ROW);
+	
+	Var_part_ref *ref = tuple_ptr->get_var_part_ref_ptr(regTabPtr.p);
 
         Local_key tmp; 
         ref->copyout(&tmp);

--- 1.31/storage/ndb/src/kernel/blocks/dbtup/DbtupCommit.cpp	2007-04-25 23:12:00 +02:00
+++ 1.32/storage/ndb/src/kernel/blocks/dbtup/DbtupCommit.cpp	2007-04-25 23:12:00 +02:00
@@ -252,16 +252,22 @@
   }
   else
   {
-    Var_part_ref *ref= (Var_part_ref*)tuple_ptr->get_var_part_ptr(regTabPtr);
-    memcpy(tuple_ptr, copy, 4*(Tuple_header::HeaderSize+fixsize));
-    
+    /**
+     * Var_part_ref is only stored in *allocated* tuple
+     * so memcpy from copy, will over write it...
+     * hence subtle copyout/assign...
+     */
     Local_key tmp; 
+    Var_part_ref *ref= tuple_ptr->get_var_part_ref_ptr(regTabPtr);
     ref->copyout(&tmp);
 
+    memcpy(tuple_ptr, copy, 4*fixsize);
+    ref->assign(&tmp);
+
     PagePtr vpagePtr;
     Uint32 *dst= get_ptr(&vpagePtr, *ref);
     Var_page* vpagePtrP = (Var_page*)vpagePtr.p;
-    Varpart_copy* vp = (Varpart_copy*)copy->get_var_part_ptr(regTabPtr);
+    Varpart_copy* vp = (Varpart_copy*)copy->get_end_of_fix_part_ptr(regTabPtr);
     ndbassert(!(copy_bits & Tuple_header::CHAINED_ROW));
     /* The first word of shrunken tuple holds the lenght in words. */
     Uint32 len = vp->m_len;

--- 1.16/storage/ndb/src/kernel/blocks/dbtup/DbtupDebug.cpp	2007-04-25 23:12:00 +02:00
+++ 1.17/storage/ndb/src/kernel/blocks/dbtup/DbtupDebug.cpp	2007-04-25 23:12:00 +02:00
@@ -366,7 +366,7 @@
   out << "[ null_words: " << (Uint32)off.m_null_words
       << " null off: " << (Uint32)off.m_null_offset
       << " disk_off: " << off.m_disk_ref_offset
-      << " var_off: " << off.m_varpart_offset
+      << " fixheadsz: " << off.m_fix_header_size
       << " max_var_off: " << off.m_max_var_offset
       << " ]";
 

--- 1.68/storage/ndb/src/kernel/blocks/dbtup/DbtupExecQuery.cpp	2007-04-25 23:12:00 +02:00
+++ 1.69/storage/ndb/src/kernel/blocks/dbtup/DbtupExecQuery.cpp	2007-04-25 23:12:00 +02:00
@@ -247,10 +247,6 @@
   // includes tupVersion
   //printf("%p - ", tuple_ptr);
   
-  if (regTabPtr->m_attributes[MM].m_no_of_varsize +
-      regTabPtr->m_attributes[MM].m_no_of_dynamic)
-    rec_size += Tuple_header::HeaderSize;
-  
   for (i= 0; i < rec_size-2; i++) {
     checksum ^= tuple_header[i];
     //printf("%.8x ", tuple_header[i]);
@@ -1136,7 +1132,7 @@
   const Uint32 mm_dynvar= regTabPtr->m_attributes[MM].m_no_of_dyn_var;
   const Uint32 mm_dynfix= regTabPtr->m_attributes[MM].m_no_of_dyn_fix;
   const Uint32 dd_vars= regTabPtr->m_attributes[DD].m_no_of_varsize;
-  Uint32 *ptr= req_struct->m_tuple_ptr->get_var_part_ptr(regTabPtr);
+  Uint32 *ptr= req_struct->m_tuple_ptr->get_end_of_fix_part_ptr(regTabPtr);
 
   if(mm_vars || mm_dyns)
   {
@@ -1199,22 +1195,10 @@
     ndbassert((pos&3)==0);
     ptr+= (pos>>2);
   } 
-  else
-  {
-    ptr -= Tuple_header::HeaderSize;
-  }
 
   req_struct->m_disk_ptr= (Tuple_header*)ptr;
   
-  if(dd_vars)
-  {
-    KeyReqStruct::Var_data *dst= &req_struct->m_var_data[DD];
-    ptr=((Tuple_header*)ptr)->m_data+regTabPtr->m_offsets[DD].m_varpart_offset;
-    dst->m_data_ptr= (char*)(((Uint16*)ptr)+dd_vars+1);
-    dst->m_offset_array_ptr= req_struct->var_pos_array + (mm_vars << 1);
-    dst->m_var_len_offset= dd_vars;
-    dst->m_max_var_offset= regTabPtr->m_offsets[DD].m_max_var_offset;
-  }
+  ndbrequire(dd_vars == 0);
   
   // Set all null bits
   memset(req_struct->m_tuple_ptr->m_null_bits+
@@ -2714,20 +2698,21 @@
   Uint16 mm_dynvar= tabPtrP->m_attributes[MM].m_no_of_dyn_var;
   Uint16 mm_dynfix= tabPtrP->m_attributes[MM].m_no_of_dyn_fix;
   Uint16 mm_dyns= tabPtrP->m_attributes[MM].m_no_of_dynamic;
-  Uint32 fix_size= tabPtrP->m_offsets[MM].m_varpart_offset;
+  Uint32 fix_size= tabPtrP->m_offsets[MM].m_fix_header_size;
   Uint32 order_desc= tabPtrP->m_real_order_descriptor;
 
-  Uint32 *dst_ptr= ptr->get_var_part_ptr(tabPtrP);
+  Uint32 *dst_ptr= ptr->get_end_of_fix_part_ptr(tabPtrP);
   const Uint32 *disk_ref= src->get_disk_ref_ptr(tabPtrP);
-  const Uint32 *src_ptr= src->get_var_part_ptr(tabPtrP);
-  const Uint32 * desc= (Uint32*)req_struct->attr_descr;
+  const Uint32 *src_ptr= src->get_end_of_fix_part_ptr(tabPtrP);
+  const Var_part_ref* var_ref = src->get_var_part_ref_ptr(tabPtrP);
+  const Uint32 *desc= (Uint32*)req_struct->attr_descr;
   const Uint16 *order = (Uint16*)(&tableDescriptor[order_desc]);
   order += tabPtrP->m_attributes[MM].m_no_of_fixsize;
   
   if(mm_vars || mm_dyns)
   {
     // Copy fix part
-    memcpy(ptr, src, 4*(fix_size + Tuple_header::HeaderSize));
+    memcpy(ptr, src, 4*fix_size);
     
     Uint32 src_len;
     Uint32 step; // in bytes
@@ -2737,7 +2722,6 @@
     {
       /* This is for the initial expansion of a stored row. */
       Ptr<Page> var_page;
-      Var_part_ref *var_ref= (Var_part_ref*)src_ptr;
       src_data= get_ptr(&var_page, *var_ref);
       src_len= get_len(&var_page, *var_ref);
       sizes[MM]= src_len;
@@ -2798,8 +2782,6 @@
   else 
   {
     sizes[MM]= 1;
-    dst_ptr -= Tuple_header::HeaderSize;
-    src_ptr -= Tuple_header::HeaderSize;
     memcpy(ptr, src, 4*fix_size);
   }
 
@@ -2833,20 +2815,7 @@
     
     ndbassert(! (req_struct->m_disk_ptr->m_header_bits & Tuple_header::FREE));
     
-    if(dd_vars)
-    {
-      KeyReqStruct::Var_data* dst= &req_struct->m_var_data[DD];
-      dst_ptr += tabPtrP->m_offsets[DD].m_varpart_offset;
-      src_ptr += tabPtrP->m_offsets[DD].m_varpart_offset;
-      order += tabPtrP->m_attributes[DD].m_no_of_fixsize;
-      
-      dst->m_data_ptr= (char*)(char*)(((Uint16*)dst_ptr)+dd_vars+1);
-      dst->m_offset_array_ptr= req_struct->var_pos_array + (mm_vars << 1);
-      dst->m_var_len_offset= dd_vars;
-      dst->m_max_var_offset= tabPtrP->m_offsets[DD].m_max_var_offset;
-
-      expand_var_part(dst, src_ptr, desc, order);
-    }
+    ndbrequire(dd_vars == 0);
   }
   
   ptr->m_header_bits= (bits & ~(Uint32)(Tuple_header::CHAINED_ROW));
@@ -2953,9 +2922,9 @@
   Uint16 mm_vars= tabPtrP->m_attributes[MM].m_no_of_varsize;
   Uint16 mm_dyns= tabPtrP->m_attributes[MM].m_no_of_dynamic;
   
-  const Uint32 *src_ptr= ptr->get_var_part_ptr(tabPtrP);
+  const Uint32 *src_ptr= ptr->get_end_of_fix_part_ptr(tabPtrP);
   const Uint32 *disk_ref= ptr->get_disk_ref_ptr(tabPtrP);
-  
+  const Var_part_ref* var_ref = ptr->get_var_part_ref_ptr(tabPtrP);
   if(mm_vars || mm_dyns)
   {
     const Uint32 *src_data= src_ptr;
@@ -2964,8 +2933,8 @@
     if(bits & Tuple_header::CHAINED_ROW)
     {
       Ptr<Page> tmp;
-      src_data= get_ptr(&tmp, * (Var_part_ref*)src_ptr);
-      src_len= get_len(&tmp, * (Var_part_ref*)src_ptr);
+      src_data= get_ptr(&tmp, * var_ref);
+      src_len= get_len(&tmp, * var_ref);
       /* If the original tuple was grown, the old size is stored at the end. */
       if(bits & Tuple_header::MM_GROWN)
       {
@@ -3010,11 +2979,6 @@
     // disk part start after dynamic part.
     src_ptr+= src_len;
   } 
-  else
-  {
-    // disk part if after fixsize part...
-    src_ptr -= Tuple_header::HeaderSize; 
-  }
   
   if(disk && dd_tot)
   {
@@ -3036,16 +3000,7 @@
     // Fix diskpart
     req_struct->m_disk_ptr= (Tuple_header*)src_ptr;
     ndbassert(! (req_struct->m_disk_ptr->m_header_bits & Tuple_header::FREE));
-    if(dd_vars)
-    {
-      KeyReqStruct::Var_data* dst= &req_struct->m_var_data[DD];
-      src_ptr += tabPtrP->m_offsets[DD].m_varpart_offset;
-      
-      dst->m_data_ptr= (char*)(char*)(((Uint16*)src_ptr)+dd_vars+1);
-      dst->m_offset_array_ptr= (Uint16*)src_ptr;
-      dst->m_var_len_offset= 1;
-      dst->m_max_var_offset= ((Uint16*)src_ptr)[dd_vars];
-    }
+    ndbrequire(dd_vars == 0);
   }
 
   req_struct->is_expanded= false;
@@ -3071,10 +3026,11 @@
   Uint16 mm_dynfix= tabPtrP->m_attributes[MM].m_no_of_dyn_fix;
   Uint16 dd_vars= tabPtrP->m_attributes[DD].m_no_of_varsize;
   
-  Uint32 *dst_ptr= ptr->get_var_part_ptr(tabPtrP);
+  Uint32 *dst_ptr= ptr->get_end_of_fix_part_ptr(tabPtrP);
   Uint16* src_off_ptr= req_struct->var_pos_array;
 
-  sizes[MM]= sizes[DD]= 0;
+  sizes[MM] = 1;
+  sizes[DD] = 0;
   if(mm_vars || mm_dyns)
   {
     Varpart_copy* vp = (Varpart_copy*)dst_ptr;
@@ -3224,25 +3180,14 @@
     ndbassert((UintPtr(dyn_dst_data_ptr) & 3) == 0);
     ndbassert(varpart_len < 0x10000);
   }
-  else
-  {
-    sizes[MM] = 1;
-    dst_ptr -= Tuple_header::HeaderSize;
-  }
   
   if(disk && dd_tot)
   {
     Uint32 * src_ptr = (Uint32*)req_struct->m_disk_ptr;
     req_struct->m_disk_ptr = (Tuple_header*)dst_ptr;
-    if (unlikely(dd_vars))
-    {
-      abort();
-    }
-    else
-    {
-      sizes[DD] = tabPtrP->m_offsets[DD].m_fix_header_size;
-      memmove(dst_ptr, src_ptr, 4*tabPtrP->m_offsets[DD].m_fix_header_size);
-    }
+    ndbrequire(dd_vars == 0);
+    sizes[DD] = tabPtrP->m_offsets[DD].m_fix_header_size;
+    memmove(dst_ptr, src_ptr, 4*tabPtrP->m_offsets[DD].m_fix_header_size);
   }
 
   req_struct->is_expanded= false;
@@ -3280,7 +3225,7 @@
 	if(!(idx & Var_page::FREE) && !(idx & Var_page::CHAIN))
 	{
 	  Tuple_header *ptr= (Tuple_header*)page->get_ptr(i);
-	  Uint32 *part= ptr->get_var_part_ptr(regTabPtr);
+	  Uint32 *part= ptr->get_end_of_fix_part_ptr(regTabPtr);
 	  if(ptr->m_header_bits & Tuple_header::CHAINED_ROW)
 	  {
 	    ndbassert(len == fix_sz + 1);
@@ -3358,7 +3303,7 @@
     Ptr<Page> pagePtr = req_struct->m_varpart_page_ptr;
     Var_page* pageP= (Var_page*)pagePtr.p;
     Uint32 idx, alloc, needed;
-    Var_part_ref *refptr= (Var_part_ref *)(org->get_var_part_ptr(regTabPtr));
+    Var_part_ref *refptr= org->get_var_part_ref_ptr(regTabPtr);
     ndbassert(bits & Tuple_header::CHAINED_ROW);
 
     Local_key ref;
@@ -3419,19 +3364,7 @@
     Local_key tmp = *key;
     PagePtr page_ptr;
 
-    int ret;
-    if (tablePtr.p->m_attributes[MM].m_no_of_varsize +
-        tablePtr.p->m_attributes[MM].m_no_of_dynamic)
-    {
-      const Uint32 XXX = Tuple_header::HeaderSize+Var_part_ref::SZ32;
-      tablePtr.p->m_offsets[MM].m_fix_header_size += XXX;
-      ret = alloc_page(tablePtr.p, fragPtr.p, &page_ptr, tmp.m_page_no);
-      tablePtr.p->m_offsets[MM].m_fix_header_size -= XXX;
-    } 
-    else
-    {
-      ret = alloc_page(tablePtr.p, fragPtr.p, &page_ptr, tmp.m_page_no);  
-    }
+    int ret = alloc_page(tablePtr.p, fragPtr.p, &page_ptr, tmp.m_page_no);
 
     if (ret)
       return -1;
@@ -3459,20 +3392,9 @@
 
   Local_key tmp = *key;
   
-  int ret;
+  
   PagePtr page_ptr;
-  if (tablePtr.p->m_attributes[MM].m_no_of_varsize +
-      tablePtr.p->m_attributes[MM].m_no_of_dynamic)
-  {
-    const Uint32 XXX = Tuple_header::HeaderSize+Var_part_ref::SZ32;
-    tablePtr.p->m_offsets[MM].m_fix_header_size += XXX;
-    ret = alloc_page(tablePtr.p, fragPtr.p, &page_ptr, tmp.m_page_no);
-    tablePtr.p->m_offsets[MM].m_fix_header_size -= XXX;
-  } 
-  else
-  {
-    ret = alloc_page(tablePtr.p, fragPtr.p, &page_ptr, tmp.m_page_no);  
-  }
+  int ret = alloc_page(tablePtr.p, fragPtr.p, &page_ptr, tmp.m_page_no);
   if (ret)
     return -1;
   

--- 1.25/storage/ndb/src/kernel/blocks/dbtup/DbtupIndex.cpp	2007-04-25 23:12:00 +02:00
+++ 1.26/storage/ndb/src/kernel/blocks/dbtup/DbtupIndex.cpp	2007-04-25 23:12:00 +02:00
@@ -477,8 +477,7 @@
   ptrCheckGuard(tablePtr, cnoOfTablerec, tablerec);
 
   const Uint32 firstTupleNo = 0;
-  const Uint32 tupheadsize = tablePtr.p->m_offsets[MM].m_fix_header_size +
-    (buildPtr.p->m_build_vs? Tuple_header::HeaderSize + Var_part_ref::SZ32: 0);
+  const Uint32 tupheadsize = tablePtr.p->m_offsets[MM].m_fix_header_size;
 
 #ifdef TIME_MEASUREMENT
   MicroSecondTimer start;

--- 1.38/storage/ndb/src/kernel/blocks/dbtup/DbtupMeta.cpp	2007-04-25 23:12:00 +02:00
+++ 1.39/storage/ndb/src/kernel/blocks/dbtup/DbtupMeta.cpp	2007-04-25 23:12:00 +02:00
@@ -174,14 +174,14 @@
     
     regTabPtr.p->m_offsets[MM].m_disk_ref_offset= 0;
     regTabPtr.p->m_offsets[MM].m_null_words= 0;
-    regTabPtr.p->m_offsets[MM].m_varpart_offset= 0;
+    regTabPtr.p->m_offsets[MM].m_fix_header_size= 0;
     regTabPtr.p->m_offsets[MM].m_max_var_offset= 0;
     regTabPtr.p->m_offsets[MM].m_max_dyn_offset= 0;
     regTabPtr.p->m_offsets[MM].m_dyn_null_words= 0;
 
     regTabPtr.p->m_offsets[DD].m_disk_ref_offset= 0;
     regTabPtr.p->m_offsets[DD].m_null_words= 0;
-    regTabPtr.p->m_offsets[DD].m_varpart_offset= 0;
+    regTabPtr.p->m_offsets[DD].m_fix_header_size= 0;
     regTabPtr.p->m_offsets[DD].m_max_var_offset= 0;
     regTabPtr.p->m_offsets[DD].m_max_dyn_offset= 0;
     regTabPtr.p->m_offsets[DD].m_dyn_null_words= 0;
@@ -516,9 +516,6 @@
   
   {
     Uint32 fix_tupheader = regTabPtr.p->m_offsets[MM].m_fix_header_size;
-    if((regTabPtr.p->m_attributes[MM].m_no_of_varsize +
-        regTabPtr.p->m_attributes[MM].m_no_of_dynamic) != 0)
-      fix_tupheader += Tuple_header::HeaderSize + Var_part_ref::SZ32;
     ndbassert(fix_tupheader > 0);
     Uint32 noRowsPerPage = ZWORDS_ON_PAGE / fix_tupheader;
     Uint32 noAllocatedPages =
@@ -962,7 +959,16 @@
   {
     /* Room for disk part location. */
     regTabPtr->m_offsets[MM].m_disk_ref_offset= pos[MM];
-    pos[MM] += 2; // 8 bytes
+    pos[MM] += Disk_part_ref::SZ32; // 8 bytes
+  }
+  else
+  {
+    regTabPtr->m_offsets[MM].m_disk_ref_offset= pos[MM] - Disk_part_ref::SZ32;
+  }
+
+  if (regTabPtr->m_attributes[MM].m_no_of_varsize)
+  {
+    pos[MM] += Var_part_ref::SZ32;
   }
 
   regTabPtr->m_offsets[MM].m_null_offset= pos[MM];
@@ -1075,13 +1081,9 @@
   ndbassert(statvar_count==regTabPtr->m_attributes[MM].m_no_of_varsize);
 
   regTabPtr->m_offsets[MM].m_fix_header_size= 
-    fix_size[MM] + pos[MM];
+    Tuple_header::HeaderSize + fix_size[MM] + pos[MM];
   regTabPtr->m_offsets[DD].m_fix_header_size= 
     fix_size[DD] + pos[DD];
-
-  if((regTabPtr->m_attributes[MM].m_no_of_varsize +
-      regTabPtr->m_attributes[MM].m_no_of_dynamic) == 0)
-    regTabPtr->m_offsets[MM].m_fix_header_size += Tuple_header::HeaderSize;
 
   if(regTabPtr->m_attributes[DD].m_no_of_varsize == 0 &&
      regTabPtr->m_attributes[DD].m_no_of_fixsize > 0)

--- 1.449/sql/ha_ndbcluster.cc	2007-04-25 23:12:00 +02:00
+++ 1.450/sql/ha_ndbcluster.cc	2007-04-25 23:12:00 +02:00
@@ -8266,7 +8266,7 @@
   NdbError error;
   int retries= 10;
   int reterr= 0;
-  int retry_sleep= 30 * 1000; /* 30 milliseconds */
+  int retry_sleep= 30; /* 30 milliseconds, transaction */
 #ifndef DBUG_OFF
   char buff[22], buff2[22], buff3[22], buff4[22];
 #endif

--- 1.25/storage/ndb/src/kernel/blocks/dbtup/DbtupScan.cpp	2007-04-25 23:12:00 +02:00
+++ 1.26/storage/ndb/src/kernel/blocks/dbtup/DbtupScan.cpp	2007-04-25 23:12:00 +02:00
@@ -602,8 +602,7 @@
   const bool lcp = (bits & ScanOp::SCAN_LCP);
   
   Uint32 lcp_list = fragPtr.p->m_lcp_keep_list;
-  Uint32 size = table.m_offsets[mm].m_fix_header_size +
-    (bits&ScanOp::SCAN_VS ? Tuple_header::HeaderSize + Var_part_ref::SZ32 : 0);
+  Uint32 size = table.m_offsets[mm].m_fix_header_size;
 
   if (lcp && lcp_list != RNIL)
     goto found_lcp_keep;

--- 1.113/sql/ha_ndbcluster_binlog.cc	2007-04-25 23:12:00 +02:00
+++ 1.114/sql/ha_ndbcluster_binlog.cc	2007-04-25 23:12:00 +02:00
@@ -1041,6 +1041,7 @@
   const NDBTAB *ndbtab= ndbtab_g.get_table();
   NdbTransaction *trans= 0;
   int retries= 100;
+  int retry_sleep= 10; /* 10 milliseconds, transaction */
   const NDBCOL *col[SCHEMA_SIZE];
   unsigned sz[SCHEMA_SIZE];
 
@@ -1142,6 +1143,7 @@
       {
         if (trans)
           ndb->closeTransaction(trans);
+        my_sleep(retry_sleep);
         continue; // retry
       }
     }
@@ -1353,6 +1355,7 @@
   const NDBTAB *ndbtab= ndbtab_g.get_table();
   NdbTransaction *trans= 0;
   int retries= 100;
+  int retry_sleep= 10; /* 10 milliseconds, transaction */
   const NDBCOL *col[SCHEMA_SIZE];
   unsigned sz[SCHEMA_SIZE];
 
@@ -1463,6 +1466,7 @@
       {
         if (trans)
           ndb->closeTransaction(trans);
+        my_sleep(retry_sleep);
         continue; // retry
       }
     }
@@ -2861,6 +2865,11 @@
   TABLE *table= share->table;
 
   int retries= 100;
+  /*
+    100 milliseconds, temporary error on schema operation can
+    take some time to be resolved
+  */
+  int retry_sleep= 100;
   while (1)
   {
     pthread_mutex_lock(&injector_mutex);
@@ -2989,7 +2998,10 @@
       ndb->dropEventOperation(op);
       pthread_mutex_unlock(&injector_mutex);
       if (retries)
+      {
+        my_sleep(retry_sleep);
         continue;
+      }
       DBUG_RETURN(-1);
     }
     pthread_mutex_unlock(&injector_mutex);
Thread
bk commit into 5.1 tree (jonas:1.2550)jonas25 Apr