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.2128 06/02/02 19:27:23 jonas@eel.(none) +1 -0
Merge localhost:src/51-new
into eel.(none):/home/jonas/src/mysql-5.1-new
storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp
1.89 06/02/02 19:27:18 jonas@eel.(none) +1 -9
merge
# 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-new/RESYNC
--- 1.88/storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp 2006-01-29 23:13:36 +01:00
+++ 1.89/storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp 2006-02-02 19:27:18 +01:00
@@ -930,9 +930,6 @@
jamEntry();
LqhFragReq * req = (LqhFragReq*)signal->getDataPtr();
- printLQH_FRAG_REQ(stdout, signal->getDataPtr(),
- signal->getLength(), number());
-
Uint32 retPtr = req->senderData;
BlockReference retRef = req->senderRef;
Uint32 fragId = req->fragmentId;
@@ -10889,7 +10886,6 @@
LcpRecord::FragOrd fragOrd;
fragOrd.fragPtrI = fragptr.i;
fragOrd.lcpFragOrd = * lcpFragOrd;
- ndbout_c("tabptr.p->tableStatus == Tablerec::PREP_DROP_TABLE_DONE -> sendLCP_FRAG_REP");
sendLCP_FRAG_REP(signal, fragOrd);
return;
}
@@ -10913,7 +10909,7 @@
jamEntry();
LcpPrepareRef* ref= (LcpPrepareRef*)signal->getDataPtr();
-
+
lcpPtr.i = ref->senderData;
ptrCheckGuard(lcpPtr, clcpFileSize, lcpRecord);
ndbrequire(lcpPtr.p->lcpState == LcpRecord::LCP_WAIT_FRAGID);
@@ -10927,13 +10923,38 @@
tabptr.i = ref->tableId;
ptrCheckGuard(tabptr, ctabrecFileSize, tablerec);
- lcpPtr.p->lcpState = LcpRecord::LCP_COMPLETED;
- lcpPtr.p->m_acc.lcpLocstate = LcpLocRecord::ACC_COMPLETED;
-
- ndbout_c("execLCP_PREPARE_REF tab: %d frag: %d err: %d",
- fragptr.p->tabRef, fragptr.p->fragId, ref->errorCode);
+ ndbrequire(lcpPtr.p->m_outstanding);
+ lcpPtr.p->m_outstanding--;
+
+ /**
+ * Only BACKUP is allowed to ref LCP_PREPARE
+ */
+ ndbrequire(refToBlock(signal->getSendersBlockRef()) == BACKUP);
+ lcpPtr.p->m_error = ref->errorCode;
- contChkpNextFragLab(signal);
+ if (lcpPtr.p->m_outstanding == 0)
+ {
+ jam();
+
+ if(lcpPtr.p->firstFragmentFlag)
+ {
+ jam();
+ LcpFragOrd *ord= (LcpFragOrd*)signal->getDataPtrSend();
+ lcpPtr.p->firstFragmentFlag= false;
+ *ord = lcpPtr.p->currentFragment.lcpFragOrd;
+ EXECUTE_DIRECT(PGMAN, GSN_LCP_FRAG_ORD, signal, signal->length());
+ jamEntry();
+
+ /**
+ * First fragment mean that last LCP is complete :-)
+ */
+ EXECUTE_DIRECT(TSMAN, GSN_END_LCP_REQ, signal, signal->length());
+ jamEntry();
+ }
+
+ lcpPtr.p->lcpState = LcpRecord::LCP_COMPLETED;
+ contChkpNextFragLab(signal);
+ }
}
/* --------------------------------------------------------------------------
@@ -10953,72 +10974,86 @@
fragptr.i = lcpPtr.p->currentFragment.fragPtrI;
c_fragment_pool.getPtr(fragptr);
-
- ndbrequire(conf->tableId == fragptr.p->tabRef);
- ndbrequire(conf->fragmentId == fragptr.p->fragId);
- lcpPtr.p->lcpState = LcpRecord::LCP_WAIT_HOLDOPS;
- lcpPtr.p->m_acc.lcpLocstate = LcpLocRecord::WAIT_LCPHOLDOP;
-
- lcpPtr.p->lcpState = LcpRecord::LCP_START_CHKP;
- lcpPtr.p->m_acc.lcpLocstate = LcpLocRecord::HOLDOP_READY;
+ if (refToBlock(signal->getSendersBlockRef()) != PGMAN)
+ {
+ ndbrequire(conf->tableId == fragptr.p->tabRef);
+ ndbrequire(conf->fragmentId == fragptr.p->fragId);
+ }
- /* ----------------------------------------------------------------------
- * UPDATE THE MAX_GCI_IN_LCP AND MAX_GCI_COMPLETED_IN_LCP NOW BEFORE
- * ACTIVATING THE FRAGMENT AGAIN.
- * --------------------------------------------------------------------- */
- ndbrequire(lcpPtr.p->currentFragment.lcpFragOrd.lcpNo < MAX_LCP_STORED);
- fragptr.p->maxGciInLcp = fragptr.p->newestGci;
- fragptr.p->maxGciCompletedInLcp = cnewestCompletedGci;
-
+ ndbrequire(lcpPtr.p->m_outstanding);
+ lcpPtr.p->m_outstanding--;
+ if (lcpPtr.p->m_outstanding == 0)
{
- LcpFragOrd *ord= (LcpFragOrd*)signal->getDataPtrSend();
- *ord = lcpPtr.p->currentFragment.lcpFragOrd;
- EXECUTE_DIRECT(LGMAN, GSN_LCP_FRAG_ORD, signal, signal->length());
- jamEntry();
-
- *ord = lcpPtr.p->currentFragment.lcpFragOrd;
- EXECUTE_DIRECT(DBTUP, GSN_LCP_FRAG_ORD, signal, signal->length());
- jamEntry();
+ jam();
if(lcpPtr.p->firstFragmentFlag)
{
jam();
+ LcpFragOrd *ord= (LcpFragOrd*)signal->getDataPtrSend();
lcpPtr.p->firstFragmentFlag= false;
*ord = lcpPtr.p->currentFragment.lcpFragOrd;
EXECUTE_DIRECT(PGMAN, GSN_LCP_FRAG_ORD, signal, signal->length());
jamEntry();
-
+
/**
* First fragment mean that last LCP is complete :-)
*/
EXECUTE_DIRECT(TSMAN, GSN_END_LCP_REQ, signal, signal->length());
jamEntry();
}
- }
+
+ if (lcpPtr.p->m_error)
+ {
+ jam();
- BackupFragmentReq* req= (BackupFragmentReq*)signal->getDataPtr();
- req->tableId = lcpPtr.p->currentFragment.lcpFragOrd.tableId;
- req->fragmentNo = 0;
- req->backupPtr = m_backup_ptr;
- req->backupId = lcpPtr.p->currentFragment.lcpFragOrd.lcpId;
- req->count = 0;
+ lcpPtr.p->lcpState = LcpRecord::LCP_COMPLETED;
+ contChkpNextFragLab(signal);
+ return;
+ }
+ lcpPtr.p->lcpState = LcpRecord::LCP_WAIT_HOLDOPS;
+ lcpPtr.p->lcpState = LcpRecord::LCP_START_CHKP;
+
+ /* ----------------------------------------------------------------------
+ * UPDATE THE MAX_GCI_IN_LCP AND MAX_GCI_COMPLETED_IN_LCP NOW BEFORE
+ * ACTIVATING THE FRAGMENT AGAIN.
+ * --------------------------------------------------------------------- */
+ ndbrequire(lcpPtr.p->currentFragment.lcpFragOrd.lcpNo < MAX_LCP_STORED);
+ fragptr.p->maxGciInLcp = fragptr.p->newestGci;
+ fragptr.p->maxGciCompletedInLcp = cnewestCompletedGci;
+
+ {
+ LcpFragOrd *ord= (LcpFragOrd*)signal->getDataPtrSend();
+ *ord = lcpPtr.p->currentFragment.lcpFragOrd;
+ EXECUTE_DIRECT(LGMAN, GSN_LCP_FRAG_ORD, signal, signal->length());
+ jamEntry();
+
+ *ord = lcpPtr.p->currentFragment.lcpFragOrd;
+ EXECUTE_DIRECT(DBTUP, GSN_LCP_FRAG_ORD, signal, signal->length());
+ jamEntry();
+ }
+
+ BackupFragmentReq* req= (BackupFragmentReq*)signal->getDataPtr();
+ req->tableId = lcpPtr.p->currentFragment.lcpFragOrd.tableId;
+ req->fragmentNo = 0;
+ req->backupPtr = m_backup_ptr;
+ req->backupId = lcpPtr.p->currentFragment.lcpFragOrd.lcpId;
+ req->count = 0;
+
#ifdef NDB_DEBUG_FULL
- if(ERROR_INSERTED(5904))
- {
+ if(ERROR_INSERTED(5904))
+ {
g_trace_lcp.sendSignal(BACKUP_REF, GSN_BACKUP_FRAGMENT_REQ, signal,
BackupFragmentReq::SignalLength, JBB);
- }
- else
+ }
+ else
#endif
- {
- sendSignal(BACKUP_REF, GSN_BACKUP_FRAGMENT_REQ, signal,
- BackupFragmentReq::SignalLength, JBB);
+ {
+ sendSignal(BACKUP_REF, GSN_BACKUP_FRAGMENT_REQ, signal,
+ BackupFragmentReq::SignalLength, JBB);
+ }
}
-
- lcpPtr.p->m_acc.lcpLocstate = LcpLocRecord::ACC_STARTED;
- lcpPtr.p->m_tup.lcpLocstate = LcpLocRecord::TUP_COMPLETED;
}
void Dblqh::execBACKUP_FRAGMENT_REF(Signal* signal)
@@ -11033,8 +11068,7 @@
lcpPtr.i = 0;
ptrCheckGuard(lcpPtr, clcpFileSize, lcpRecord);
- ndbrequire(lcpPtr.p->m_acc.lcpLocstate == LcpLocRecord::ACC_STARTED);
- lcpPtr.p->m_acc.lcpLocstate = LcpLocRecord::ACC_COMPLETED;
+ ndbrequire(lcpPtr.p->lcpState == LcpRecord::LCP_START_CHKP);
lcpPtr.p->lcpState = LcpRecord::LCP_COMPLETED;
/* ------------------------------------------------------------------------
@@ -11147,14 +11181,13 @@
/**
* Fake that the fragment is done
*/
- ndbout_c("tableStatus->contChkpNextFragLab tab: %d frag: %d",
- lcpPtr.p->currentFragment.lcpFragOrd.tableId,
- lcpPtr.p->currentFragment.lcpFragOrd.fragmentId);
-
contChkpNextFragLab(signal);
return;
}
-
+
+ lcpPtr.p->m_error = 0;
+ lcpPtr.p->m_outstanding = 1;
+
ndbrequire(tabPtr.p->tableStatus == Tablerec::TABLE_DEFINED);
lcpPtr.p->lcpState = LcpRecord::LCP_WAIT_FRAGID;
@@ -11169,6 +11202,13 @@
req->backupId = lcpPtr.p->currentFragment.lcpFragOrd.lcpId;
sendSignal(BACKUP_REF, GSN_LCP_PREPARE_REQ, signal,
LcpPrepareReq::SignalLength, JBB);
+
+ if (lcpPtr.p->firstFragmentFlag)
+ {
+ lcpPtr.p->m_outstanding++;
+ sendSignal(PGMAN_REF, GSN_LCP_PREPARE_REQ, signal,
+ LcpPrepareReq::SignalLength, JBB);
+ }
}//Dblqh::sendLCP_FRAGIDREQ()
void Dblqh::sendEMPTY_LCP_CONF(Signal* signal, bool idle)
@@ -13612,7 +13652,7 @@
lcpPtr.p->m_outstanding = 1;
signal->theData[0] = c_lcpId;
- sendSignal(TSMAN_REF, GSN_START_RECREQ, signal, 1, JBB);
+ sendSignal(LGMAN_REF, GSN_START_RECREQ, signal, 1, JBB);
return;
}
}
@@ -13666,7 +13706,7 @@
lcpPtr.p->m_outstanding = 1;
signal->theData[0] = c_lcpId;
- sendSignal(TSMAN_REF, GSN_START_RECREQ, signal, 1, JBB);
+ sendSignal(LGMAN_REF, GSN_START_RECREQ, signal, 1, JBB);
}//if
}//Dblqh::execSTART_RECREQ()
@@ -13693,17 +13733,18 @@
switch(refToBlock(sender)){
case TSMAN:
jam();
+ break;
+ case LGMAN:
+ jam();
lcpPtr.p->m_outstanding++;
signal->theData[0] = c_lcpId;
- sendSignal(LGMAN_REF, GSN_START_RECREQ, signal, 1, JBB);
+ sendSignal(TSMAN_REF, GSN_START_RECREQ, signal, 1, JBB);
return;
- case LGMAN:
- jam();
break;
default:
ndbrequire(false);
}
-
+
jam();
csrExecUndoLogState = EULS_COMPLETED;
c_lcp_complete_fragments.first(fragptr);
@@ -15793,29 +15834,6 @@
}//if
}//Dblqh::checkScanTcCompleted()
-/* ==========================================================================
- * === CHECK IF ALL PARTS OF A SYSTEM RESTART ON A FRAGMENT ARE COMPLETED ===
- *
- * SUBROUTINE SHORT NAME = CSC
- * ========================================================================= */
-void Dblqh::checkSrCompleted(Signal* signal)
-{
- terrorCode = ZOK;
- ptrGuard(lcpPtr);
- if(lcpPtr.p->m_acc.lcpLocstate != LcpLocRecord::SR_ACC_COMPLETED)
- {
- ndbrequire(lcpPtr.p->m_acc.lcpLocstate == LcpLocRecord::SR_ACC_STARTED);
- return;
- }
-
- if(lcpPtr.p->m_tup.lcpLocstate != LcpLocRecord::SR_TUP_COMPLETED)
- {
- ndbrequire(lcpPtr.p->m_tup.lcpLocstate == LcpLocRecord::SR_TUP_STARTED);
- return;
- }
- lcpPtr.p->lcpState = LcpRecord::LCP_SR_COMPLETED;
-}//Dblqh::checkSrCompleted()
-
/* ------------------------------------------------------------------------- */
/* ------ CLOSE A FILE DURING EXECUTION OF FRAGMENT LOG ------- */
/* */
@@ -18128,12 +18146,10 @@
// Print information about the current local checkpoint
TlcpPtr.i = 0;
ptrAss(TlcpPtr, lcpRecord);
- infoEvent(" lcpState=%d", TlcpPtr.p->lcpState);
- infoEvent(" lcpAccptr=%d lastFragmentFlag=%d",
- TlcpPtr.p->m_acc.lcpRef,
- TlcpPtr.p->lastFragmentFlag);
+ infoEvent(" lcpState=%d lastFragmentFlag=%d",
+ TlcpPtr.p->lcpState, TlcpPtr.p->lastFragmentFlag);
infoEvent("currentFragment.fragPtrI=%d",
- TlcpPtr.p->currentFragment.fragPtrI);
+ TlcpPtr.p->currentFragment.fragPtrI);
infoEvent("currentFragment.lcpFragOrd.tableId=%d",
TlcpPtr.p->currentFragment.lcpFragOrd.tableId);
infoEvent(" lcpQueued=%d reportEmpty=%d",
| Thread |
|---|
| • bk commit into 5.1 tree (jonas:1.2128) | jonas | 2 Feb |