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.2071 06/02/06 21:31:34 jonas@stripped +6 -0
Merge perch.ndb.mysql.com:/home/jonas/src/51-new
into perch.ndb.mysql.com:/home/jonas/src/mysql-5.1-new
storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp
1.91 06/02/06 21:31:32 jonas@stripped +0 -0
SCCS merged
storage/ndb/test/ndbapi/test_event.cpp
1.18 06/02/06 21:30:34 jonas@stripped +0 -1
Auto merged
storage/ndb/src/kernel/blocks/dbtup/DbtupScan.cpp
1.9 06/02/06 21:30:34 jonas@stripped +0 -0
Auto merged
storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp
1.51 06/02/06 21:30:34 jonas@stripped +0 -1
Auto merged
sql/share/errmsg.txt
1.80 06/02/06 21:30:33 jonas@stripped +0 -0
Auto merged
sql/ha_ndbcluster.cc
1.260 06/02/06 21:30:33 jonas@stripped +0 -0
Auto merged
# 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: perch.ndb.mysql.com
# Root: /home/jonas/src/mysql-5.1-new/RESYNC
--- 1.79/sql/share/errmsg.txt 2006-02-02 21:25:37 +01:00
+++ 1.80/sql/share/errmsg.txt 2006-02-06 21:30:33 +01:00
@@ -5739,11 +5739,11 @@
eng "Incorrect %-.32s value: '%-.128s'"
ER_NO_PARTITION_FOR_GIVEN_VALUE
eng "Table has no partition for value %-.64s"
-ER_TABLESPACE_OPTION_ONLY_ONCE
+ER_FILEGROUP_OPTION_ONLY_ONCE
eng "It is not allowed to specify %s more than once"
-ER_CREATE_TABLESPACE_FAILED
+ER_CREATE_FILEGROUP_FAILED
eng "Failed to create %s"
-ER_DROP_TABLESPACE_FAILED
+ER_DROP_FILEGROUP_FAILED
eng "Failed to drop %s"
ER_TABLESPACE_AUTO_EXTEND_ERROR
eng "The handler doesn't support autoextend of tablespaces"
@@ -5751,7 +5751,7 @@
eng "A size parameter was incorrectly specified, either number or on the form
10M"
ER_SIZE_OVERFLOW_ERROR
eng "The size number was correct but we don't allow the digit part to be more
than 2 billion"
-ER_ALTER_TABLESPACE_FAILED
+ER_ALTER_FILEGROUP_FAILED
eng "Failed to alter: %s"
ER_BINLOG_ROW_LOGGING_FAILED
eng "Writing one row to the row-based binary log failed"
--- 1.90/storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp 2006-02-06 11:48:35 +01:00
+++ 1.91/storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp 2006-02-06 21:31:32 +01:00
@@ -10923,9 +10923,38 @@
tabptr.i = ref->tableId;
ptrCheckGuard(tabptr, ctabrecFileSize, tablerec);
- lcpPtr.p->lcpState = LcpRecord::LCP_COMPLETED;
- lcpPtr.p->m_acc.lcpLocstate = LcpLocRecord::ACC_COMPLETED;
- contChkpNextFragLab(signal);
+ 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;
+
+ 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);
+ }
}
/* --------------------------------------------------------------------------
@@ -10945,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)
@@ -11025,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;
/* ------------------------------------------------------------------------
@@ -11142,7 +11184,10 @@
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;
@@ -11157,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)
@@ -13600,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;
}
}
@@ -13654,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()
@@ -13681,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);
@@ -15781,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 ------- */
/* */
@@ -18130,12 +18160,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",
--- 1.259/sql/ha_ndbcluster.cc 2006-02-06 11:48:37 +01:00
+++ 1.260/sql/ha_ndbcluster.cc 2006-02-06 21:30:33 +01:00
@@ -9372,7 +9372,7 @@
switch (info->ts_cmd_type){
case (CREATE_TABLESPACE):
{
- error= ER_CREATE_TABLESPACE_FAILED;
+ error= ER_CREATE_FILEGROUP_FAILED;
NdbDictionary::Tablespace ndb_ts;
NdbDictionary::Datafile ndb_df;
@@ -9402,7 +9402,7 @@
}
case (ALTER_TABLESPACE):
{
- error= ER_ALTER_TABLESPACE_FAILED;
+ error= ER_ALTER_FILEGROUP_FAILED;
if (info->ts_alter_tablespace_type == ALTER_TABLESPACE_ADD_FILE)
{
NdbDictionary::Datafile ndb_df;
@@ -9431,7 +9431,7 @@
else
{
DBUG_PRINT("error", ("No such datafile"));
- my_error(ER_ALTER_TABLESPACE_FAILED, MYF(0), " NO SUCH FILE");
+ my_error(ER_ALTER_FILEGROUP_FAILED, MYF(0), " NO SUCH FILE");
DBUG_RETURN(1);
}
}
@@ -9446,7 +9446,7 @@
}
case (CREATE_LOGFILE_GROUP):
{
- error= ER_CREATE_TABLESPACE_FAILED;
+ error= ER_CREATE_FILEGROUP_FAILED;
NdbDictionary::LogfileGroup ndb_lg;
NdbDictionary::Undofile ndb_uf;
if (info->undo_file_name == NULL)
@@ -9479,7 +9479,7 @@
}
case (ALTER_LOGFILE_GROUP):
{
- error= ER_ALTER_TABLESPACE_FAILED;
+ error= ER_ALTER_FILEGROUP_FAILED;
if (info->undo_file_name == NULL)
{
/*
@@ -9501,7 +9501,7 @@
}
case (DROP_TABLESPACE):
{
- error= ER_DROP_TABLESPACE_FAILED;
+ error= ER_DROP_FILEGROUP_FAILED;
errmsg= "TABLESPACE";
if (dict->dropTablespace(dict->getTablespace(info->tablespace_name)))
{
@@ -9512,7 +9512,7 @@
}
case (DROP_LOGFILE_GROUP):
{
- error= ER_DROP_TABLESPACE_FAILED;
+ error= ER_DROP_FILEGROUP_FAILED;
errmsg= "LOGFILE GROUP";
if (dict->dropLogfileGroup(dict->getLogfileGroup(info->logfile_group_name)))
{
--- 1.8/storage/ndb/src/kernel/blocks/dbtup/DbtupScan.cpp 2006-02-02 12:23:19 +01:00
+++ 1.9/storage/ndb/src/kernel/blocks/dbtup/DbtupScan.cpp 2006-02-06 21:30:34 +01:00
@@ -896,6 +896,23 @@
void
Dbtup::scanClose(Signal* signal, ScanOpPtr scanPtr)
{
+ ScanOp& scan = *scanPtr.p;
+ ndbrequire(! (scan.m_bits & ScanOp::SCAN_LOCK_WAIT) && scan.m_accLockOp ==
RNIL);
+ // unlock all not unlocked by LQH
+ LocalDLFifoList<ScanLock> list(c_scanLockPool, scan.m_accLockOps);
+ ScanLockPtr lockPtr;
+ while (list.first(lockPtr)) {
+ jam();
+ AccLockReq* const lockReq = (AccLockReq*)signal->getDataPtrSend();
+ lockReq->returnCode = RNIL;
+ lockReq->requestInfo = AccLockReq::Abort;
+ lockReq->accOpPtr = lockPtr.p->m_accLockOp;
+ EXECUTE_DIRECT(DBACC, GSN_ACC_LOCKREQ, signal, AccLockReq::UndoSignalLength);
+ jamEntry();
+ ndbrequire(lockReq->returnCode == AccLockReq::Success);
+ list.release(lockPtr);
+ }
+ // send conf
NextScanConf* const conf = (NextScanConf*)signal->getDataPtrSend();
conf->scanPtr = scanPtr.p->m_userPtr;
conf->accOperationPtr = RNIL;
| Thread |
|---|
| • bk commit into 5.1 tree (jonas:1.2071) | jonas | 6 Feb |