List:Internals« Previous MessageNext Message »
From:jonas Date:September 8 2005 11:20am
Subject:bk commit into 5.1 tree (jonas:1.1994)
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.1994 05/09/08 13:19:59 jonas@eel.(none) +8 -0
  ndb diskdata
    add posix_fallocate
    impr. init of file by not syncing during 

  storage/ndb/src/kernel/blocks/ndbfs/AsyncFile.cpp
    1.29 05/09/08 13:19:54 jonas@eel.(none) +26 -15
    don sync during init of file

  storage/ndb/src/kernel/blocks/dbtup/DbtupScan.cpp
    1.18 05/09/08 13:19:54 jonas@eel.(none) +26 -24
    remove c_scanOpPool pointer from each fragment

  storage/ndb/src/kernel/blocks/dbtup/DbtupGen.cpp
    1.44 05/09/08 13:19:54 jonas@eel.(none) +0 -5
    new bit for varsize DD part
    remove c_scanOpPool pointer from each fragment

  storage/ndb/src/kernel/blocks/dbtup/DbtupDiskAlloc.cpp
    1.31 05/09/08 13:19:54 jonas@eel.(none) +8 -0
    maintain sllist of all extents allocated to fragment

  storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp
    1.82 05/09/08 13:19:54 jonas@eel.(none) +9 -8
    remove unused variable
    add extent_info_ptr_i

  storage/ndb/src/kernel/blocks/backup/Backup.cpp
    1.48 05/09/08 13:19:54 jonas@eel.(none) +1 -1
    add autosync option.
    will sync file every 1M (of appends)

  storage/ndb/include/kernel/signaldata/FsOpenReq.hpp
    1.9 05/09/08 13:19:54 jonas@eel.(none) +1 -0
    add autosync option.
    will sync file every 1M (of appends)

  configure.in
    1.273 05/09/08 13:19:54 jonas@eel.(none) +2 -1
    add configurecheck for posix_fallocate

# 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:	eel.(none)
# Root:	/home/jonas/src/mysql-5.1-ndb-dd

--- 1.272/configure.in	2005-09-07 14:59:30 +02:00
+++ 1.273/configure.in	2005-09-08 13:19:54 +02:00
@@ -1913,7 +1913,8 @@
   shmget shmat shmdt shmctl sigaction sigemptyset sigaddset \
   sighold sigset sigthreadmask \
   snprintf socket stpcpy strcasecmp strerror strnlen strpbrk strstr strtol \
-  strtoll strtoul strtoull tell tempnam thr_setconcurrency vidattr)
+  strtoll strtoul strtoull tell tempnam thr_setconcurrency vidattr \
+  posix_fallocate)
 
 #
 #

--- 1.30/storage/ndb/src/kernel/blocks/dbtup/DbtupDiskAlloc.cpp	2005-09-05 13:54:32 +02:00
+++ 1.31/storage/ndb/src/kernel/blocks/dbtup/DbtupDiskAlloc.cpp	2005-09-08 13:19:54 +02:00
@@ -285,6 +285,10 @@
       ext.p->m_free_space= alloc.m_page_free_bits_map[0] * pages; 
       ext.p->m_free_page_count[0]= pages; // All pages are "free"-est
       c_extent_hash.add(ext);
+
+      LocalSLList<Extent_info, Extent_list_t> 
+	list1(c_extent_pool, alloc.m_extent_list);
+      list1.add(ext);
     }
     alloc.m_curr_extent_info_ptr_i= ext.i;
     ext.p->m_free_matrix_pos= RNIL;
@@ -1077,6 +1081,10 @@
       alloc.m_curr_extent_info_ptr_i = ext.i;
       ext.p->m_free_matrix_pos = RNIL;
       c_extent_hash.add(ext);
+
+      LocalSLList<Extent_info, Extent_list_t> 
+	list1(c_extent_pool, alloc.m_extent_list);
+      list1.add(ext);
       return 0;
     }
   }

--- 1.8/storage/ndb/include/kernel/signaldata/FsOpenReq.hpp	2005-08-08 01:23:31 +02:00
+++ 1.9/storage/ndb/include/kernel/signaldata/FsOpenReq.hpp	2005-09-08 13:19:54 +02:00
@@ -78,6 +78,7 @@
   STATIC_CONST( OM_SYNC      = 0x10  );
   STATIC_CONST( OM_CREATE    = 0x100 );
   STATIC_CONST( OM_TRUNCATE  = 0x200 );
+  STATIC_CONST( OM_AUTOSYNC  = 0x400 ); 
 
   STATIC_CONST( OM_CREATE_IF_NONE = 0x0400 );
   STATIC_CONST( OM_INIT           = 0x0800 ); // 

--- 1.47/storage/ndb/src/kernel/blocks/backup/Backup.cpp	2005-07-26 15:15:46 +02:00
+++ 1.48/storage/ndb/src/kernel/blocks/backup/Backup.cpp	2005-09-08 13:19:54 +02:00
@@ -2525,7 +2525,7 @@
     FsOpenReq::OM_TRUNCATE |
     FsOpenReq::OM_CREATE | 
     FsOpenReq::OM_APPEND |
-    FsOpenReq::OM_SYNC;
+    FsOpenReq::OM_AUTOSYNC;
   FsOpenReq::v2_setCount(req->fileNumber, 0xFFFFFFFF);
   
   /**

--- 1.81/storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp	2005-09-06 20:47:08 +02:00
+++ 1.82/storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp	2005-09-08 13:19:54 +02:00
@@ -336,7 +336,7 @@
 
   // Position for use by scan
   struct PagePos {
-    Uint32 m_fragId;            // fragment id
+    Uint32 m_extent_info_ptr_i;
     Local_key m_key;
     bool m_match;
   };
@@ -357,6 +357,7 @@
     STATIC_CONST( SCAN_DD    = 0x1 );
     STATIC_CONST( SCAN_VS    = 0x2 );
     STATIC_CONST( SCAN_LCP   = 0x4 );
+    STATIC_CONST( SCAN_DD_VS = 0x8 );
     Uint16 m_bits;
     
     Uint32 m_userPtr;           // scanptr.i in LQH
@@ -376,11 +377,6 @@
   typedef Ptr<ScanOp> ScanOpPtr;
   ArrayPool<ScanOp> c_scanOpPool;
 
-  void scanFirst(Signal* signal, ScanOpPtr scanPtr);
-  void scanNext(Signal* signal, ScanOpPtr scanPtr);
-  void scanClose(Signal* signal, ScanOpPtr scanPtr);
-  void releaseScanOp(ScanOpPtr& scanPtr);
-
   typedef Tup_page Page;
   typedef Ptr<Page> PagePtr;
 
@@ -523,8 +519,7 @@
   Uint32 nextfreefrag;
   Uint32 free_var_page_array[MAX_FREE_LIST];
 
-  DLList<ScanOp> m_scanList;
-  Fragrecord(ArrayPool<ScanOp> & scanOpPool) : m_scanList(scanOpPool) {}
+  DLList<ScanOp>::Head m_scanList;
 
   bool m_undo_complete;
   Uint32 m_tablespace_id;
@@ -532,6 +527,12 @@
   Disk_alloc_info m_disk_alloc_info;
 };
 typedef Ptr<Fragrecord> FragrecordPtr;
+
+  void scanFirst(Signal* signal, Fragrecord*, ScanOpPtr scanPtr);
+  void scanNext(Signal* signal, Fragrecord*, ScanOpPtr scanPtr);
+  void scanClose(Signal* signal, ScanOpPtr scanPtr);
+  void releaseScanOp(ScanOpPtr& scanPtr);
+
 
 struct Operationrec {
   /*

--- 1.43/storage/ndb/src/kernel/blocks/dbtup/DbtupGen.cpp	2005-09-06 20:47:08 +02:00
+++ 1.44/storage/ndb/src/kernel/blocks/dbtup/DbtupGen.cpp	2005-09-08 13:19:54 +02:00
@@ -341,11 +341,6 @@
 					sizeof(Fragrecord), 
 					cnoOfFragrec);
   
-  for (i = 0; i<cnoOfFragrec; i++) {
-    void * p = &fragrecord[i];
-    new (p) Fragrecord(c_scanOpPool);
-  }
-
   hostBuffer = (HostBuffer*)allocRecord("HostBuffer",
 					sizeof(HostBuffer), 
 					MAX_NODES);

--- 1.28/storage/ndb/src/kernel/blocks/ndbfs/AsyncFile.cpp	2005-08-08 01:23:31 +02:00
+++ 1.29/storage/ndb/src/kernel/blocks/ndbfs/AsyncFile.cpp	2005-09-08 13:19:54 +02:00
@@ -324,26 +324,22 @@
       new_flags |= O_TRUNC;
   }  
 
+  if (flags & FsOpenReq::OM_AUTOSYNC)
+  {
+    m_syncFrequency = 1024*1024; // Hard coded to 1M
+  }
+
   if(flags & FsOpenReq::OM_APPEND){
     new_flags |= O_APPEND;
   }
 
-  if(flags & FsOpenReq::OM_SYNC){
-    if(Global_useO_SYNC){
-      new_flags |= O_SYNC;
-      m_openedWithSync = true;
-      m_syncFrequency = 0;
-    } else {
-      m_openedWithSync = false;
-      m_syncFrequency = Global_syncFreq;
-    }
-  } else {
-    m_openedWithSync = false;
-    m_syncFrequency = 0;
+  if((flags & FsOpenReq::OM_SYNC) && ! (flags & FsOpenReq::OM_INIT))
+  {
+    new_flags |= O_SYNC;
   }
-
+  
 #ifdef O_DIRECT
-  if (flags & FsOpenReq::OM_DIRECT)
+  if (flags & FsOpenReq::OM_DIRECT) 
   {
     new_flags |= O_DIRECT;
   }
@@ -413,7 +409,11 @@
 
     Uint32 index = 0;
     Uint32 block = refToBlock(request->theUserReference);
-        
+
+#ifdef HAVE_POSIX_FALLOCATE
+    posix_fallocate(theFd, 0, sz);
+#endif
+
     while(off < sz)
     {
       req->filePointer = 0;          // DATA 0
@@ -450,6 +450,17 @@
     }
     if(lseek(theFd, 0, SEEK_SET) != 0)
       request->error = errno;
+  }
+
+  if ((flags & FsOpenReq::OM_SYNC) && (flags & FsOpenReq::OM_INIT))
+  {
+    /**
+     * reopen file with O_SYNC
+     */
+    close(theFd);
+    new_flags &= ~(O_CREAT | O_TRUNC);
+    new_flags |= O_SYNC;
+    theFd = ::open(theFileName.c_str(), new_flags, mode);
   }
 #endif
 }

--- 1.17/storage/ndb/src/kernel/blocks/dbtup/DbtupScan.cpp	2005-08-31 06:46:10 +02:00
+++ 1.18/storage/ndb/src/kernel/blocks/dbtup/DbtupScan.cpp	2005-09-08 13:19:54 +02:00
@@ -52,33 +52,36 @@
       ndbrequire(frag.m_lcp_scan_op == c_lcp_scan_op);
       c_scanOpPool.getPtr(scanPtr, frag.m_lcp_scan_op);
     }
-    else if (! frag.m_scanList.seize(scanPtr)) 
+    else 
     {
-      jam();
-      break;
+      LocalDLList<ScanOp> list(c_scanOpPool, frag.m_scanList);
+      if (! list.seize(scanPtr)) 
+      {
+	jam();
+	break;
+      }
     }
     new (scanPtr.p) ScanOp();
     ScanOp& scan = *scanPtr.p;
     scan.m_state = ScanOp::First;
     // TODO scan disk only if any scanned attribute on disk
 
-    Uint32 part = MM;
     if(! (bits & ScanOp::SCAN_LCP))
     {
-#if 0     
       /**
        * Remove this until disk scan has been implemented
        */
       if(tablePtr.p->m_attributes[DD].m_no_of_fixsize > 0 ||
 	 tablePtr.p->m_attributes[DD].m_no_of_varsize > 0)
       {
-	part = DD;
 	bits |= ScanOp::SCAN_DD;
+	
+	if (tablePtr.p->m_attributes[DD].m_no_of_varsize > 0)
+	  bits |= ScanOp::SCAN_DD_VS;
       }
-#endif
     }
     
-    if(tablePtr.p->m_attributes[part].m_no_of_varsize)
+    if(tablePtr.p->m_attributes[MM].m_no_of_varsize)
     {
       bits |= ScanOp::SCAN_VS;
     }
@@ -120,10 +123,6 @@
   ScanOpPtr scanPtr;
   c_scanOpPool.getPtr(scanPtr, req->accPtr);
   ScanOp& scan = *scanPtr.p;
-  FragrecordPtr fragPtr;
-  fragPtr.i = scan.m_fragPtrI;
-  ptrCheckGuard(fragPtr, cnoOfFragrec, fragrecord);
-  Fragrecord& frag = *fragPtr.p;
   switch (req->scanFlag) {
   case NextScanReq::ZSCAN_NEXT:
     jam();
@@ -184,11 +183,11 @@
   }
   if (scan.m_state == ScanOp::First) {
     jam();
-    scanFirst(signal, scanPtr);
+    scanFirst(signal, fragPtr.p, scanPtr);
   }
   if (scan.m_state == ScanOp::Next) {
     jam();
-    scanNext(signal, scanPtr);
+    scanNext(signal, fragPtr.p, scanPtr);
   }
   if (scan.m_state == ScanOp::Locked) {
     jam();
@@ -224,23 +223,28 @@
 }
 
 void
-Dbtup::scanFirst(Signal* signal, ScanOpPtr scanPtr)
+Dbtup::scanFirst(Signal*, Fragrecord* fragPtrP, ScanOpPtr scanPtr)
 {
   ScanOp& scan = *scanPtr.p;
   // set to first fragment, first page, first tuple
   const Uint32 first_page_idx = scan.m_bits & ScanOp::SCAN_VS ? 1 : 0;
   PagePos& pos = scan.m_scanPos;
-  pos.m_fragId = scan.m_fragId;
   pos.m_key.m_page_no = 0;
   pos.m_key.m_page_idx = first_page_idx;
   // just before
   pos.m_match = false;
   // let scanNext() do the work
   scan.m_state = ScanOp::Next;
+
+  if (scan.m_bits & ScanOp::SCAN_DD)
+  {
+    pos.m_extent_info_ptr_i = 
+      fragPtrP->m_disk_alloc_info.m_extent_list.firstItem;
+  }
 }
 
 void
-Dbtup::scanNext(Signal* signal, ScanOpPtr scanPtr)
+Dbtup::scanNext(Signal* signal, Fragrecord* fragPtrP, ScanOpPtr scanPtr)
 {
   ScanOp& scan = *scanPtr.p;
   PagePos& pos = scan.m_scanPos;
@@ -249,10 +253,7 @@
   TablerecPtr tablePtr;
   tablePtr.i = scan.m_tableId;
   ptrCheckGuard(tablePtr, cnoOfTablerec, tablerec);
-  FragrecordPtr fragPtr;
-  fragPtr.i = scan.m_fragPtrI;
-  ptrCheckGuard(fragPtr, cnoOfFragrec, fragrecord);
-  Fragrecord& frag = *fragPtr.p;
+  Fragrecord& frag = *fragPtrP;
   const Uint32 first_page_idx = bits & ScanOp::SCAN_VS ? 1 : 0;
   while (true) {
     // TODO time-slice here after X loops
@@ -264,7 +265,7 @@
       scan.m_state = ScanOp::Last;
       break;
     }
-    Uint32 realPageId = getRealpid(fragPtr.p, key.m_page_no);
+    Uint32 realPageId = getRealpid(fragPtrP, key.m_page_no);
     pagePtr.i = realPageId;
     ptrCheckGuard(pagePtr, cnoOfPage, cpage);
     Uint32 pageState = pagePtr.p->page_state;
@@ -362,7 +363,8 @@
 
   if(! (scanPtr.p->m_bits & ScanOp::SCAN_LCP))
   {
-    fragPtr.p->m_scanList.release(scanPtr);
+    LocalDLList<ScanOp> list(c_scanOpPool, fragPtr.p->m_scanList);    
+    list.release(scanPtr);
   }
   else
   {
@@ -395,7 +397,7 @@
     ScanOpPtr scanPtr;
     c_scanOpPool.getPtr(scanPtr, frag.m_lcp_scan_op);
     
-    scanFirst(signal, scanPtr);
+    scanFirst(signal, fragPtr.p, scanPtr);
     scanPtr.p->m_state = ScanOp::First;
   }
 }
Thread
bk commit into 5.1 tree (jonas:1.1994)jonas8 Sep