List:Commits« Previous MessageNext Message »
From:Jonas Oreland Date:April 16 2009 8:52am
Subject:bzr commit into mysql-5.1-telco-7.0 branch (jonas:2907) Bug#44291
View as plain text  
#At file:///home/jonas/src/telco-6.4/ based on revid:jonas@stripped

 2907 Jonas Oreland	2009-04-16
      ndb - bug#44291
        Node-state is not propageded to all blocks in ndbmtd
        This can cause
        - inconsistent REDO when doing graceful shutdown
        - crash in Dbtux, when restarting cluster, and some nodes
          needs to perform node-recovery during system-restart
      
        Possibly other problems...but they have not been identified

    M  storage/ndb/include/kernel/signaldata/NodeStateSignalData.hpp
    M  storage/ndb/src/kernel/blocks/LocalProxy.cpp
    M  storage/ndb/src/kernel/blocks/LocalProxy.hpp
=== modified file 'storage/ndb/include/kernel/signaldata/NodeStateSignalData.hpp'
--- a/storage/ndb/include/kernel/signaldata/NodeStateSignalData.hpp	2007-12-04 10:13:37 +0000
+++ b/storage/ndb/include/kernel/signaldata/NodeStateSignalData.hpp	2009-04-16 08:52:27 +0000
@@ -82,6 +82,7 @@ class ChangeNodeStateConf {
    * Reciver
    */
   friend class NdbCntr;
+  friend class LocalProxy;
   
 public:
   STATIC_CONST( SignalLength = 1 );

=== modified file 'storage/ndb/src/kernel/blocks/LocalProxy.cpp'
--- a/storage/ndb/src/kernel/blocks/LocalProxy.cpp	2009-03-16 17:05:07 +0000
+++ b/storage/ndb/src/kernel/blocks/LocalProxy.cpp	2009-04-16 08:52:27 +0000
@@ -58,6 +58,13 @@ LocalProxy::LocalProxy(BlockNumber block
   addRecSignal(GSN_INCL_NODEREQ, &LocalProxy::execINCL_NODEREQ);
   addRecSignal(GSN_INCL_NODECONF, &LocalProxy::execINCL_NODECONF);
 
+  // GSN_NODE_STATE_REP
+  addRecSignal(GSN_NODE_STATE_REP, &LocalProxy::execNODE_STATE_REP, true);
+
+  // GSN_CHANGE_NODE_STATE_REQ
+  addRecSignal(GSN_CHANGE_NODE_STATE_REQ, &LocalProxy::execCHANGE_NODE_STATE_REQ, true);
+  addRecSignal(GSN_CHANGE_NODE_STATE_CONF, &LocalProxy::execCHANGE_NODE_STATE_CONF);
+
   // GSN_DUMP_STATE_ORD
   addRecSignal(GSN_DUMP_STATE_ORD, &LocalProxy::execDUMP_STATE_ORD);
 
@@ -666,6 +673,78 @@ LocalProxy::sendINCL_NODECONF(Signal* si
   ssRelease<Ss_INCL_NODEREQ>(ssId);
 }
 
+// GSN_NODE_STATE_REP
+
+void
+LocalProxy::execNODE_STATE_REP(Signal* signal)
+{
+  Ss_NODE_STATE_REP& ss = ssSeize<Ss_NODE_STATE_REP>();
+  sendREQ(signal, ss);
+  SimulatedBlock::execNODE_STATE_REP(signal);
+  ssRelease<Ss_NODE_STATE_REP>(ss);
+}
+
+void
+LocalProxy::sendNODE_STATE_REP(Signal* signal, Uint32 ssId)
+{
+  Ss_NODE_STATE_REP& ss = ssFind<Ss_NODE_STATE_REP>(ssId);
+
+  sendSignal(workerRef(ss.m_worker), GSN_NODE_STATE_REP,
+             signal,NodeStateRep::SignalLength, JBB);
+}
+
+// GSN_CHANGE_NODE_STATE_REQ
+
+void
+LocalProxy::execCHANGE_NODE_STATE_REQ(Signal* signal)
+{
+  Ss_CHANGE_NODE_STATE_REQ& ss = ssSeize<Ss_CHANGE_NODE_STATE_REQ>(1);
+
+  ChangeNodeStateReq * req = (ChangeNodeStateReq*)signal->getDataPtrSend();
+  ss.m_req = *req;
+
+  sendREQ(signal, ss);
+}
+
+void
+LocalProxy::sendCHANGE_NODE_STATE_REQ(Signal* signal, Uint32 ssId)
+{
+  Ss_CHANGE_NODE_STATE_REQ& ss = ssFind<Ss_CHANGE_NODE_STATE_REQ>(ssId);
+
+  ChangeNodeStateReq * req = (ChangeNodeStateReq*)signal->getDataPtrSend();
+  req->senderRef = reference();
+
+  sendSignal(workerRef(ss.m_worker), GSN_CHANGE_NODE_STATE_REQ,
+             signal, ChangeNodeStateReq::SignalLength, JBB);
+}
+
+void
+LocalProxy::execCHANGE_NODE_STATE_CONF(Signal* signal)
+{
+  Ss_CHANGE_NODE_STATE_REQ& ss = ssFind<Ss_CHANGE_NODE_STATE_REQ>(1);
+
+  ChangeNodeStateConf * conf = (ChangeNodeStateConf*)signal->getDataPtrSend();
+  ndbrequire(conf->senderData == ss.m_req.senderData);
+  recvCONF(signal, ss);
+}
+
+void
+LocalProxy::sendCHANGE_NODE_STATE_CONF(Signal* signal, Uint32 ssId)
+{
+  Ss_CHANGE_NODE_STATE_REQ& ss = ssFind<Ss_CHANGE_NODE_STATE_REQ>(ssId);
+
+  if (!lastReply(ss))
+    return;
+
+  /**
+   * SimulatedBlock::execCHANGE_NODE_STATE_REQ will reply
+   */
+  ChangeNodeStateReq * req = (ChangeNodeStateReq*)signal->getDataPtrSend();
+  * req = ss.m_req;
+  SimulatedBlock::execCHANGE_NODE_STATE_REQ(signal);
+  ssRelease<Ss_CHANGE_NODE_STATE_REQ>(ssId);
+}
+
 // GSN_DUMP_STATE_ORD
 
 void

=== modified file 'storage/ndb/src/kernel/blocks/LocalProxy.hpp'
--- a/storage/ndb/src/kernel/blocks/LocalProxy.hpp	2009-03-16 17:05:07 +0000
+++ b/storage/ndb/src/kernel/blocks/LocalProxy.hpp	2009-04-16 08:52:27 +0000
@@ -24,6 +24,7 @@
 #include <signaldata/NdbSttor.hpp>
 #include <signaldata/ReadNodesConf.hpp>
 #include <signaldata/NodeFailRep.hpp>
+#include <signaldata/NodeStateSignalData.hpp>
 #include <signaldata/NFCompleteRep.hpp>
 #include <signaldata/CreateTrigImpl.hpp>
 #include <signaldata/DropTrigImpl.hpp>
@@ -434,6 +435,39 @@ protected:
   void execINCL_NODECONF(Signal*);
   void sendINCL_NODECONF(Signal*, Uint32 ssId);
 
+  // GSN_NODE_STATE_REP
+  struct Ss_NODE_STATE_REP : SsParallel {
+    Ss_NODE_STATE_REP() {
+      m_sendREQ = &LocalProxy::sendNODE_STATE_REP;
+      m_sendCONF = 0;
+    }
+    enum { poolSize = 1 };
+    static SsPool<Ss_NODE_STATE_REP>& pool(LocalProxy* proxy) {
+      return proxy->c_ss_NODE_STATE_REP;
+    }
+  };
+  SsPool<Ss_NODE_STATE_REP> c_ss_NODE_STATE_REP;
+  void execNODE_STATE_REP(Signal*);
+  void sendNODE_STATE_REP(Signal*, Uint32 ssId);
+
+  // GSN_CHANGE_NODE_STATE_REQ
+  struct Ss_CHANGE_NODE_STATE_REQ : SsParallel {
+    ChangeNodeStateReq m_req;
+    Ss_CHANGE_NODE_STATE_REQ() {
+      m_sendREQ = &LocalProxy::sendCHANGE_NODE_STATE_REQ;
+      m_sendCONF = &LocalProxy::sendCHANGE_NODE_STATE_CONF;
+    }
+    enum { poolSize = 1 };
+    static SsPool<Ss_CHANGE_NODE_STATE_REQ>& pool(LocalProxy* proxy) {
+      return proxy->c_ss_CHANGE_NODE_STATE_REQ;
+    }
+  };
+  SsPool<Ss_CHANGE_NODE_STATE_REQ> c_ss_CHANGE_NODE_STATE_REQ;
+  void execCHANGE_NODE_STATE_REQ(Signal*);
+  void sendCHANGE_NODE_STATE_REQ(Signal*, Uint32 ssId);
+  void execCHANGE_NODE_STATE_CONF(Signal*);
+  void sendCHANGE_NODE_STATE_CONF(Signal*, Uint32 ssId);
+
   // GSN_DUMP_STATE_ORD
   struct Ss_DUMP_STATE_ORD : SsParallel {
     Uint32 m_reqlength;


Attachment: [text/bzr-bundle] bzr/jonas@mysql.com-20090416085227-bua6o7t3id2j5aiw.bundle
Thread
bzr commit into mysql-5.1-telco-7.0 branch (jonas:2907) Bug#44291Jonas Oreland16 Apr