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) | jonas | 8 Sep |