NodeGroupInfo.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 NODE_GROUPINFO_HPP
  14. #define NODE_GROUPINFO_HPP
  15. #include <Vector.hpp>
  16. #include <NdbTick.h>
  17. #include <NdbMain.h>
  18. #include <NdbOut.hpp>
  19. //#include <NdbSleep.h>
  20. #include "NodeGroup.hpp"
  21. #include <rep/rep_version.hpp>
  22. /**
  23.  * @class NodeGroupInfo
  24.  * @brief Contains info about all node groups and their connectivity status
  25.  */
  26. class NodeGroupInfo {
  27. public:
  28.   NodeGroupInfo();
  29.   ~NodeGroupInfo();
  30.   
  31.   /**
  32.    * Add a node to a nodegroup together with the status of the node
  33.    * @param nodeId - the nodeId to add
  34.    * @param connected - true/false
  35.    * @param nodeGrp - the nodegroup to add this node to
  36.    */
  37.   void        addNodeToNodeGrp(Uint32 nodeId, bool connected, Uint32 nodeGrp);
  38.   /**
  39.    * Get the nodegroup that a node belongs to.
  40.    * @param nodeId - the nodeId to check wich nodegroup it belongs to
  41.    * @return the nodegroup
  42.    */
  43.   Uint32 findNodeGroup(Uint32 nodeId);
  44.   /**
  45.    * Get the first connected node in a node group
  46.    * @param nodegroup - the node group to get the node in.
  47.    * @return nodeId, 0 if there is no connected node in the nodegroup
  48.    */
  49.   Uint32 getFirstConnectedNode(Uint32 nodeGrp);
  50.   /**
  51.    * sets a nodeId in a nodeGroup as the primary node. If the 
  52.    * primary node fails, then a new node in the node group is chosen
  53.    * @param nodegroup - the node group to get the node in.
  54.    * @param nodeId, 0 if there is no connected node in the nodegroup
  55.    */
  56.   void         setPrimaryNode(Uint32 nodeGrp, Uint32 nodeId);
  57.   
  58.   /**
  59.    * gets the nodeId in the nodegroup of the primary node.
  60.    * @param nodegroup - the node group to get the node in.
  61.    * @return nodeId, 0 if there is no connected node in the nodegroup
  62.    */
  63.   Uint32        getPrimaryNode(Uint32 nodeGrp);
  64.   /**
  65.    * Checks if at least one node in the nodegroup is connected.
  66.    * @param nodeGrp - the nodegrp to check 
  67.    * @return true if >0 nodes are connected in the nodegroup
  68.    */
  69.   bool connectedNodeGrp(Uint32 nodeGrp);
  70.   /**
  71.    * Checks if a node is connected or not
  72.    * @param nodeId - the nodeId to check connectivity
  73.    * @return true if node is connected
  74.    */
  75.   bool isConnected(Uint32 nodeId);
  76.   /**
  77.    * Set if a node is connected or not
  78.    * @param nodeId - the nodeId to set the connect flag fory
  79.    * @param connected - true if connect false if disconnect
  80.    */
  81.   void setConnectStatus(Uint32 nodeId, bool connected);
  82.   /**
  83.    * Check if all nodes are connected in all nodegroups
  84.    * @return return true if ALL nodes are connected in ALL nodeGroups
  85.    */
  86.   bool fullyConnected();
  87.   /**
  88.    * Get the number of nodegroups
  89.    * @return the number of nodegroups.
  90.    */
  91.   Uint32 getNoOfNodeGroups() { return m_nodeGroupList.size();};
  92.   /**
  93.    * @class iterator
  94.    * The iterator class iterates over a nodegroup, returning nodeIds
  95.    * in that node group.
  96.    *   
  97.    * @code  
  98.    *    NodeGroupInfo::iterator * it;  
  99.    *    for(Uint32 i=0;i < m_nodeGroupInfo->getNoOfNodeGroups();i++) {
  100.    *       it = new NodeGroupInfo::iterator(i,m_nodeGroupInfo);
  101.    *       for(NodeConnectInfo * nci=it->first(); it->exists();nci=it->next())
  102.    *           ndbout_c("Iterating: %d", nci->nodeId);
  103.    *       
  104.    *    }
  105.    * @end code
  106.    */
  107.   class iterator {
  108.   public:
  109.     iterator(Uint32 nodeGrp, NodeGroupInfo * ngi);
  110.     NodeConnectInfo * first();  ///< @return nodeConnectInfo* if exists.
  111. ///< (NULL if no more nodes exists)
  112.     NodeConnectInfo * next();  ///< @return nodeConnectInfo* if exists.
  113. ///< (NULL if no more nodes exists)
  114.     bool exists();      ///< @return true if another nodeId exists (for next())
  115.   private:
  116.     Uint32             m_iterator;
  117.     const Vector<NodeConnectInfo *> * m_nodeList;
  118.   };
  119.   friend class NodeGroupInfo::iterator;
  120.   
  121. private:
  122.   bool existsNodeGroup(Uint32 nodeGrp, Uint32 * pos);
  123.   
  124.   Vector<NodeGroup *> m_nodeGroupList;
  125. };
  126. #endif