List:Internals« Previous MessageNext Message »
From:jonas.oreland Date:April 1 2005 1:37pm
Subject:bk commit into 5.1-ndb tree (joreland:1.1814)
View as plain text  
Below is the list of changes that have just been committed into a local
5.1-ndb 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
  1.1814 05/04/01 15:37:16 joreland@stripped +2 -0
  wl1866 - ndb diskdata/varsize
    abort of grow/shrink

  ndb/test/tools/hugoScanUpdate.cpp
    1.8 05/04/01 15:37:12 joreland@stripped +9 -7
    Add abort option to scanUpdate

  ndb/src/kernel/blocks/dbtup/DbtupAbort.cpp
    1.28 05/04/01 15:37:12 joreland@stripped +30 -11
    Fix abort of grow/shrink

# 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:	joreland
# Host:	eel.hemma.oreland.se.ndb.mysql.com
# Root:	/home/jonas/src/mysql-5.1-ndb-dd

--- 1.27/ndb/src/kernel/blocks/dbtup/DbtupAbort.cpp	Wed Mar 30 14:46:49 2005
+++ 1.28/ndb/src/kernel/blocks/dbtup/DbtupAbort.cpp	Fri Apr  1 15:37:12 2005
@@ -88,7 +88,6 @@
   regTabPtr.i = regFragPtr.p->fragTableId;
   ptrCheckGuard(regTabPtr, cnoOfTablerec, tablerec);
 
-  Tuple_header* tuple_ptr= 0;
   if (get_tuple_state(regOperPtr.p) == TUPLE_PREPARED)
   {
     ljam();
@@ -116,29 +115,49 @@
     }
   }
 
+  PagePtr page;
+  Tuple_header *tuple_ptr= (Tuple_header*)
+    get_ptr(&page, &regOperPtr.p->m_tuple_location, regTabPtr.p);
+  
+  Tuple_header *copy= (Tuple_header*)
+    c_undo_buffer.get_ptr(&regOperPtr.p->m_copy_tuple_location);
+  
   if(regOperPtr.p->op_struct.m_disk_preallocated)
   {
     jam();
-    Tuple_header* tmp= (Tuple_header*)
-      c_undo_buffer.get_ptr(&regOperPtr.p->m_copy_tuple_location);
     Local_key key;
-    memcpy(&key, tmp->get_disk_ref_ptr(regTabPtr.p), sizeof(key));
+    memcpy(&key, copy->get_disk_ref_ptr(regTabPtr.p), sizeof(key));
     disk_page_abort_prealloc(signal, regTabPtr.p, &key, key.m_page_idx);
   }
   
-  if(tuple_ptr == 0 && regOperPtr.p->is_last_operation())
-  {
-    PagePtr page;
-    Uint32* ptr= get_ptr(&page, &regOperPtr.p->m_tuple_location, regTabPtr.p);
-    tuple_ptr= (Tuple_header*)ptr;
-  }
-
   if(regOperPtr.p->is_first_operation() && regOperPtr.p->is_last_operation())
   {
     c_lgman->free_log_space(regTabPtr.p->m_logfile_group_id, 
 			    regOperPtr.p->m_undo_buffer_space);
   }
   
+  Uint32 bits= copy->m_header_bits;
+  if(bits & Tuple_header::MM_GROWN)
+  {
+    ndbout_c("abort grow");
+    Var_page *pageP= (Var_page*)page.p;
+    Uint32 idx= regOperPtr.p->m_tuple_location.m_page_idx;
+    Uint32 len= pageP->get_entry_len(idx);
+    Uint32 fix_size= regTabPtr.p->m_offsets[MM].m_fix_header_size;
+    Uint32 mm_vars= regTabPtr.p->m_attributes[MM].m_no_of_varsize;
+    
+    Uint32 *var_part= tuple_ptr->get_var_part_ptr(regTabPtr.p);
+    Uint32 sz= Tuple_header::HeaderSize + fix_size +
+      ((((mm_vars + 1) << 1) + (((Uint16*)var_part)[mm_vars]) + 3)>> 2);
+    
+    ndbassert(sz < len);
+    pageP->shrink_entry(idx, sz);
+  } 
+  else if(bits & Tuple_header::MM_SHRINK)
+  {
+    ndbout_c("abort shrink");
+  }
+
   removeActiveOpList(regOperPtr.p, tuple_ptr);
   initOpConnection(regOperPtr.p);
 }

--- 1.7/ndb/test/tools/hugoScanUpdate.cpp	Wed Dec 29 16:01:40 2004
+++ 1.8/ndb/test/tools/hugoScanUpdate.cpp	Fri Apr  1 15:37:12 2005
@@ -35,6 +35,7 @@
   int _ver2 = 0;
   const char* _tabname = NULL;
   int _help = 0;
+  int abort= 0;
   
   struct getargs args[] = {
     { "loops", 'l', arg_integer, &_loops, "number of times to run this program(0=infinite loop)", "loops" },
@@ -42,6 +43,7 @@
     { "records", 'r', arg_integer, &_records, "Number of records", "recs" },
     { "ver2", '2', arg_flag, &_ver2, "Use version 2 of scanUpdateRecords", "" },
     { "ver2", '1', arg_negative_flag, &_ver2, "Use version 1 of scanUpdateRecords (default)", "" },
+    { "abort", 'a', arg_integer, &abort, "Abort probability", "" },
     { "usage", '?', arg_flag, &_help, "Print help", "" }
   };
   int num_args = sizeof(args) / sizeof(args[0]);
@@ -87,20 +89,20 @@
     ndbout << i << ": ";
     if (_ver2 == 0){
       res = hugoTrans.scanUpdateRecords(&MyNdb, 
-				      _records,
-				      0, 
-				      _parallelism);
+					_records,
+					abort % 101, 
+					_parallelism);
     } else{
       res = hugoTrans.scanUpdateRecords2(&MyNdb, 
-				       _records,
-				       0, 
-				       _parallelism);
+					 _records,
+					 abort % 101, 
+					 _parallelism);
     }
     if (res != NDBT_OK ){
       return NDBT_ProgramExit(NDBT_FAILED);
     }
     i++;
   }
-
+  
   return NDBT_ProgramExit(NDBT_OK);
 }
Thread
bk commit into 5.1-ndb tree (joreland:1.1814)jonas.oreland1 Apr