List:Commits« Previous MessageNext Message »
From:jonas Date:February 6 2006 9:31pm
Subject:bk commit into 5.1 tree (jonas:1.2071)
View as plain text  
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)jonas6 Feb