List:Commits« Previous MessageNext Message »
From:jonas Date:June 21 2006 11:39am
Subject:bk commit into 5.1 tree (jonas:1.2195) BUG#20007
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
  1.2195 06/06/21 13:39:04 jonas@stripped +6 -0
  ndb - bug#20007
    varpages did not get freed on drop table

  storage/ndb/src/kernel/blocks/dbtup/tuppage.hpp
    1.3 06/06/21 13:39:01 jonas@stripped +8 -2
    Add list of varpage chunks

  storage/ndb/src/kernel/blocks/dbtup/DbtupVarAlloc.cpp
    1.3 06/06/21 13:39:01 jonas@stripped +7 -0
    Add list of varpage chunks

  storage/ndb/src/kernel/blocks/dbtup/DbtupPageMap.cpp
    1.6 06/06/21 13:39:01 jonas@stripped +5 -0
    Add continueb for freeing varpages

  storage/ndb/src/kernel/blocks/dbtup/DbtupMeta.cpp
    1.26 06/06/21 13:39:01 jonas@stripped +40 -1
    add dropping of varpages

  storage/ndb/src/kernel/blocks/dbtup/DbtupGen.cpp
    1.29 06/06/21 13:39:01 jonas@stripped +6 -0
    Add continueb for freeing varpages

  storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp
    1.45 06/06/21 13:39:01 jonas@stripped +3 -0
    Add continueb for freeing varpages

# 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-work

--- 1.2/storage/ndb/src/kernel/blocks/dbtup/DbtupVarAlloc.cpp	2006-01-11 09:26:03 +01:00
+++ 1.3/storage/ndb/src/kernel/blocks/dbtup/DbtupVarAlloc.cpp	2006-06-21 13:39:01 +02:00
@@ -323,6 +323,13 @@ Dbtup::get_empty_var_page(Fragrecord* fr
     ptr.p->nextList = RNIL;
     list.add(ret.i + 1, ptr);
   }
+
+  c_page_pool.getPtr(ret);
+  
+  Var_page* page = (Var_page*)ret.p;
+  page->chunk_size = cnt;
+  page->next_chunk = fragPtr->m_var_page_chunks;
+  fragPtr->m_var_page_chunks = ret.i;
   
   return ret.i;
 }

--- 1.2/storage/ndb/src/kernel/blocks/dbtup/tuppage.hpp	2006-01-11 09:26:03 +01:00
+++ 1.3/storage/ndb/src/kernel/blocks/dbtup/tuppage.hpp	2006-06-21 13:39:01 +02:00
@@ -107,8 +107,14 @@ struct Tup_varsize_page
   Uint32 page_state;
   Uint32 next_page;
   Uint32 prev_page;
-  Uint32 first_cluster_page;
-  Uint32 last_cluster_page;
+  union {
+    Uint32 first_cluster_page;
+    Uint32 chunk_size;
+  };
+  union {
+    Uint32 last_cluster_page;
+    Uint32 next_chunk;
+  };
   Uint32 next_cluster_page;
   Uint32 prev_cluster_page;
   Uint32 frag_page_id;

--- 1.44/storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp	2006-05-18 10:17:50 +02:00
+++ 1.45/storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp	2006-06-21 13:39:01 +02:00
@@ -246,6 +246,7 @@ inline const Uint32* ALIGN_WORD(const vo
 #define ZTUP_SCAN 10
 #define ZFREE_EXTENT 11
 #define ZUNMAP_PAGES 12
+#define ZFREE_VAR_PAGES 13
 
 #define ZSCAN_PROCEDURE 0
 #define ZCOPY_PROCEDURE 2
@@ -620,6 +621,7 @@ struct Fragrecord {
   Uint32 m_tablespace_id;
   Uint32 m_logfile_group_id;
   Disk_alloc_info m_disk_alloc_info;
+  Uint32 m_var_page_chunks;
 };
 typedef Ptr<Fragrecord> FragrecordPtr;
 
@@ -2335,6 +2337,7 @@ private:
 
 
   void releaseFragment(Signal* signal, Uint32 tableId);
+  void drop_fragment_free_var_pages(Signal*);
   void drop_fragment_free_exent(Signal*, TablerecPtr, FragrecordPtr, Uint32);
   void drop_fragment_unmap_pages(Signal*, TablerecPtr, FragrecordPtr, Uint32);
   void drop_fragment_unmap_page_callback(Signal* signal, Uint32, Uint32);

--- 1.28/storage/ndb/src/kernel/blocks/dbtup/DbtupGen.cpp	2006-05-18 10:17:50 +02:00
+++ 1.29/storage/ndb/src/kernel/blocks/dbtup/DbtupGen.cpp	2006-06-21 13:39:01 +02:00
@@ -227,6 +227,12 @@ void Dbtup::execCONTINUEB(Signal* signal
     drop_fragment_unmap_pages(signal, tabPtr, fragPtr, signal->theData[3]);
     return;
   }
+  case ZFREE_VAR_PAGES:
+  {
+    ljam();
+    drop_fragment_free_var_pages(signal);
+    return;
+  }
   default:
     ndbrequire(false);
     break;

--- 1.25/storage/ndb/src/kernel/blocks/dbtup/DbtupMeta.cpp	2006-03-23 04:17:22 +01:00
+++ 1.26/storage/ndb/src/kernel/blocks/dbtup/DbtupMeta.cpp	2006-06-21 13:39:01 +02:00
@@ -140,6 +140,7 @@ void Dbtup::execTUPFRAGREQ(Signal* signa
   regFragPtr.p->m_undo_complete= false;
   regFragPtr.p->m_lcp_scan_op = RNIL; 
   regFragPtr.p->m_lcp_keep_list = RNIL;
+  regFragPtr.p->m_var_page_chunks = RNIL;
   
   Uint32 noAllocatedPages= allocFragPages(regFragPtr.p, pages);
   
@@ -970,7 +971,7 @@ Dbtup::drop_fragment_unmap_pages(Signal 
     case -1:
       break;
     default:
-      ndbrequire(res == pagePtr.i);
+      ndbrequire((Uint32)res == pagePtr.i);
       drop_fragment_unmap_page_callback(signal, pos, res);
     }
     return;
@@ -1050,6 +1051,44 @@ Dbtup::drop_fragment_free_exent(Signal *
       LocalDLList<Page> list(* cheat_pool, alloc_info.m_dirty_pages[pos]);
       list.remove();
     }
+  }
+  
+  signal->theData[0] = ZFREE_VAR_PAGES;
+  signal->theData[1] = tabPtr.i;
+  signal->theData[2] = fragPtr.i;
+  sendSignal(reference(), GSN_CONTINUEB, signal, 3, JBB);  
+}
+
+void
+Dbtup::drop_fragment_free_var_pages(Signal* signal)
+{
+  ljam();
+  Uint32 tableId = signal->theData[1];
+  Uint32 fragPtrI = signal->theData[2];
+  
+  TablerecPtr tabPtr;
+  tabPtr.i= tableId;
+  ptrCheckGuard(tabPtr, cnoOfTablerec, tablerec);
+  
+  FragrecordPtr fragPtr;
+  fragPtr.i = fragPtrI;
+  ptrCheckGuard(fragPtr, cnoOfFragrec, fragrecord);
+  
+  PagePtr pagePtr;
+  if ((pagePtr.i = fragPtr.p->m_var_page_chunks) != RNIL)
+  {
+    c_page_pool.getPtr(pagePtr);
+    Var_page* page = (Var_page*)pagePtr.p;
+    fragPtr.p->m_var_page_chunks = page->next_chunk;
+
+    Uint32 sz = page->chunk_size;
+    returnCommonArea(pagePtr.i, sz);
+    
+    signal->theData[0] = ZFREE_VAR_PAGES;
+    signal->theData[1] = tabPtr.i;
+    signal->theData[2] = fragPtr.i;
+    sendSignal(cownref, GSN_CONTINUEB, signal, 3, JBB);  
+    return;
   }
   
   releaseFragPages(fragPtr.p);

--- 1.5/storage/ndb/src/kernel/blocks/dbtup/DbtupPageMap.cpp	2006-01-12 15:38:30 +01:00
+++ 1.6/storage/ndb/src/kernel/blocks/dbtup/DbtupPageMap.cpp	2006-06-21 13:39:01 +02:00
@@ -299,6 +299,11 @@ void Dbtup::releaseFragPages(Fragrecord*
 	LocalDLList<Page> tmp(c_page_pool, regFragPtr->thFreeFirst);
 	tmp.remove();
       }
+
+      {
+	LocalSLList<Page> tmp(c_page_pool, regFragPtr->m_empty_pages);
+	tmp.remove();
+      }
       
       return;
     } else {
Thread
bk commit into 5.1 tree (jonas:1.2195) BUG#20007jonas21 Jun