Loading storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp +2 −0 Original line number Diff line number Diff line Loading @@ -563,6 +563,8 @@ typedef Ptr<Fragoperrec> FragoperrecPtr; */ Page_request_list::Head m_page_requests[MAX_FREE_LIST]; DLList<Page>::Head m_unmap_pages; /** * Current extent */ Loading storage/ndb/src/kernel/blocks/dbtup/DbtupDiskAlloc.cpp +6 −0 Original line number Diff line number Diff line Loading @@ -956,7 +956,9 @@ Dbtup::disk_page_unmap_callback(Uint32 when, ArrayPool<Page> *pool= (ArrayPool<Page>*)&m_global_page_pool; LocalDLList<Page> list(*pool, alloc.m_dirty_pages[idx]); LocalDLList<Page> list2(*pool, alloc.m_unmap_pages); list.remove(pagePtr); list2.add(pagePtr); if (dirty_count == 0) { Loading Loading @@ -999,6 +1001,10 @@ Dbtup::disk_page_unmap_callback(Uint32 when, << " cnt: " << dirty_count << " " << (idx & ~0x8000) << endl; } ArrayPool<Page> *pool= (ArrayPool<Page>*)&m_global_page_pool; LocalDLList<Page> list(*pool, alloc.m_unmap_pages); list.remove(pagePtr); Tablespace_client tsman(0, c_tsman, fragPtr.p->fragTableId, fragPtr.p->fragmentId, Loading storage/ndb/src/kernel/blocks/dbtup/DbtupMeta.cpp +13 −0 Original line number Diff line number Diff line Loading @@ -1005,7 +1005,20 @@ Dbtup::drop_fragment_unmap_pages(Signal *signal, { if (tabPtr.p->m_no_of_disk_attributes) { jam(); Disk_alloc_info& alloc_info= fragPtr.p->m_disk_alloc_info; if (!alloc_info.m_unmap_pages.isEmpty()) { jam(); ndbout_c("waiting for unmape pages"); signal->theData[0] = ZUNMAP_PAGES; signal->theData[1] = tabPtr.i; signal->theData[2] = fragPtr.i; signal->theData[3] = pos; sendSignal(cownref, GSN_CONTINUEB, signal, 4, JBB); return; } while(alloc_info.m_dirty_pages[pos].isEmpty() && pos < MAX_FREE_LIST) pos++; Loading Loading
storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp +2 −0 Original line number Diff line number Diff line Loading @@ -563,6 +563,8 @@ typedef Ptr<Fragoperrec> FragoperrecPtr; */ Page_request_list::Head m_page_requests[MAX_FREE_LIST]; DLList<Page>::Head m_unmap_pages; /** * Current extent */ Loading
storage/ndb/src/kernel/blocks/dbtup/DbtupDiskAlloc.cpp +6 −0 Original line number Diff line number Diff line Loading @@ -956,7 +956,9 @@ Dbtup::disk_page_unmap_callback(Uint32 when, ArrayPool<Page> *pool= (ArrayPool<Page>*)&m_global_page_pool; LocalDLList<Page> list(*pool, alloc.m_dirty_pages[idx]); LocalDLList<Page> list2(*pool, alloc.m_unmap_pages); list.remove(pagePtr); list2.add(pagePtr); if (dirty_count == 0) { Loading Loading @@ -999,6 +1001,10 @@ Dbtup::disk_page_unmap_callback(Uint32 when, << " cnt: " << dirty_count << " " << (idx & ~0x8000) << endl; } ArrayPool<Page> *pool= (ArrayPool<Page>*)&m_global_page_pool; LocalDLList<Page> list(*pool, alloc.m_unmap_pages); list.remove(pagePtr); Tablespace_client tsman(0, c_tsman, fragPtr.p->fragTableId, fragPtr.p->fragmentId, Loading
storage/ndb/src/kernel/blocks/dbtup/DbtupMeta.cpp +13 −0 Original line number Diff line number Diff line Loading @@ -1005,7 +1005,20 @@ Dbtup::drop_fragment_unmap_pages(Signal *signal, { if (tabPtr.p->m_no_of_disk_attributes) { jam(); Disk_alloc_info& alloc_info= fragPtr.p->m_disk_alloc_info; if (!alloc_info.m_unmap_pages.isEmpty()) { jam(); ndbout_c("waiting for unmape pages"); signal->theData[0] = ZUNMAP_PAGES; signal->theData[1] = tabPtr.i; signal->theData[2] = fragPtr.i; signal->theData[3] = pos; sendSignal(cownref, GSN_CONTINUEB, signal, 4, JBB); return; } while(alloc_info.m_dirty_pages[pos].isEmpty() && pos < MAX_FREE_LIST) pos++; Loading