List:Commits« Previous MessageNext Message »
From:knielsen Date:November 21 2007 7:33am
Subject:bk commit into 5.1 tree (knielsen:1.2628)
View as plain text  
Below is the list of changes that have just been committed into a local
5.1 repository of knielsen. When knielsen 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@stripped, 2007-11-21 08:33:01+01:00, knielsen@ymer.(none) +5 -0
  WL#1498: Multi-threaded ndbd.
  
  Remove cross-thread EXECUTE_DIRECT() in SUMA.

  storage/ndb/include/kernel/signaldata/CheckNodeGroups.hpp@stripped, 2007-11-21 08:32:56+01:00, knielsen@ymer.(none) +3 -1
    Remove cross-thread EXECUTE_DIRECT() in SUMA.

  storage/ndb/src/kernel/blocks/qmgr/QmgrMain.cpp@stripped, 2007-11-21 08:32:56+01:00, knielsen@ymer.(none) +1 -1
    Fix wrong signal length.

  storage/ndb/src/kernel/blocks/suma/Suma.cpp@stripped, 2007-11-21 08:32:57+01:00, knielsen@ymer.(none) +32 -20
    Remove cross-thread EXECUTE_DIRECT() in SUMA.

  storage/ndb/src/kernel/blocks/suma/Suma.hpp@stripped, 2007-11-21 08:32:57+01:00, knielsen@ymer.(none) +2 -1
    Remove cross-thread EXECUTE_DIRECT() in SUMA.

  storage/ndb/src/kernel/blocks/suma/SumaInit.cpp@stripped, 2007-11-21 08:32:57+01:00, knielsen@ymer.(none) +1 -0
    Remove cross-thread EXECUTE_DIRECT() in SUMA.

diff -Nrup a/storage/ndb/include/kernel/signaldata/CheckNodeGroups.hpp b/storage/ndb/include/kernel/signaldata/CheckNodeGroups.hpp
--- a/storage/ndb/include/kernel/signaldata/CheckNodeGroups.hpp	2007-01-06 01:21:21 +01:00
+++ b/storage/ndb/include/kernel/signaldata/CheckNodeGroups.hpp	2007-11-21 08:32:56 +01:00
@@ -41,6 +41,8 @@ public:
   NdbNodeBitmask mask;             /* set of NDB nodes, input for ArbitCheck,
         			   * output for GetNodeGroupMembers
 				   */
+  Uint32 senderData;            // Sender data, kept in return signal
+
   enum RequestType {
     Direct              = 0x1,
     ArbitCheck          = 0x2,
@@ -54,7 +56,7 @@ public:
     Partitioning = 3            // possible network partitioning
   };
 
-  STATIC_CONST( SignalLength = 3 + NdbNodeBitmask::Size );
+  STATIC_CONST( SignalLength = 4 + NdbNodeBitmask::Size );
 };
 
 #endif
diff -Nrup a/storage/ndb/src/kernel/blocks/qmgr/QmgrMain.cpp b/storage/ndb/src/kernel/blocks/qmgr/QmgrMain.cpp
--- a/storage/ndb/src/kernel/blocks/qmgr/QmgrMain.cpp	2007-11-16 14:13:49 +01:00
+++ b/storage/ndb/src/kernel/blocks/qmgr/QmgrMain.cpp	2007-11-21 08:32:56 +01:00
@@ -2581,7 +2581,7 @@ void Qmgr::execAPI_FAILREQ(Signal* signa
   {
     jam();
     // But send to SUMA anyway...
-    sendSignal(SUMA_REF, GSN_API_FAILREQ, signal, 2, JBA);
+    sendSignal(SUMA_REF, GSN_API_FAILREQ, signal, 1, JBA);
     return;
   }
 
diff -Nrup a/storage/ndb/src/kernel/blocks/suma/Suma.cpp b/storage/ndb/src/kernel/blocks/suma/Suma.cpp
--- a/storage/ndb/src/kernel/blocks/suma/Suma.cpp	2007-11-19 13:11:12 +01:00
+++ b/storage/ndb/src/kernel/blocks/suma/Suma.cpp	2007-11-21 08:32:57 +01:00
@@ -91,7 +91,7 @@ static const Uint32 MAX_CONCURRENT_GCP =
 #define PRINT_ONLY 0
 
 void
-Suma::getNodeGroupMembers(Signal* signal)
+Suma::getNodeGroupMembers(Signal* signal, Uint32 typeOfStart)
 {
   jam();
   DBUG_ENTER("Suma::getNodeGroupMembers");
@@ -100,14 +100,21 @@ Suma::getNodeGroupMembers(Signal* signal
    */
   CheckNodeGroups * sd = (CheckNodeGroups*)signal->getDataPtrSend();
   sd->blockRef = reference();
-  sd->requestType =
-    CheckNodeGroups::Direct |
-    CheckNodeGroups::GetNodeGroupMembers;
+  sd->requestType = CheckNodeGroups::GetNodeGroupMembers;
   sd->nodeId = getOwnNodeId();
-  EXECUTE_DIRECT(DBDIH, GSN_CHECKNODEGROUPSREQ, signal, 
-		 CheckNodeGroups::SignalLength);
+  sd->senderData = typeOfStart;
+  sendSignal(DBDIH_REF, GSN_CHECKNODEGROUPSREQ, signal,
+             CheckNodeGroups::SignalLength, JBB);
+  DBUG_VOID_RETURN;
+}
+
+void
+Suma::execCHECKNODEGROUPSCONF(Signal *signal)
+{
+  const CheckNodeGroups *sd = (const CheckNodeGroups *)signal->getDataPtrSend();
+  DBUG_ENTER("Suma::execCHECKNODEGROUPSCONF");
   jamEntry();
-  
+  Uint32 typeOfStart = sd->senderData;
   c_nodeGroup = sd->output;
   c_nodes_in_nodegroup_mask.assign(sd->mask);
   c_noNodesInGroup = c_nodes_in_nodegroup_mask.count();
@@ -147,6 +154,18 @@ Suma::getNodeGroupMembers(Signal* signal
   }
 #endif
 
+  if (typeOfStart == NodeState::ST_NODE_RESTART ||
+      typeOfStart == NodeState::ST_INITIAL_NODE_RESTART)
+  {
+    jam();
+    send_start_me_req(signal);
+  }
+  else
+  {
+    jam();
+    sendSTTORRY(signal);
+  }
+
   DBUG_VOID_RETURN;
 }
 
@@ -266,15 +285,8 @@ Suma::execSTTOR(Signal* signal) {
     }
 
     c_startup.m_restart_server_node_id = 0;    
-    getNodeGroupMembers(signal);
-    if (typeOfStart == NodeState::ST_NODE_RESTART ||
-	typeOfStart == NodeState::ST_INITIAL_NODE_RESTART)
-    {
-      jam();
-      
-      send_start_me_req(signal);
-      return;
-    }
+    getNodeGroupMembers(signal, typeOfStart);
+    DBUG_VOID_RETURN;
   }
   
   if(startphase == 7)
@@ -321,7 +333,7 @@ Suma::execSTTOR(Signal* signal) {
     if (ERROR_INSERTED(13030))
     {
       ndbout_c("Dont start handover");
-      return;
+      DBUG_VOID_RETURN;
     }
   }//if
   
@@ -331,7 +343,7 @@ Suma::execSTTOR(Signal* signal) {
      * Allow API's to connect
      */
     sendSTTORRY(signal);
-    return;
+    DBUG_VOID_RETURN;
   }
 
   if(startphase == 101)
@@ -344,7 +356,7 @@ Suma::execSTTOR(Signal* signal) {
        */
       c_startup.m_wait_handover= true;
       check_start_handover(signal);
-      return;
+      DBUG_VOID_RETURN;
     }
   }
   sendSTTORRY(signal);
@@ -778,7 +790,7 @@ Suma::execNODE_FAILREP(Signal* signal){
     {
       ndbout_c("Inserting API_FAILREQ node: %u", node);
       signal->theData[0] = node;
-      EXECUTE_DIRECT(QMGR, GSN_API_FAILREQ, signal, 1);
+      sendSignal(QMGR_REF, GSN_API_FAILREQ, signal, 1, JBA);
     }
   }
   
diff -Nrup a/storage/ndb/src/kernel/blocks/suma/Suma.hpp b/storage/ndb/src/kernel/blocks/suma/Suma.hpp
--- a/storage/ndb/src/kernel/blocks/suma/Suma.hpp	2007-11-19 13:11:13 +01:00
+++ b/storage/ndb/src/kernel/blocks/suma/Suma.hpp	2007-11-21 08:32:57 +01:00
@@ -95,6 +95,7 @@ public:
   void execDI_FCOUNTCONF(Signal* signal);
   void execDIGETPRIMREF(Signal* signal);
   void execDIGETPRIMCONF(Signal* signal);
+  void execCHECKNODEGROUPSCONF(Signal *signal);
 
   /**
    * Trigger administration
@@ -404,7 +405,7 @@ public:
    * Framework signals
    */
 
-  void getNodeGroupMembers(Signal* signal);
+  void getNodeGroupMembers(Signal* signal, Uint32 typeOfStart);
 
   void execREAD_CONFIG_REQ(Signal* signal);
 
diff -Nrup a/storage/ndb/src/kernel/blocks/suma/SumaInit.cpp b/storage/ndb/src/kernel/blocks/suma/SumaInit.cpp
--- a/storage/ndb/src/kernel/blocks/suma/SumaInit.cpp	2007-09-05 15:19:57 +02:00
+++ b/storage/ndb/src/kernel/blocks/suma/SumaInit.cpp	2007-11-21 08:32:57 +01:00
@@ -93,6 +93,7 @@ Suma::Suma(Block_context& ctx) :
   addRecSignal(GSN_DI_FCOUNTCONF, &Suma::execDI_FCOUNTCONF);
   addRecSignal(GSN_DI_FCOUNTREF, &Suma::execDI_FCOUNTREF);
   addRecSignal(GSN_DIGETPRIMCONF, &Suma::execDIGETPRIMCONF);
+  addRecSignal(GSN_CHECKNODEGROUPSCONF, &Suma::execCHECKNODEGROUPSCONF);
 
   /**
    * Scan interface
Thread
bk commit into 5.1 tree (knielsen:1.2628)knielsen21 Nov