List:Commits« Previous MessageNext Message »
From:Jonas Oreland Date:October 30 2008 10:55am
Subject:bzr push into mysql-5.1 branch (jonas:3029 to 3032)
View as plain text  
 3032 Jonas Oreland	2008-10-30
      ndb - allow reorg wo/ adding partitions
        (to make testing in mtr easier)
modified:
  storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp

 3031 Jonas Oreland	2008-10-30
      ndbmtd - micro optimization: lookup look-stat prior to owning lock
modified:
  storage/ndb/src/kernel/vm/mt.cpp

 3030 Jonas Oreland	2008-10-30
      ndb(mt)d - Fix TC sending to LQH incase of timeout or node-fail
               - Add sending fragment in LQH_TRANSCONF so that
                 take-over TC can address correct LQH-instances
modified:
  storage/ndb/include/kernel/signaldata/LqhTransConf.hpp
  storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp
  storage/ndb/src/kernel/blocks/dbtc/Dbtc.hpp
  storage/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp

 3029 Jonas Oreland	2008-10-29
      ndbmtd - add config parameters controlling #threads
modified:
  storage/ndb/include/kernel/kernel_config_parameters.h
  storage/ndb/include/mgmapi/mgmapi_config_parameters.h
  storage/ndb/src/kernel/main.cpp
  storage/ndb/src/kernel/vm/Configuration.cpp
  storage/ndb/src/mgmsrv/ConfigInfo.cpp

=== modified file 'storage/ndb/include/kernel/signaldata/LqhTransConf.hpp'
--- a/storage/ndb/include/kernel/signaldata/LqhTransConf.hpp	2008-08-23 06:32:32 +0000
+++ b/storage/ndb/include/kernel/signaldata/LqhTransConf.hpp	2008-10-30 09:43:50 +0000
@@ -36,7 +36,13 @@ class LqhTransConf {
 
   friend bool printLQH_TRANSCONF(FILE *, const Uint32 *, Uint32, Uint16);  
 public:
-  STATIC_CONST( SignalLength = 16 );
+  STATIC_CONST( SignalLength = 17 );
+
+  /**
+   * Upgrade
+   */
+  STATIC_CONST( SignalLength_GCI_LO = 16 );
+  STATIC_CONST( SignalLength_FRAG_ID = 17 );
 private:
 
   /**
@@ -76,6 +82,7 @@ private:
   Uint32 nextNodeId3;
   Uint32 tableId;
   Uint32 gci_lo;
+  Uint32 fragId;
 
   /**
    * Getters

=== modified file 'storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp'
--- a/storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp	2008-10-29 14:25:59 +0000
+++ b/storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp	2008-10-30 09:54:42 +0000
@@ -7534,7 +7534,7 @@ Dbdict::check_supported_add_fragment(Uin
   }
 
   Uint32 fragments = newdata[1];
-  if (fragments <= olddata[1])
+  if (fragments < olddata[1])
   {
     jam();
     return AlterTableRef::UnsupportedChange;

=== modified file 'storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp'
--- a/storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp	2008-10-09 19:17:11 +0000
+++ b/storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp	2008-10-30 09:43:50 +0000
@@ -18859,9 +18859,6 @@ void Dblqh::sendAborted(Signal* signal) 
  * ------------------------------------------------------------------------- */
 void Dblqh::sendLqhTransconf(Signal* signal, LqhTransConf::OperationStatus stat)
 {
-  /**
-   * wl4391_todo need to send instance key to take-over TC
-   */
   tcNodeFailptr.i = tcConnectptr.p->tcNodeFailrec;
   ptrCheckGuard(tcNodeFailptr, ctcNodeFailrecFileSize, tcNodeFailRecord);
 
@@ -18890,6 +18887,7 @@ void Dblqh::sendLqhTransconf(Signal* sig
   lqhTransConf->apiOpRec        = tcConnectptr.p->applOprec;
   lqhTransConf->tableId         = tcConnectptr.p->tableref;
   lqhTransConf->gci_lo          = tcConnectptr.p->gci_lo;
+  lqhTransConf->fragId          = tcConnectptr.p->fragmentid;
   sendSignal(tcNodeFailptr.p->newTcBlockref, GSN_LQH_TRANSCONF, 
 	     signal, LqhTransConf::SignalLength, JBB);
   tcNodeFailptr.p->tcRecNow = tcConnectptr.i + 1;

=== modified file 'storage/ndb/src/kernel/blocks/dbtc/Dbtc.hpp'
--- a/storage/ndb/src/kernel/blocks/dbtc/Dbtc.hpp	2008-10-05 07:14:21 +0000
+++ b/storage/ndb/src/kernel/blocks/dbtc/Dbtc.hpp	2008-10-30 09:43:50 +0000
@@ -1396,14 +1396,14 @@ private:
   void timeOutLoopStartFragLab(Signal* signal, Uint32 TscanConPtr);
   int  releaseAndAbort(Signal* signal);
   void findApiConnectFail(Signal* signal);
-  void findTcConnectFail(Signal* signal);
+  void findTcConnectFail(Signal* signal, Uint32 instanceKey);
   void initApiConnectFail(Signal* signal);
-  void initTcConnectFail(Signal* signal);
+  void initTcConnectFail(Signal* signal, Uint32 instanceKey);
   void initTcFail(Signal* signal);
   void releaseTakeOver(Signal* signal);
   void setupFailData(Signal* signal);
   void updateApiStateFail(Signal* signal);
-  void updateTcStateFail(Signal* signal);
+  void updateTcStateFail(Signal* signal, Uint32 instanceKey);
   void handleApiFailState(Signal* signal, UintR anApiConnectptr);
   void handleFailedApiNode(Signal* signal,
                            UintR aFailedNode,

=== modified file 'storage/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp'
--- a/storage/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp	2008-10-08 06:18:28 +0000
+++ b/storage/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp	2008-10-30 09:43:50 +0000
@@ -7150,7 +7150,8 @@ void Dbtc::sendAbortedAfterTimeout(Signa
 	     * We also update the timer to ensure we don't get time-out 
 	     * too early.
 	     *--------------------------------------------------------------*/
-            BlockReference TBRef = calcLqhBlockRef(hostptr.i);
+            Uint32 instanceKey = tcConnectptr.p->lqhInstanceKey;
+            BlockReference TBRef = numberToRef(DBLQH, instanceKey, hostptr.i);
             signal->theData[0] = tcConnectptr.i;
             signal->theData[1] = cownref;
             signal->theData[2] = apiConnectptr.p->transid[0];
@@ -7981,8 +7982,9 @@ void Dbtc::execLQH_TRANSCONF(Signal* sig
   tapplOprec   = lqhTransConf->apiOpRec;
   const Uint32 tableId = lqhTransConf->tableId;
   Uint32 gci_lo = lqhTransConf->gci_lo;
+  Uint32 fragId = lqhTransConf->fragId;
   if (ttransStatus == LqhTransConf::Committed && 
-      unlikely(signal->getLength() < LqhTransConf::SignalLength))
+      unlikely(signal->getLength() < LqhTransConf::SignalLength_GCI_LO))
   {
     jam();
     gci_lo = 0;
@@ -8023,9 +8025,23 @@ void Dbtc::execLQH_TRANSCONF(Signal* sig
     apiConnectptr.p->ndbapiConnect = tapplOprec;
   }
   
-  if (ttransStatus != LqhTransConf::Marker){
+  if (ttransStatus != LqhTransConf::Marker)
+  {
     jam();
-    findTcConnectFail(signal);
+
+    Uint32 instanceKey;
+
+    if (unlikely(signal->getLength() < LqhTransConf::SignalLength_FRAG_ID))
+    {
+      jam();
+      instanceKey = 0;
+    }
+    else
+    {
+      jam();
+      instanceKey = getInstanceKey(tableId, fragId);
+    }
+    findTcConnectFail(signal, instanceKey);
   }
 }//Dbtc::execLQH_TRANSCONF()
 
@@ -8478,7 +8494,8 @@ void Dbtc::toAbortHandlingLab(Signal* si
         ptrCheckGuard(hostptr, chostFilesize, hostRecord);
         if (hostptr.p->hostStatus == HS_ALIVE) {
           jam();
-          tblockref = calcLqhBlockRef(hostptr.i);
+          Uint32 instanceKey = tcConnectptr.p->lqhInstanceKey;
+          tblockref = numberToRef(DBLQH, instanceKey, hostptr.i);
           setApiConTimer(apiConnectptr.i, ctcTimer, __LINE__);
           tcConnectptr.p->tcConnectstate = OS_WAIT_ABORT_CONF;
           apiConnectptr.p->apiConnectstate = CS_WAIT_ABORT_CONF;
@@ -8897,7 +8914,7 @@ FAF_LOOP:
 /*----------------------------------------------------------*/
 /*       FIND THE TC CONNECT AND IF NOT FOUND ALLOCATE A NEW  */
 /*----------------------------------------------------------*/
-void Dbtc::findTcConnectFail(Signal* signal) 
+void Dbtc::findTcConnectFail(Signal* signal, Uint32 instanceKey) 
 {
   UintR tftfHashNumber;
 
@@ -8915,7 +8932,7 @@ void Dbtc::findTcConnectFail(Signal* sig
       linkTcInConnectionlist(signal);
       tcConnectptr.p->nextTcFailHash = ctcConnectFailHash[tftfHashNumber];
       ctcConnectFailHash[tftfHashNumber] = tcConnectptr.i;
-      initTcConnectFail(signal);
+      initTcConnectFail(signal, instanceKey);
       return;
     } else {
       ptrCheckGuard(tcConnectptr, ctcConnectFilesize, tcConnectRecord);
@@ -8923,7 +8940,7 @@ void Dbtc::findTcConnectFail(Signal* sig
         jam();  /* FRAGMENTID = TC_OPREC HERE, LOOP ANOTHER TURN */
         tcConnectptr.i = tcConnectptr.p->nextTcFailHash;
       } else {
-        updateTcStateFail(signal);
+        updateTcStateFail(signal, instanceKey);
         return;
       }//if
     }//if
@@ -9001,7 +9018,7 @@ void Dbtc::initApiConnectFail(Signal* si
 /*       INITIALISE AT TC CONNECT AT TAKE OVER WHEN ALLOCATING*/
 /*       THE TC CONNECT RECORD.                               */
 /*------------------------------------------------------------*/
-void Dbtc::initTcConnectFail(Signal* signal) 
+void Dbtc::initTcConnectFail(Signal* signal, Uint32 instanceKey) 
 {
   tcConnectptr.p->apiConnect = apiConnectptr.i;
   tcConnectptr.p->tcOprec = ttcOprec;
@@ -9013,7 +9030,8 @@ void Dbtc::initTcConnectFail(Signal* sig
   tcConnectptr.p->failData[treplicaNo] = ttransStatus;
   tcConnectptr.p->lastReplicaNo = LqhTransConf::getLastReplicaNo(treqinfo);
   tcConnectptr.p->dirtyOp = LqhTransConf::getDirtyFlag(treqinfo);
-  
+  tcConnectptr.p->lqhInstanceKey = instanceKey;
+
 }//Dbtc::initTcConnectFail()
 
 /*----------------------------------------------------------*/
@@ -9252,7 +9270,7 @@ void Dbtc::updateApiStateFail(Signal* si
 /*       WE ALSO NEED TO CHECK THAT THERE IS CONSISTENCY      */
 /*       BETWEEN THE DIFFERENT REPLICAS.                      */
 /*------------------------------------------------------------*/
-void Dbtc::updateTcStateFail(Signal* signal) 
+void Dbtc::updateTcStateFail(Signal* signal, Uint32 instanceKey) 
 {
   const Uint8 treplicaNo     = LqhTransConf::getReplicaNo(treqinfo);
   const Uint8 tlastReplicaNo = LqhTransConf::getLastReplicaNo(treqinfo);
@@ -9267,6 +9285,7 @@ void Dbtc::updateTcStateFail(Signal* sig
   
   regTcPtr->tcNodedata[treplicaNo] = tnodeid;
   regTcPtr->failData[treplicaNo] = ttransStatus;  
+  ndbrequire(regTcPtr->lqhInstanceKey == instanceKey)
 }//Dbtc::updateTcStateFail()
 
 void Dbtc::execTCGETOPSIZEREQ(Signal* signal) 

=== modified file 'storage/ndb/src/kernel/vm/mt.cpp'
--- a/storage/ndb/src/kernel/vm/mt.cpp	2008-10-28 11:12:13 +0000
+++ b/storage/ndb/src/kernel/vm/mt.cpp	2008-10-30 09:47:57 +0000
@@ -260,6 +260,7 @@ void
 lock_slow(struct thr_spin_lock* sl)
 {
   volatile unsigned* val = &sl->m_lock;
+  mt_lock_stat* s = lookup_lock(sl); // lookup before owning lock
 
 loop:
   Uint32 spins = 0;
@@ -271,7 +272,6 @@ loop:
   if (unlikely(xcng(val, 1) != 0))
     goto loop;
 
-  mt_lock_stat* s = lookup_lock(sl);
   if (s)
   {
     s->m_spin_count += spins;

Thread
bzr push into mysql-5.1 branch (jonas:3029 to 3032) Jonas Oreland30 Oct