SWC-DB  v0.5.12 C++ documentations
SWC-DB© (Super Wide Column Database) - High Performance Scalable Database (https://github.com/kashirin-alex/swc-db)
Groups.h
Go to the documentation of this file.
1 /*
2  * SWC-DB© Copyright since 2019 Alex Kashirin <kashirin.alex@gmail.com>
3  * License details at <https://github.com/kashirin-alex/swc-db/#license>
4  */
5 
6 #ifndef swcdb_db_client_mngr_Groups_h
7 #define swcdb_db_client_mngr_Groups_h
8 
9 #include "swcdb/core/MutexSptd.h"
14 
15 
16 namespace SWC { namespace client { namespace Mngr {
17 
19 
20 class Group final : private Hosts {
21  public:
22 
23  typedef std::shared_ptr<Group> Ptr;
24  const uint8_t role;
26  const cid_t cid_end;
27 
28 
30  const Comm::EndPoints& endpoints);
31 
33  const Hosts& hosts);
34 
35  ~Group() noexcept { }
36 
37  Ptr copy();
38 
39  void add_host(Comm::EndPoints& new_endpoints);
40 
41  Hosts get_hosts();
42 
43  bool is_in_group(const Comm::EndPoint& endpoint) noexcept;
44 
45  void print(std::ostream& out);
46 
47  void apply_endpoints(Comm::EndPoints& to_endpoints);
48 
49  private:
50 
51  void _get_host(const Comm::EndPoint& point,
52  Comm::EndPoints*& found_host) noexcept;
53 
55 };
56 
57 
58 
59 
60 class Groups final : private Core::Vector<Group::Ptr>,
61  public std::enable_shared_from_this<Groups>{
62 
63  public:
64 
65  struct GroupHost final {
66  uint8_t role;
71  GroupHost() noexcept : role(), cid_begin(), cid_end(), endpoints() { }
72  GroupHost(GroupHost&&) noexcept = default;
73  GroupHost& operator=(GroupHost&&) noexcept = default;
74  GroupHost(const GroupHost&) = delete;
75  GroupHost& operator=(const GroupHost&) = delete;
76  ~GroupHost() noexcept { }
77  };
78  typedef std::shared_ptr<Groups> Ptr;
80 
81  Groups(const Config::Settings& settings);
82 
83  Groups(const Groups& other, Groups::Vec&&);
84 
85  Groups(const Groups&) = delete;
86 
87  Groups& operator=(const Groups&) = delete;
88 
89  ~Groups() noexcept { }
90 
91  Ptr init();
92 
93  Ptr copy();
94 
95  void on_cfg_update();
96 
97  Vec get_groups();
98 
99  void hosts(uint8_t role, cid_t cid, Hosts& hosts, GroupHost &group_host);
100 
101  Vec get_groups(const Comm::EndPoints& endpoints);
102 
103  Comm::EndPoints get_endpoints(uint8_t role=0, cid_t cid_begin=0,
104  cid_t cid_end=0);
105 
106  void print(std::ostream& out);
107 
108  void add(GroupHost&& g_host);
109 
110  void remove(const Comm::EndPoints& endpoints);
111 
112  void select(const cid_t& cid, Comm::EndPoints& endpoints);
113 
114  void select(const uint8_t& role, Comm::EndPoints& endpoints);
115 
116  private:
117 
118  void _add_host(uint8_t role, cid_t cid_begin, cid_t cid_end,
119  uint16_t port, std::string host_or_ips);
120 
122  const uint16_t cfg_port;
123 
127 
128 };
129 
130 }}}
131 
132 #ifdef SWC_IMPL_SOURCE
134 #endif
135 
136 
137 #endif // swcdb_db_client_mngr_Groups_h
SWC::client::Mngr::Groups::cfg_port
const uint16_t cfg_port
Definition: Groups.h:122
SWC::client::Mngr::Groups
Definition: Groups.h:61
SWC::client::Mngr::Group::_get_host
void _get_host(const Comm::EndPoint &point, Comm::EndPoints *&found_host) noexcept
Definition: Groups.cc:80
SWC::client::Mngr::Groups::copy
Ptr copy()
Definition: Groups.cc:122
SWC::client::Mngr::Groups::remove
void remove(const Comm::EndPoints &endpoints)
Definition: Groups.cc:327
SWC::client::Mngr::Group::Group
Group(uint8_t role, cid_t cid_begin, cid_t cid_end, const Comm::EndPoints &endpoints)
Definition: Groups.cc:13
SWC::client::Mngr::Groups::hosts
void hosts(uint8_t role, cid_t cid, Hosts &hosts, GroupHost &group_host)
Definition: Groups.cc:253
SWC::client::Mngr::Groups::print
void print(std::ostream &out)
Definition: Groups.cc:303
SWC::client::Mngr::Groups::add
void add(GroupHost &&g_host)
Definition: Groups.cc:311
SWC::Comm::EndPoint
asio::ip::tcp::endpoint EndPoint
Definition: Resolver.h:19
Settings.h
MngrRole.h
SWC::client::Mngr::Groups::GroupHost
Definition: Groups.h:65
SWC::client::Mngr::Groups::select
void select(const cid_t &cid, Comm::EndPoints &endpoints)
Definition: Groups.cc:338
SWC::client::Mngr::Groups::Ptr
std::shared_ptr< Groups > Ptr
Definition: Groups.h:78
SWC::client::Mngr::Group::Ptr
std::shared_ptr< Group > Ptr
Definition: Groups.h:23
SWC::client::Mngr::Group::m_mutex
Core::MutexSptd m_mutex
Definition: Groups.h:54
SWC::client::Mngr::Group::cid_begin
const cid_t cid_begin
Definition: Groups.h:25
SWC::client::Mngr::Group::is_in_group
bool is_in_group(const Comm::EndPoint &endpoint) noexcept
Definition: Groups.cc:48
SWC::client::Mngr::Hosts
Core::Vector< Comm::EndPoints > Hosts
Definition: Groups.h:18
SWC::client::Mngr::Group::get_hosts
Hosts get_hosts()
Definition: Groups.cc:43
SWC::Config::Property::Value_strings_g
Definition: Property.h:711
Resolver.h
SWC::client::Mngr::Groups::GroupHost::cid_begin
cid_t cid_begin
Definition: Groups.h:67
SWC::client::Mngr::Groups::get_groups
Vec get_groups()
Definition: Groups.cc:248
SWC_CAN_INLINE
#define SWC_CAN_INLINE
Definition: Compat.h:102
SWC::client::Mngr::Groups::on_cfg_update
void on_cfg_update()
Definition: Groups.cc:131
SWC::client::Mngr::Groups::get_endpoints
Comm::EndPoints get_endpoints(uint8_t role=0, cid_t cid_begin=0, cid_t cid_end=0)
Definition: Groups.cc:285
SWC::client::Mngr::Groups::~Groups
~Groups() noexcept
Definition: Groups.h:89
SWC
The SWC-DB C++ namespace 'SWC'.
Definition: main.cc:12
SWC::client::Mngr::Group::apply_endpoints
void apply_endpoints(Comm::EndPoints &to_endpoints)
Definition: Groups.cc:69
SWC::client::Mngr::Group::add_host
void add_host(Comm::EndPoints &new_endpoints)
Definition: Groups.cc:31
SWC::client::Mngr::Group
Definition: Groups.h:20
SWC::client::Mngr::Groups::operator=
Groups & operator=(const Groups &)=delete
SWC::client::Mngr::Groups::m_active_g_host
Core::Vector< GroupHost > m_active_g_host
Definition: Groups.h:125
SWC::client::Mngr::Groups::m_mutex
Core::MutexSptd m_mutex
Definition: Groups.h:124
SWC::client::Mngr::Groups::GroupHost::GroupHost
SWC_CAN_INLINE GroupHost() noexcept
Definition: Groups.h:71
SWC::client::Mngr::Groups::GroupHost::role
uint8_t role
Definition: Groups.h:66
Identifiers.h
SWC::Config::Settings
Definition: Settings.h:25
SWC::client::Mngr::Groups::GroupHost::GroupHost
GroupHost(GroupHost &&) noexcept=default
SWC::cid_t
uint64_t cid_t
Definition: Identifiers.h:16
SWC::client::Mngr::Groups::_add_host
void _add_host(uint8_t role, cid_t cid_begin, cid_t cid_end, uint16_t port, std::string host_or_ips)
Definition: Groups.cc:214
SWC::client::Mngr::Group::~Group
~Group() noexcept
Definition: Groups.h:35
SWC::Core::Vector< Comm::EndPoints >
MutexSptd.h
SWC::client::Mngr::Group::cid_end
const cid_t cid_end
Definition: Groups.h:26
SWC::client::Mngr::Groups::GroupHost::cid_end
cid_t cid_end
Definition: Groups.h:68
SWC::client::Mngr::Groups::Groups
Groups(const Config::Settings &settings)
Definition: Groups.cc:92
SWC::client::Mngr::Groups::Groups
Groups(const Groups &)=delete
SWC::Core::MutexSptd
Definition: MutexSptd.h:16
SWC::client::Mngr::Group::role
const uint8_t role
Definition: Groups.h:24
SWC::client::Mngr::Groups::m_nets
Comm::Networks m_nets
Definition: Groups.h:126
SWC::client::Mngr::Groups::GroupHost::endpoints
Comm::EndPoints endpoints
Definition: Groups.h:69
SWC::client::Mngr::Groups::init
Ptr init()
Definition: Groups.cc:115
Groups.cc
SWC::client::Mngr::Groups::cfg_hosts
Config::Property::Value_strings_g::Ptr cfg_hosts
Definition: Groups.h:121
SWC::client::Mngr::Groups::Vec
Core::Vector< Group::Ptr > Vec
Definition: Groups.h:79
SWC::client::Mngr::Group::copy
Ptr copy()
Definition: Groups.cc:27
SWC::client::Mngr::Group::print
void print(std::ostream &out)
Definition: Groups.cc:56