summaryrefslogtreecommitdiff
path: root/storage/ndb
diff options
context:
space:
mode:
authorjoerg@trift2. <>2006-11-01 13:26:03 +0100
committerjoerg@trift2. <>2006-11-01 13:26:03 +0100
commit0d27df6f1a7ecb37d7445922a053c14f70bb1f6e (patch)
treed892b80d02ea4fde1d578793a28d89757ed13b4a /storage/ndb
parentb5e1d6f2a3d3492b1174974c7ea6417ef21da771 (diff)
parentda721fe7aa87df01283b3550704f9b854aac9e7f (diff)
downloadmariadb-git-0d27df6f1a7ecb37d7445922a053c14f70bb1f6e.tar.gz
Merge trift2.:/MySQL/M51/clone-5.1
into trift2.:/MySQL/M51/push-5.1
Diffstat (limited to 'storage/ndb')
-rw-r--r--storage/ndb/src/kernel/blocks/dbtup/DbtupDiskAlloc.cpp58
-rw-r--r--storage/ndb/src/kernel/blocks/dbtup/DbtupExecQuery.cpp15
-rw-r--r--storage/ndb/src/kernel/vm/Pool.hpp6
3 files changed, 48 insertions, 31 deletions
diff --git a/storage/ndb/src/kernel/blocks/dbtup/DbtupDiskAlloc.cpp b/storage/ndb/src/kernel/blocks/dbtup/DbtupDiskAlloc.cpp
index 56f7fb1dd1e..a055b18888b 100644
--- a/storage/ndb/src/kernel/blocks/dbtup/DbtupDiskAlloc.cpp
+++ b/storage/ndb/src/kernel/blocks/dbtup/DbtupDiskAlloc.cpp
@@ -75,7 +75,7 @@ Dbtup::dump_disk_alloc(Dbtup::Disk_alloc_info & alloc)
for(Uint32 i = 0; i<MAX_FREE_LIST; i++)
{
printf(" %d : ", i);
- Ptr<Page> ptr;
+ PagePtr ptr;
ArrayPool<Page> *pool= (ArrayPool<Page>*)&m_global_page_pool;
LocalDLList<Page> list(*pool, alloc.m_dirty_pages[i]);
for(list.first(ptr); !ptr.isNull(); list.next(ptr))
@@ -262,7 +262,7 @@ Dbtup::update_extent_pos(Disk_alloc_info& alloc,
}
void
-Dbtup::restart_setup_page(Disk_alloc_info& alloc, Ptr<Page> pagePtr)
+Dbtup::restart_setup_page(Disk_alloc_info& alloc, PagePtr pagePtr)
{
/**
* Link to extent, clear uncommitted_used_space
@@ -344,12 +344,15 @@ Dbtup::disk_page_prealloc(Signal* signal,
if (!alloc.m_dirty_pages[i].isEmpty())
{
ptrI= alloc.m_dirty_pages[i].firstItem;
- Ptr<GlobalPage> page;
- m_global_page_pool.getPtr(page, ptrI);
+ Ptr<GlobalPage> gpage;
+ m_global_page_pool.getPtr(gpage, ptrI);
- disk_page_prealloc_dirty_page(alloc, *(PagePtr*)&page, i, sz);
- key->m_page_no= ((Page*)page.p)->m_page_no;
- key->m_file_no= ((Page*)page.p)->m_file_no;
+ PagePtr tmp;
+ tmp.i = gpage.i;
+ tmp.p = reinterpret_cast<Page*>(gpage.p);
+ disk_page_prealloc_dirty_page(alloc, tmp, i, sz);
+ key->m_page_no= tmp.p->m_page_no;
+ key->m_file_no= tmp.p->m_file_no;
if (DBG_DISK)
ndbout << " found dirty page " << *key << endl;
return 0; // Page in memory
@@ -547,7 +550,7 @@ Dbtup::disk_page_prealloc(Signal* signal,
void
Dbtup::disk_page_prealloc_dirty_page(Disk_alloc_info & alloc,
- Ptr<Page> pagePtr,
+ PagePtr pagePtr,
Uint32 old_idx, Uint32 sz)
{
ddassert(pagePtr.p->list_index == old_idx);
@@ -638,7 +641,9 @@ Dbtup::disk_page_prealloc_callback(Signal* signal,
fragPtr.i= req.p->m_frag_ptr_i;
ptrCheckGuard(fragPtr, cnoOfFragrec, fragrecord);
- Ptr<Page> pagePtr = *(Ptr<Page>*)&gpage;
+ PagePtr pagePtr;
+ pagePtr.i = gpage.i;
+ pagePtr.p = reinterpret_cast<Page*>(gpage.p);
if (unlikely(pagePtr.p->m_restart_seq != globalData.m_restart_seq))
{
@@ -666,7 +671,9 @@ Dbtup::disk_page_prealloc_initial_callback(Signal*signal,
Ptr<GlobalPage> gpage;
m_global_page_pool.getPtr(gpage, page_id);
- Ptr<Page> pagePtr = *(Ptr<Page>*)&gpage;
+ PagePtr pagePtr;
+ pagePtr.i = gpage.i;
+ pagePtr.p = reinterpret_cast<Page*>(gpage.p);
Ptr<Fragrecord> fragPtr;
fragPtr.i= req.p->m_frag_ptr_i;
@@ -705,7 +712,7 @@ void
Dbtup::disk_page_prealloc_callback_common(Signal* signal,
Ptr<Page_request> req,
Ptr<Fragrecord> fragPtr,
- Ptr<Page> pagePtr)
+ PagePtr pagePtr)
{
/**
* 1) remove page request from Disk_alloc_info.m_page_requests
@@ -736,7 +743,7 @@ Dbtup::disk_page_prealloc_callback_common(Signal* signal,
*/
ArrayPool<Page> *cheat_pool= (ArrayPool<Page>*)&m_global_page_pool;
LocalDLList<Page> list(* cheat_pool, alloc.m_dirty_pages[new_idx]);
- list.add(*(Ptr<Page>*)&pagePtr);
+ list.add(pagePtr);
pagePtr.p->uncommitted_used_space = real_used;
pagePtr.p->list_index = new_idx;
@@ -765,7 +772,7 @@ Dbtup::disk_page_prealloc_callback_common(Signal* signal,
}
void
-Dbtup::disk_page_set_dirty(Ptr<Page> pagePtr)
+Dbtup::disk_page_set_dirty(PagePtr pagePtr)
{
Uint32 idx = pagePtr.p->list_index;
if ((idx & 0x8000) == 0)
@@ -833,7 +840,9 @@ Dbtup::disk_page_unmap_callback(Uint32 page_id, Uint32 dirty_count)
{
Ptr<GlobalPage> gpage;
m_global_page_pool.getPtr(gpage, page_id);
- PagePtr pagePtr= *(PagePtr*)&gpage;
+ PagePtr pagePtr;
+ pagePtr.i = gpage.i;
+ pagePtr.p = reinterpret_cast<Page*>(gpage.p);
Uint32 type = pagePtr.p->m_page_header.m_page_type;
if (unlikely((type != File_formats::PT_Tup_fixsize_page &&
@@ -1028,10 +1037,13 @@ Dbtup::disk_page_abort_prealloc(Signal *signal, Fragrecord* fragPtrP,
case -1:
break;
default:
- Ptr<GlobalPage> page;
- m_global_page_pool.getPtr(page, (Uint32)res);
- disk_page_abort_prealloc_callback_1(signal, fragPtrP, *(PagePtr*)&page,
- sz);
+ Ptr<GlobalPage> gpage;
+ m_global_page_pool.getPtr(gpage, (Uint32)res);
+ PagePtr pagePtr;
+ pagePtr.i = gpage.i;
+ pagePtr.p = reinterpret_cast<Page*>(gpage.p);
+
+ disk_page_abort_prealloc_callback_1(signal, fragPtrP, pagePtr, sz);
}
}
@@ -1044,8 +1056,10 @@ Dbtup::disk_page_abort_prealloc_callback(Signal* signal,
Ptr<GlobalPage> gpage;
m_global_page_pool.getPtr(gpage, page_id);
- PagePtr pagePtr= *(PagePtr*)&gpage;
-
+ PagePtr pagePtr;
+ pagePtr.i = gpage.i;
+ pagePtr.p = reinterpret_cast<Page*>(gpage.p);
+
Ptr<Tablerec> tabPtr;
tabPtr.i= pagePtr.p->m_table_id;
ptrCheckGuard(tabPtr, cnoOfTablerec, tablerec);
@@ -1308,7 +1322,9 @@ Dbtup::disk_restart_undo_callback(Signal* signal,
jamEntry();
Ptr<GlobalPage> gpage;
m_global_page_pool.getPtr(gpage, page_id);
- Ptr<Page> pagePtr = *(Ptr<Page>*)&gpage;
+ PagePtr pagePtr;
+ pagePtr.i = gpage.i;
+ pagePtr.p = reinterpret_cast<Page*>(gpage.p);
Apply_undo* undo = &f_undo;
diff --git a/storage/ndb/src/kernel/blocks/dbtup/DbtupExecQuery.cpp b/storage/ndb/src/kernel/blocks/dbtup/DbtupExecQuery.cpp
index 3118164badd..d9710cc2549 100644
--- a/storage/ndb/src/kernel/blocks/dbtup/DbtupExecQuery.cpp
+++ b/storage/ndb/src/kernel/blocks/dbtup/DbtupExecQuery.cpp
@@ -1039,22 +1039,19 @@ int Dbtup::handleUpdateReq(Signal* signal,
tup_version= (tup_version + 1) & ZTUP_VERSION_MASK;
operPtrP->tupVersion= tup_version;
- int retValue;
if (!req_struct->interpreted_exec) {
jam();
- retValue= updateAttributes(req_struct,
- &cinBuffer[0],
- req_struct->attrinfo_len);
+ int retValue = updateAttributes(req_struct,
+ &cinBuffer[0],
+ req_struct->attrinfo_len);
+ if (unlikely(retValue == -1))
+ goto error;
} else {
jam();
if (unlikely(interpreterStartLab(signal, req_struct) == -1))
return -1;
}
- if (retValue == -1) {
- goto error;
- }
-
if (regTabPtr->need_shrink())
{
shrink_tuple(req_struct, sizes+2, regTabPtr, disk);
@@ -1073,7 +1070,7 @@ int Dbtup::handleUpdateReq(Signal* signal,
jam();
setChecksum(req_struct->m_tuple_ptr, regTabPtr);
}
- return retValue;
+ return 0;
error:
tupkeyErrorLab(signal);
diff --git a/storage/ndb/src/kernel/vm/Pool.hpp b/storage/ndb/src/kernel/vm/Pool.hpp
index 70fcdf8b56a..fe3a50e127b 100644
--- a/storage/ndb/src/kernel/vm/Pool.hpp
+++ b/storage/ndb/src/kernel/vm/Pool.hpp
@@ -305,7 +305,11 @@ inline
bool
RecordPool<T, P>::seize(Ptr<T> & ptr)
{
- return m_pool.seize(*(Ptr<void>*)&ptr);
+ Ptr<void> tmp;
+ bool ret = m_pool.seize(tmp);
+ ptr.i = tmp.i;
+ ptr.p = static_cast<T*>(tmp.p);
+ return ret;
}
template <typename T, typename P>