List:Commits« Previous MessageNext Message »
From:Jonas Oreland Date:November 11 2008 8:45am
Subject:bzr push into mysql-5.1 branch (jonas:3071 to 3072)
View as plain text  
 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

 3071 Jonas Oreland	2008-11-10
      ndb - fix segv on solaris-64-bit (gcc), due incorrect handling of union between
pointer and integer
modified:
  storage/ndb/src/mgmsrv/ConfigInfo.cpp
  storage/ndb/src/mgmsrv/ConfigInfo.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 push into mysql-5.1 branch (jonas:3071 to 3072) Jonas Oreland11 Nov