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

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 TransSS_HPP
  14. #define TransSS_HPP
  15. #include <NdbTick.h>
  16. #include <NdbMain.h>
  17. #include <NdbOut.hpp>
  18. #include <NdbSleep.h>
  19. #include <TransporterDefinitions.hpp>
  20. #include <TransporterFacade.hpp>
  21. #include <ClusterMgr.hpp>
  22. #include <API.hpp>
  23. #include <rep/storage/GCIContainer.hpp>
  24. #include <rep/SignalQueue.hpp>
  25. #include <rep/ExtSender.hpp>
  26. #include <rep/state/RepState.hpp>
  27. extern "C" {
  28. static void *  signalExecThread_C(void *);
  29. }
  30. /**
  31.  * @class TransSS
  32.  * @brief Responsible for REP-REP interface in Standby System role
  33.  */
  34. class TransSS {
  35. public:
  36.   /***************************************************************************
  37.    * Constructor / Destructor / Init
  38.    ***************************************************************************/
  39.   TransSS(GCIContainer * gciContainer, RepState * repState);
  40.   ~TransSS();
  41.    void init(const char * connectString = NULL);
  42.   /***************************************************************************
  43.    * Public Methods
  44.    ***************************************************************************/
  45.   ExtSender *  getRepSender()                { return m_repSender; };
  46.   TransporterFacade * getTransporterFacade() { return m_transporterFacade; };
  47. private:
  48.   /***************************************************************************
  49.    * Private Methods
  50.    ***************************************************************************/
  51.   friend void *  signalExecThread_C(void *);
  52.   void           signalExecThreadRun();   ///< SignalQueue executor thread
  53.   static void execSignal(void* executorObj, NdbApiSignal* signal, 
  54.  class LinearSectionPtr ptr[3]);
  55.   static void execNodeStatus(void* executorObj, NodeId, bool alive, 
  56.      bool nfCompleted);
  57.   
  58.   void sendSignalRep(NdbApiSignal * s);
  59.   /***************************************************************************
  60.    * Signal receivers
  61.    ***************************************************************************/
  62.   void execREP_GET_GCI_REQ(NdbApiSignal*);  
  63.   void execREP_GET_GCI_CONF(NdbApiSignal*);
  64.   void execREP_GET_GCI_REF(NdbApiSignal*);
  65.   void execREP_GET_GCIBUFFER_REQ(NdbApiSignal*);
  66.   void execREP_GET_GCIBUFFER_CONF(NdbApiSignal*);
  67.   void execREP_GET_GCIBUFFER_REF(NdbApiSignal*);
  68.   void execGREP_SUB_REMOVE_CONF(NdbApiSignal *);
  69.   void execGREP_SUB_REMOVE_REF(NdbApiSignal *);
  70.   void execREP_INSERT_GCIBUFFER_REQ(NdbApiSignal*);
  71.   void execREP_INSERT_GCIBUFFER_CONF(NdbApiSignal*);
  72.   void execREP_INSERT_GCIBUFFER_REF(NdbApiSignal*);
  73.   void execREP_DATA_PAGE(NdbApiSignal* signal, LinearSectionPtr ptr[3]);
  74.   void execREP_GCIBUFFER_ACC_REP(NdbApiSignal*);
  75.   void execREP_DISCONNECT_REP(NdbApiSignal*);
  76.   void execREP_CLEAR_PS_GCIBUFFER_CONF(NdbApiSignal*);
  77.   void execREP_CLEAR_PS_GCIBUFFER_REF(NdbApiSignal*);
  78.   void execGREP_SUB_SYNC_CONF(NdbApiSignal*);
  79.   void execGREP_SUB_SYNC_REF(NdbApiSignal*);
  80.   /***************************************************************************
  81.    * Signal receivers : Subscriptions
  82.    ***************************************************************************/
  83.   void execGREP_CREATE_SUBID_CONF(NdbApiSignal*);
  84.   void execGREP_CREATE_SUBID_REF(NdbApiSignal*);
  85.   void execGREP_SUB_CREATE_CONF(NdbApiSignal*);
  86.   void execGREP_SUB_CREATE_REF(NdbApiSignal*);
  87.   void execGREP_SUB_START_CONF(NdbApiSignal*);
  88.   void execGREP_SUB_START_REF(NdbApiSignal*);
  89.   /***************************************************************************
  90.    * Ref signal senders
  91.    ***************************************************************************/
  92.   void sendREP_GET_GCI_REF(NdbApiSignal* signal, Uint32 nodeGrp,
  93.    Uint32 firstSSGCI, Uint32 lastSSGCI,
  94.    GrepError::Code err);
  95.   
  96.   void sendREP_GET_GCIBUFFER_REF(NdbApiSignal* signal,
  97.  Uint32 firstGCI, Uint32 lastGCI,
  98.  Uint32 nodeGrp, GrepError::Code err);
  99.   /***************************************************************************
  100.    * Private Variables
  101.    ***************************************************************************/
  102.   RepState *              m_repState;
  103.   struct NdbThread *      m_signalExecThread;   ///< Signal Queue executor
  104.   class SignalQueue       m_signalRecvQueue;
  105.   ExtSender *             m_repSender;      ///< Obj responsible send to REP
  106.   Uint32                  m_ownNodeId;      ///< NodeId of this node
  107.   Uint32                  m_ownBlockNo;     ///< BlockNo of this "block"
  108.   BlockReference          m_ownRef;         ///< Reference to this 
  109.   GCIContainer *   m_gciContainer;       ///< Ref to gci container.
  110.   TransporterFacade *     m_transporterFacade;
  111. };
  112. #endif