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

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 REQUESTOR_HPP
  14. #define REQUESTOR_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 <GrepError.hpp>
  22. #include <rep/storage/GCIContainer.hpp>
  23. /**
  24.  * @todo Remove this dependency
  25.  */
  26. #include <rep/adapters/AppNDB.hpp>
  27. #include <rep/SignalQueue.hpp>
  28. #include <rep/ExtSender.hpp>
  29. /**
  30.  * @class  Requestor
  31.  * @brief  Connects to GREP Coordinator on the standby system
  32.  */
  33. class Requestor {
  34. public:
  35.   /***************************************************************************
  36.    * Constructor / Destructor / Init
  37.    ***************************************************************************/
  38.   Requestor(GCIContainer * gciContainer, AppNDB * applier, RepState * repSt);
  39.   ~Requestor();
  40.   bool init(const char * connectString = NULL);
  41.   
  42.   /***************************************************************************
  43.    * Public Methods
  44.    ***************************************************************************/
  45.   void         setRepSender(ExtSender * es) { m_repSender = es; };
  46. private:
  47.   static void *  signalExecThread_C(void *);  ///< SignalQueue executor thread
  48.   void           signalExecThreadRun();
  49.   static void execSignal(void* executorObj, NdbApiSignal* signal, 
  50.  class LinearSectionPtr ptr[3]);
  51.   static void execNodeStatus(void* executorObj, NodeId, bool alive, 
  52.      bool nfCompleted);
  53.   void sendSignalRep(NdbApiSignal *);
  54.   void sendSignalGrep(NdbApiSignal *);
  55.   void connectToNdb();
  56.   
  57.   /***************************************************************************
  58.    * Signal Executors
  59.    ***************************************************************************/
  60.   void execREP_GET_GCIBUFFER_CONF(NdbApiSignal*);
  61.   void execREP_CLEAR_GCIBUFFER_REP(NdbApiSignal*);
  62.   void execREP_INSERT_GCIBUFFER_REQ(NdbApiSignal*);
  63.   void execREP_CLEAR_SS_GCIBUFFER_REQ(NdbApiSignal*);
  64.   void execREP_DROP_TABLE_REQ(NdbApiSignal*);
  65.   /***************************************************************************
  66.    * Signal Executors 2
  67.    ***************************************************************************/
  68.   void execGREP_CREATE_SUBID_CONF(NdbApiSignal*);
  69.   void execGREP_CREATE_SUBID_REF(NdbApiSignal*);
  70.   void createSubscription(NdbApiSignal*);
  71.   void createSubscriptionId(NdbApiSignal*);
  72.   void execGREP_SUB_CREATE_CONF(NdbApiSignal*);
  73.   void execGREP_SUB_CREATE_REF(NdbApiSignal*);
  74.   void execGREP_SUB_START_CONF(NdbApiSignal*);
  75.   void execGREP_SUB_START_REF(NdbApiSignal*);
  76.   void removeSubscription(NdbApiSignal*);
  77.   void execGREP_SUB_REMOVE_REF(NdbApiSignal*);
  78.   void execGREP_SUB_SYNC_CONF(NdbApiSignal*);
  79.   void execGREP_SUB_SYNC_REF(NdbApiSignal*);
  80.   void execREP_CLEAR_SS_GCIBUFFER_CONF(NdbApiSignal*);
  81.   void execREP_CLEAR_SS_GCIBUFFER_REF(NdbApiSignal*);
  82.   void execREP_GET_GCIBUFFER_REF(NdbApiSignal*);
  83.   void execREP_DISCONNECT_REP(NdbApiSignal*);
  84.   /***************************************************************************
  85.    * Ref signal senders
  86.    ***************************************************************************/
  87.   void sendREP_INSERT_GCIBUFFER_REF(NdbApiSignal * signal,
  88.     Uint32 gci,
  89.     Uint32 nodeGrp,
  90.     GrepError::Code err);
  91.   void sendREP_CLEAR_SS_GCIBUFFER_REF(NdbApiSignal* signal, 
  92.       Uint32 firstGCI, 
  93.       Uint32 lastGCI,
  94.       Uint32 currentGCI,
  95.       Uint32 nodeGrp,
  96.       GrepError::Code err);
  97.   
  98.   /***************************************************************************
  99.    * Private Variables
  100.    ***************************************************************************/
  101.   class SignalQueue     m_signalRecvQueue;
  102.   struct NdbThread *        m_signalExecThread;
  103.   RepState *                m_repState;
  104.   Uint32                    m_ownNodeId;          ///< NodeId of this node
  105.   Uint32                    m_ownBlockNo;         ///< BlockNo of this "block"
  106.   BlockReference            m_ownRef;             ///< Reference to this 
  107.   TransporterFacade *     m_transporterFacade;
  108.   GCIContainer *     m_gciContainer;
  109.   AppNDB *     m_applier;
  110.   ExtSender *               m_repSender;
  111.   friend void startSubscription(void * cbObj, NdbApiSignal* signal, int type);
  112.   friend void scanSubscription(void * cbObj, NdbApiSignal* signal, int type);
  113.   friend RepState::FuncRequestCreateSubscriptionId requestCreateSubscriptionId;
  114.   friend RepState::FuncRequestCreateSubscription   requestCreateSubscription;
  115.   friend RepState::FuncRequestRemoveSubscription   requestRemoveSubscription;
  116.   friend RepState::FuncRequestTransfer       requestTransfer;
  117.   friend RepState::FuncRequestApply          requestApply;
  118.   friend RepState::FuncRequestDeleteSS       requestDeleteSS;
  119.   friend RepState::FuncRequestDeletePS       requestDeletePS;
  120.   friend RepState::FuncRequestStartMetaLog   requestStartMetaLog;
  121.   friend RepState::FuncRequestStartDataLog   requestStartDataLog;
  122.   friend RepState::FuncRequestStartMetaScan  requestStartMetaScan;
  123.   friend RepState::FuncRequestStartDataScan  requestStartDataScan;
  124.   friend RepState::FuncRequestEpochInfo      requestEpochInfo;
  125. };
  126. #endif