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

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 CLUSTER_CONNECTION_IMPL_HPP
  14. #define CLUSTER_CONNECTION_IMPL_HPP
  15. #include <ndb_cluster_connection.hpp>
  16. #include <Vector.hpp>
  17. class TransporterFacade;
  18. class ConfigRetriever;
  19. class NdbThread;
  20. class ndb_mgm_configuration;
  21. struct Ndb_cluster_connection_node_iter {
  22.   Ndb_cluster_connection_node_iter() : scan_state(~0),
  23.        init_pos(0),
  24.        cur_pos(0) {};
  25.   Uint8 scan_state;
  26.   Uint8 init_pos;
  27.   Uint8 cur_pos;
  28. };
  29. extern "C" {
  30.   void* run_ndb_cluster_connection_connect_thread(void*);
  31. }
  32. class Ndb_cluster_connection_impl : public Ndb_cluster_connection
  33. {
  34.   Ndb_cluster_connection_impl(const char *connectstring);
  35.   ~Ndb_cluster_connection_impl();
  36.   void do_test();
  37.   void init_get_next_node(Ndb_cluster_connection_node_iter &iter);
  38.   Uint32 get_next_node(Ndb_cluster_connection_node_iter &iter);
  39. private:
  40.   friend class Ndb;
  41.   friend class NdbImpl;
  42.   friend void* run_ndb_cluster_connection_connect_thread(void*);
  43.   friend class Ndb_cluster_connection;
  44.   /**
  45.    * Structure containing values for guessing primary node
  46.    */
  47.   struct FragmentToNodeMap {
  48.     FragmentToNodeMap():
  49.       fragment2PrimaryNodeMap(0) {};
  50.     Uint32 kValue;
  51.     Uint32 hashValueMask;
  52.     Uint32 hashpointerValue;
  53.     Uint32 noOfFragments;
  54.     Uint32 *fragment2PrimaryNodeMap;
  55.     
  56.     void init(Uint32 noOfNodes, Uint8 nodeIds[]);
  57.     void release();
  58.   } fragmentToNodeMap;
  59.   
  60.   struct Node
  61.   {
  62.     Node(Uint32 _g= 0, Uint32 _id= 0) : this_group(0),
  63. next_group(0),
  64. group(_g),
  65. id(_id) {};
  66.     Uint32 this_group;
  67.     Uint32 next_group;
  68.     Uint32 group;
  69.     Uint32 id;
  70.   };
  71.   Vector<Node> m_all_nodes;
  72.   void init_nodes_vector(Uint32 nodeid, const ndb_mgm_configuration &config);
  73.   Uint32 guess_primary_node(const char * keyData, Uint32 keyLen);
  74.   void connect_thread();
  75.   
  76.   TransporterFacade *m_transporter_facade;
  77.   ConfigRetriever *m_config_retriever;
  78.   NdbThread *m_connect_thread;
  79.   int (*m_connect_callback)(void);
  80.   int m_optimized_node_selection;
  81. };
  82. #endif