ExtNDB.hpp
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:4k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright (C) 2003 MySQL AB
  2.    This program is free software; you can redistribute it and/or modify
  3.    it under the terms of the GNU General Public License as published by
  4.    the Free Software Foundation; either version 2 of the License, or
  5.    (at your option) any later version.
  6.    This program is distributed in the hope that it will be useful,
  7.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  8.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  9.    GNU General Public License for more details.
  10.    You should have received a copy of the GNU General Public License
  11.    along with this program; if not, write to the Free Software
  12.    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
  13. #ifndef EXTNDB_HPP
  14. #define EXTNDB_HPP
  15. #include <ndb_global.h>
  16. #include <TransporterDefinitions.hpp>
  17. #include <TransporterFacade.hpp>
  18. #include <ClusterMgr.hpp>
  19. #include <API.hpp>
  20. #include <Vector.hpp>
  21. #include <signaldata/RepImpl.hpp>
  22. #include <signaldata/GrepImpl.hpp>
  23. #include <rep/SignalQueue.hpp>
  24. #include <rep/ExtSender.hpp>
  25. #include <rep/storage/GCIContainerPS.hpp>
  26. #include "ExtAPI.hpp"
  27. extern "C" {
  28. static void * signalExecThread_C(void *);
  29. }
  30. /**
  31.  * @class ExtNDB
  32.  * @brief Class responsible for connection to primary system GREP
  33.  */
  34. class ExtNDB 
  35. {
  36. public:
  37.   /***************************************************************************
  38.    * Constructor / Destructor
  39.    ***************************************************************************/
  40.   ExtNDB(GCIContainerPS * gciContainer, ExtAPI * extAPI);
  41.   ~ExtNDB();
  42.   bool init(const char * connectString = NULL);
  43.   
  44.   /***************************************************************************
  45.    * Public Methods
  46.    ***************************************************************************/
  47.   void           setGrepSender(ExtSender * es) { m_grepSender = es; };
  48.   ExtSender *    getGrepSender() { return m_grepSender; };
  49.   void           setRepSender(ExtSender * es) { 
  50.     m_extAPI->setRepSender(es); m_repSender = es; };
  51.   void           signalErrorHandler(NdbApiSignal * s, Uint32 nodeId);
  52. private:
  53.   friend void * signalExecThread_C(void *);
  54.   void           signalExecThreadRun();
  55.   
  56.   static void    execSignal(void* signalSender, NdbApiSignal* signal, 
  57.     class LinearSectionPtr ptr[3]);
  58.   
  59.   static void    execNodeStatus(void* signalSender, NodeId, 
  60. bool alive, bool nfCompleted);
  61.   
  62.   void           sendSignalRep(NdbApiSignal *);
  63.   void           sendDisconnectRep(Uint32 nodeId);
  64.   /***************************************************************************
  65.    * Signal Executors
  66.    ***************************************************************************/
  67.   void execSUB_GCP_COMPLETE_REP(NdbApiSignal*);
  68.   void execGREP_SUB_CREATE_CONF(NdbApiSignal * signal);
  69.   void execGREP_SUB_REMOVE_CONF(NdbApiSignal * signal);
  70.   void execGREP_SUB_START_CONF(NdbApiSignal * signal);
  71.   void sendGREP_SUB_START_CONF(NdbApiSignal * signal, Uint32 gci);
  72.   void execSUB_TABLE_DATA(NdbApiSignal * signal,LinearSectionPtr ptr[3]);
  73.   void execSUB_META_DATA(NdbApiSignal * signal,LinearSectionPtr ptr[3]);
  74.   
  75.   // Signals that are actually just fowarded to REP
  76.   void execGREP_CREATE_SUBID_CONF(NdbApiSignal *);
  77.   /***************************************************************************
  78.    * Private Variables
  79.    ***************************************************************************/
  80.   struct NdbThread *      m_signalExecThread;
  81.   class SignalQueue       m_signalRecvQueue;
  82.   Uint32                  m_ownNodeId;          ///< NodeId of this node
  83.   Uint32                  m_ownBlockNo;         ///< BlockNo of this "block"
  84.   BlockReference          m_ownRef;             ///< Reference to this 
  85.   
  86.   ExtSender *             m_grepSender;         ///< Responsible send to GREP
  87.   ExtSender *             m_repSender;          ///< Responsible send to SS REP
  88.   
  89.   NodeGroupInfo *   m_nodeGroupInfo;
  90.   GCIContainerPS *   m_gciContainerPS; ///< Interface to GCICotainer
  91. ///< seen by PS
  92.   TransporterFacade *   m_transporterFacade;
  93.   bool                    m_doneSetGrepSender;    ///< Only done once
  94.   bool                    m_dataLogStarted;
  95.   Uint32                  m_subId;
  96.   Uint32                  m_subKey;
  97.   Uint32                  m_firstGCI;
  98.   ExtAPI *                m_extAPI;
  99. };
  100. #endif