TransPS.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 TransPS_HPP
  14. #define TransPS_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 <rep/storage/GCIContainerPS.hpp>
  23. #include <signaldata/RepImpl.hpp>
  24. #include <rep/SignalQueue.hpp>
  25. #include <rep/ExtSender.hpp>
  26. #include <rep/rep_version.hpp>
  27. extern "C" {
  28. static void * signalExecThread_C(void *);
  29. }
  30. /**
  31.  * @class TransPS
  32.  * @brief Responsible for REP-REP interface in Primary System role
  33.  */
  34. class TransPS {
  35. public:
  36.   /***************************************************************************
  37.    * Constructor / Destructor
  38.    ***************************************************************************/
  39.   TransPS(GCIContainerPS * gciContainer);
  40.   ~TransPS();
  41.   void init(TransporterFacade * tf, const char * connectString = NULL);
  42.   /***************************************************************************
  43.    * Public Methods
  44.    ***************************************************************************/
  45.   ExtSender *  getRepSender()                { return m_repSender; };
  46.   void         setGrepSender(ExtSender * es) { m_grepSender = es; };
  47. private: 
  48.   /***************************************************************************
  49.    * Private Methods
  50.    ***************************************************************************/
  51.   /**
  52.    *  SignalQueue executor thread
  53.    */
  54.   friend void * signalExecThread_C(void *);
  55.   void signalExecThreadRun();
  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.   void sendSignalRep(NdbApiSignal * s);
  62.   void sendSignalGrep(NdbApiSignal * s);
  63.   void sendFragmentedSignalRep(NdbApiSignal * s, LinearSectionPtr ptr[3],
  64.        Uint32 sections );
  65.   void sendFragmentedSignalGrep(NdbApiSignal * s, LinearSectionPtr ptr[3],
  66. Uint32 sections );
  67.   
  68.   /***************************************************************************
  69.    * Signal executors
  70.    ***************************************************************************/
  71.   void execREP_CLEAR_PS_GCIBUFFER_REQ(NdbApiSignal*);
  72.   void execREP_GET_GCI_REQ(NdbApiSignal*);
  73.   void execREP_GET_GCIBUFFER_REQ(NdbApiSignal*);
  74.   /***************************************************************************
  75.    * Ref signal senders
  76.    ***************************************************************************/
  77.   void sendREP_GET_GCI_REF(NdbApiSignal* signal, Uint32 nodeGrp,
  78.    Uint32 firstPSGCI, Uint32 lastPSGCI,
  79.    GrepError::Code err);
  80.   
  81.   void sendREP_CLEAR_PS_GCIBUFFER_REF(NdbApiSignal* signal, 
  82.       Uint32 firstGCI, Uint32 lastGCI,
  83.       Uint32 currentGCI, Uint32 nodeGrp,
  84.       GrepError::Code err);
  85.   void sendREP_GET_GCIBUFFER_REF(NdbApiSignal* signal,
  86.  Uint32 firstGCI, Uint32 lastGCI,
  87.  Uint32 nodeGrp,
  88.  GrepError::Code err);
  89.   /***************************************************************************
  90.    * Other Methods
  91.    ***************************************************************************/
  92.   void transferPages(Uint32 firstGCI, Uint32 lastGCI, Uint32 id, 
  93.      Uint32 nodeGrp, NdbApiSignal* signal);
  94.   /*************
  95.    * Variables
  96.    *************/
  97.   Uint32                  m_ownNodeId;          ///< NodeId of this node
  98.   Uint32                  m_ownBlockNo;         ///< BlockNo of this "block"
  99.   BlockReference          m_ownRef;             ///< Reference to this 
  100.   BlockReference          m_extRepRef;          ///< Node ref of REP at SS
  101.   ExtSender *             m_grepSender;         ///< Responsible send to GREP
  102.   ExtSender *             m_repSender;          ///< Responsible send to REP
  103.   
  104.   struct NdbThread *      m_signalExecThread;
  105.   class SignalQueue       m_signalRecvQueue;
  106.   GCIContainerPS *   m_gciContainerPS;     ///< Ref to gci container.
  107. };
  108. #endif