#At file:///home/jonas/src/telco-6.4/ based on revid:magnus.blaudd@stripped
3105 Jonas Oreland 2009-10-09
ndb - bug#44195 - increase size of protected area, to make sure that multiple threads dont access data in parallel
modified:
storage/ndb/src/kernel/blocks/pgman.cpp
=== modified file 'storage/ndb/src/kernel/blocks/pgman.cpp'
--- a/storage/ndb/src/kernel/blocks/pgman.cpp 2009-05-27 15:21:45 +0000
+++ b/storage/ndb/src/kernel/blocks/pgman.cpp 2009-10-09 11:15:22 +0000
@@ -1266,14 +1266,17 @@ Pgman::process_lcp(Signal* signal)
if (m_lcp_curr_bucket == ~(Uint32)0 && !m_lcp_outstanding)
{
+ jam();
Ptr<Page_entry> ptr;
Page_sublist& pl = *m_page_sublist[Page_entry::SL_LOCKED];
if (pl.first(ptr))
{
+ jam();
process_lcp_locked(signal, ptr);
}
else
{
+ jam();
if (ERROR_INSERTED(11007))
{
ndbout << "No more writes..." << endl;
@@ -1298,19 +1301,17 @@ Pgman::process_lcp_locked(Signal* signal
{
CRASH_INSERTION(11006);
+ // protect from tsman parallel access
+ Tablespace_client tsman(signal, this, c_tsman, 0, 0, 0);
ptr.p->m_last_lcp = m_last_lcp;
if (ptr.p->m_state & Page_entry::DIRTY)
{
- {
- // protect copy-page
- Tablespace_client tsman(signal, this, c_tsman, 0, 0, 0);
- Ptr<GlobalPage> org, copy;
- ndbrequire(m_global_page_pool.seize(copy));
- m_global_page_pool.getPtr(org, ptr.p->m_real_page_i);
- memcpy(copy.p, org.p, sizeof(GlobalPage));
- ptr.p->m_copy_page_i = copy.i;
- }
-
+ Ptr<GlobalPage> org, copy;
+ ndbrequire(m_global_page_pool.seize(copy));
+ m_global_page_pool.getPtr(org, ptr.p->m_real_page_i);
+ memcpy(copy.p, org.p, sizeof(GlobalPage));
+ ptr.p->m_copy_page_i = copy.i;
+
m_lcp_outstanding++;
ptr.p->m_state |= Page_entry::LCP;
pageout(signal, ptr);
@@ -1328,16 +1329,12 @@ Pgman::process_lcp_locked(Signal* signal
void
Pgman::process_lcp_locked_fswriteconf(Signal* signal, Ptr<Page_entry> ptr)
{
- {
- // protect copy-page
- Tablespace_client tsman(signal, this, c_tsman, 0, 0, 0);
- Ptr<GlobalPage> org, copy;
- m_global_page_pool.getPtr(copy, ptr.p->m_copy_page_i);
- m_global_page_pool.getPtr(org, ptr.p->m_real_page_i);
- memcpy(org.p, copy.p, sizeof(GlobalPage));
- m_global_page_pool.release(copy);
- ptr.p->m_copy_page_i = RNIL;
- }
+ Ptr<GlobalPage> org, copy;
+ m_global_page_pool.getPtr(copy, ptr.p->m_copy_page_i);
+ m_global_page_pool.getPtr(org, ptr.p->m_real_page_i);
+ memcpy(org.p, copy.p, sizeof(GlobalPage));
+ m_global_page_pool.release(copy);
+ ptr.p->m_copy_page_i = RNIL;
Page_sublist& pl = *m_page_sublist[Page_entry::SL_LOCKED];
pl.next(ptr);
@@ -1486,13 +1483,18 @@ Pgman::fswriteconf(Signal* signal, Ptr<P
if (state & Page_entry::LCP)
{
+ jam();
+ state &= ~ Page_entry::LCP;
ndbrequire(m_lcp_outstanding);
m_lcp_outstanding--;
- state &= ~ Page_entry::LCP;
-
if (ptr.p->m_copy_page_i != RNIL)
{
+ jam();
+ Tablespace_client tsman(signal, this, c_tsman, 0, 0, 0);
process_lcp_locked_fswriteconf(signal, ptr);
+ set_page_state(ptr, state);
+ do_busy_loop(signal, true);
+ return;
}
}
Attachment: [text/bzr-bundle] bzr/jonas@mysql.com-20091009111522-fnpcq1p7jhpcn3en.bundle
| Thread |
|---|
| • bzr commit into mysql-5.1-telco-7.0 branch (jonas:3105) Bug#44195 | Jonas Oreland | 9 Oct |