List:Commits« Previous MessageNext Message »
From:Jonas Oreland Date:November 11 2008 7:36am
Subject:bzr commit into mysql-5.1 branch (jonas:3072)
View as plain text  
#At file:///home/jonas/src/telco-6.4/

 3072 Jonas Oreland	2008-11-11
      ndb - fix testDict -n DictRestart
        1) fix random data being used in send_nf_complete_rep (spurious errors)
        2) pack/unpack filegroup so that they are identical on all nodes
        3) init SchemaEntry for tables not restored on restart
        4) make sure that all transactions are ended before starting next pass
modified:
  storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp
  storage/ndb/src/kernel/blocks/dbdict/Dbdict.hpp

=== modified file 'storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp'
--- a/storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp	2008-11-07 14:50:21 +0000
+++ b/storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp	2008-11-11 07:36:01 +0000
@@ -3304,6 +3304,7 @@ Dbdict::restart_checkSchemaStatusComplet
     return;
   }
   
+  ndbrequire(c_restartRecord.m_op_cnt == 0);
   ndbrequire(c_nodeRestart || c_initialNodeRestart);
   activateIndexes(signal, 0);
   return;
@@ -3478,8 +3479,10 @@ void Dbdict::checkSchemaStatus(Signal* s
         continue;
 
       if (masterState != SchemaFile::SF_IN_USE)
+      {
+        ownEntry->init();
         continue;
-
+      }
       /**
        * handle table(index) special as DIH has already copied
        *   table (using COPY_TABREQ)
@@ -3511,6 +3514,9 @@ void Dbdict::checkSchemaStatus(Signal* s
   else
   {
     jam();
+
+    c_restartRecord.m_op_cnt = 0;
+    
     TxHandlePtr tx_ptr;
     c_txHandleHash.getPtr(tx_ptr, c_restartRecord.m_tx_ptr_i);
 
@@ -3640,6 +3646,7 @@ Dbdict::restart_fromEndTrans(Signal* sig
 
   releaseTxHandle(tx_ptr);
 
+  ndbrequire(c_restartRecord.m_op_cnt == 0);
   c_restartRecord.activeTable++;
 
   seizeTxHandle(tx_ptr);
@@ -3705,10 +3712,35 @@ Dbdict::restartNextPass(Signal* signal)
       return;
     }
   }
+  else if (c_restartRecord.m_tx_ptr_i != RNIL)
+  {
+    /**
+     * Complete last trans
+     */
+    jam();
+    
+    c_restartRecord.m_pass--;    
+    c_restartRecord.m_op_cnt = 0;
+
+    Ptr<TxHandle> tx_ptr;
+    c_txHandleHash.getPtr(tx_ptr, c_restartRecord.m_tx_ptr_i);
+    
+    Callback c = { 
+      safe_cast(&Dbdict::restartEndPass_fromEndTrans),
+      tx_ptr.p->tx_key
+    };
+    tx_ptr.p->m_callback = c;
+    
+    Uint32 flags = 0;
+    endSchemaTrans(signal, tx_ptr, flags);
+    return;
+  }
   else
   {
     jam();
 
+    ndbrequire(c_restartRecord.m_op_cnt == 0);
+
     /**
      * Write schema file at-end of checkSchemaStatus
      */
@@ -4084,11 +4116,12 @@ void Dbdict::execAPI_FAILREQ(Signal* sig
 void Dbdict::execNODE_FAILREP(Signal* signal) 
 {
   jamEntry();
-  NodeFailRep * const nodeFail = (NodeFailRep *)&signal->theData[0];
+  NodeFailRep nodeFailRep = *(NodeFailRep *)&signal->theData[0];
+  NodeFailRep * nodeFail = &nodeFailRep;
   NodeRecordPtr ownNodePtr;
 
   c_nodes.getPtr(ownNodePtr, getOwnNodeId());
-  c_failureNr    = nodeFail->failNo;
+  c_failureNr  = nodeFail->failNo;
   const Uint32 numberOfFailedNodes  = nodeFail->noOfNodes;
   const bool masterFailed = (c_masterNodeId != nodeFail->masterNodeId);
   c_masterNodeId = nodeFail->masterNodeId;
@@ -4110,20 +4143,19 @@ void Dbdict::execNODE_FAILREP(Signal* si
      */
     jam();
     ownNodePtr.p->nodeState = NodeRecord::NDB_MASTER_TAKEOVER;
-    ownNodePtr.p->nodeFailRep = *nodeFail;
+    ownNodePtr.p->nodeFailRep = nodeFailRep;
     infoEvent("Node %u taking over as DICT master", c_masterNodeId);
     handle_master_takeover(signal);
     return;
   }
 
-  send_nf_complete_rep(signal);
+  send_nf_complete_rep(signal, &nodeFailRep);
   return;
 }//execNODE_FAILREP()
 
-void Dbdict::send_nf_complete_rep(Signal* signal)
+void Dbdict::send_nf_complete_rep(Signal* signal, const NodeFailRep* nodeFail)
 {
   jam();
-  NodeFailRep * const nodeFail = (NodeFailRep *)&signal->theData[0];
   Uint32 theFailedNodes[NdbNodeBitmask::Size];
   memcpy(theFailedNodes, nodeFail->theNodes, sizeof(theFailedNodes));
   NdbNodeBitmask tmp;
@@ -9093,8 +9125,8 @@ void Dbdict::execGET_TABINFOREQ(Signal* 
     jam();
     // see own trans always
   }
-  else  if (refToBlock(req->senderRef) != DBUTIL && /** XXX cheat */
-            refToBlock(req->senderRef) != SUMA)
+  else if (refToBlock(req->senderRef) != DBUTIL && /** XXX cheat */
+           refToBlock(req->senderRef) != SUMA)
   {
     Uint32 err;
     if ((err = check_read_obj(objEntry)))
@@ -17471,9 +17503,7 @@ void Dbdict::check_takeover_replies(Sign
       No slave found any pending transactions, we are done
      */
     jam();
-    memcpy(signal->theData, &masterNodePtr.p->nodeFailRep, 
-           sizeof(masterNodePtr.p->nodeFailRep));
-    send_nf_complete_rep(signal);
+    send_nf_complete_rep(signal, &masterNodePtr.p->nodeFailRep);
     return;
   }
   /*
@@ -19213,6 +19243,17 @@ Dbdict::createFilegroup_parse(Signal* si
   obj_ptr.p->m_type = fg.FilegroupType;
   obj_ptr.p->m_ref_count = 0;
 
+  if (master)
+  {
+    jam();
+    releaseSections(handle);
+    SimplePropertiesSectionWriter w(*this);
+    packFilegroupIntoPages(w, fg_ptr, 0, 0);
+    w.getPtr(objInfoPtr);
+    handle.m_ptr[0] = objInfoPtr;
+    handle.m_cnt = 1;
+  }
+
   {
     SchemaFile::TableEntry te; te.init();
     te.m_tableState = SchemaFile::SF_CREATE;
@@ -25141,9 +25182,7 @@ send_node_fail_rep:
     /*
       Continue with NODE_FAILREP
     */
-    NodeFailRep * const nodeFailRep = (NodeFailRep *)&signal->theData[0];
-    *nodeFailRep = ownNodePtr.p->nodeFailRep;
-    send_nf_complete_rep(signal);
+    send_nf_complete_rep(signal, &ownNodePtr.p->nodeFailRep);
   }
 }
 

=== modified file 'storage/ndb/src/kernel/blocks/dbdict/Dbdict.hpp'
--- a/storage/ndb/src/kernel/blocks/dbdict/Dbdict.hpp	2008-10-29 14:25:59 +0000
+++ b/storage/ndb/src/kernel/blocks/dbdict/Dbdict.hpp	2008-11-11 07:36:01 +0000
@@ -729,7 +729,7 @@ private:
   void execTC_SCHVERCONF(Signal* signal);
   void execNODE_FAILREP(Signal* signal);
 
-  void send_nf_complete_rep(Signal* signal);
+  void send_nf_complete_rep(Signal* signal, const NodeFailRep*);
 
   void execINCL_NODEREQ(Signal* signal);
   void execAPI_FAILREQ(Signal* signal);

Thread
bzr commit into mysql-5.1 branch (jonas:3072) Jonas Oreland11 Nov