SWC-DB  v0.5.12 C++ documentations
SWC-DB© (Super Wide Column Database) - High Performance Scalable Database (https://github.com/kashirin-alex/swc-db)
Clients.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_Clients_h
7 #define swcdb_db_client_Clients_h
8 
9 
12 
13 namespace SWC {
14 
15 
21 namespace client {
22 
23 class Clients;
24 typedef std::shared_ptr<Clients> ClientsPtr;
25 
26 }}
27 
32 
33 
34 
35 namespace SWC { namespace client {
36 
37 
38 
39 class Clients : public std::enable_shared_from_this<Clients> {
40  protected:
41 
42  Clients(const Config::Settings& settings,
44  const ContextManager::Ptr& mngr_ctx,
45  const ContextRanger::Ptr& rgr_ctx,
46  const ContextBroker::Ptr& bkr_ctx);
47 
48  Clients(const Config::Settings& settings,
50  const ContextManager::Ptr& mngr_ctx,
51  const ContextRanger::Ptr& rgr_ctx);
52 
53  Clients(const Config::Settings& settings,
55  const ContextBroker::Ptr& bkr_ctx);
56 
57  public:
58  using Ptr = ClientsPtr;
59 
60  enum Flag : uint8_t {
61  DEFAULT = 0x01,
62  BROKER = 0x02,
63  SCHEMA = 0x04,
64  };
65 
66  static Ptr make(const Config::Settings& settings,
68  const ContextManager::Ptr& mngr_ctx,
69  const ContextRanger::Ptr& rgr_ctx,
70  const ContextBroker::Ptr& bkr_ctx);
71 
72  static Ptr make(const Config::Settings& settings,
74  const ContextManager::Ptr& mngr_ctx,
75  const ContextRanger::Ptr& rgr_ctx);
76 
77  static Ptr make(const Config::Settings& settings,
79  const ContextBroker::Ptr& bkr_ctx);
80 
81  Clients(const Clients&) = delete;
82 
83  Clients& operator=(const Clients&) = delete;
84 
85  ~Clients() noexcept;
86 
87  Ptr shared() {
88  return shared_from_this();
89  }
90 
91  Ptr init() {
92  if(has_brokers()) {
94  [ptr=shared()]() noexcept { ptr->brokers.on_cfg_update(); }
95  );
96  }
97  return shared();
98  }
99 
100  void stop_services();
101 
102  void stop_io() {
103  io_ctx->stop();
104  }
105 
106  void stop();
107 
109  bool stopping() const noexcept {
110  return !running;
111  }
112 
114  void set_flags(uint8_t _flags) noexcept {
115  flags.store(_flags);
116  }
117 
120  set_flags(Flag::DEFAULT | Flag::BROKER);
121  }
122 
125  return io_ctx;
126  }
127 
129  bool has_brokers() noexcept {
130  return bool(brokers.queues);
131  }
132 
135  uint32_t timeout=300000) {
136  return schemas.get(err, cid, timeout);
137  }
138 
140  DB::Schema::Ptr get_schema(int& err, const std::string& name,
141  uint32_t timeout=300000) {
142  return schemas.get(err, name, timeout);
143  }
144 
146  void get_schema(int& err, const DB::Schemas::SelectorPatterns& patterns,
147  DB::SchemasVec& _schemas,
148  uint32_t timeout=300000) {
149  schemas.get(err, patterns, _schemas, timeout);
150  }
151 
154  get_schema(int& err, const DB::Schemas::SelectorPatterns& patterns,
155  uint32_t timeout=300000) {
156  return schemas.get(err, patterns, timeout);
157  }
158 
159 
161  void rgr_cache_remove(const cid_t cid, const rid_t rid) {
162  rangers.cache.remove(cid, rid);
163  }
164 
166  bool rgr_cache_get(const cid_t cid, const rid_t rid,
167  Comm::EndPoints& endpoints) {
168  return rangers.cache.get(cid, rid, endpoints);
169  }
170 
172  void rgr_cache_set(const cid_t cid, const rid_t rid,
173  const Comm::EndPoints& endpoints) {
174  rangers.cache.set(cid, rid, endpoints);
175  }
176 
177 
179  void mngr_cache_remove_master(const cid_t cid, const rid_t rid) {
181  }
182 
184  void mngr_cache_set_master(const cid_t cid, const rid_t rid,
185  const DB::Cell::Key& range_begin,
186  const DB::Cell::Key& range_end,
187  const Comm::EndPoints& endpoints,
188  const int64_t revision) {
190  cid, rid, range_begin, range_end, endpoints, revision);
191  }
192 
195  const DB::Cell::Key& range_begin,
196  const DB::Cell::Key& range_end,
197  rid_t& rid,
198  DB::Cell::Key& offset,
199  bool& is_end,
200  Comm::EndPoints& endpoints,
201  int64_t& revision) {
203  cid, range_begin, range_end, rid, offset, is_end, endpoints, revision);
204  }
205 
208  const DB::Cell::Key& key,
209  rid_t& rid,
210  DB::Cell::Key& key_end,
211  Comm::EndPoints& endpoints,
212  int64_t& revision) {
214  cid, key, rid, key_end, endpoints, revision);
215  }
216 
217 
220  return managers.queues->service->io();
221  }
222 
225  return managers.queues->get(endpoints);
226  }
227 
228 
231  return rangers.queues->service->io();
232  }
233 
236  return rangers.queues->get(endpoints);
237  }
238 
239 
242  return brokers.queues->service->io();
243  }
244 
247  return brokers.queues->get(endpoints);
248  }
249 
251  void get_mngr(const cid_t& cid, Comm::EndPoints& endpoints) {
252  managers.groups->select(cid, endpoints);
253  }
254 
256  void get_mngr(const uint8_t& role, Comm::EndPoints& endpoints) {
257  managers.groups->select(role, endpoints);
258  }
259 
261  void remove_mngr(const Comm::EndPoints& endpoints) {
262  managers.groups->remove(endpoints);
263  }
264 
265 
268 
273 
277 
283 
284 };
285 
286 } // namespace client
287 
288 
289 
290 namespace Env {
291 
292 
293 class Clients final {
294  public:
295 
296  static void init(const client::Clients::Ptr& clients);
297 
299  static client::Clients::Ptr& get() noexcept {
300  return m_env->m_clients;
301  }
302 
304  static const Clients& ref() noexcept {
305  return *m_env.get();
306  }
307 
308  static void reset() noexcept {
309  m_env = nullptr;
310  }
311 
312  Clients(const client::Clients::Ptr& clients) noexcept
313  : m_clients(clients) {
314  }
315 
316  ~Clients() noexcept { }
317 
318  private:
320  inline static std::shared_ptr<Clients> m_env = nullptr;
321 
322 };
323 
324 
325 } // namespace Env
326 
327 } // namespace SWC
328 
329 
330 #ifdef SWC_IMPL_SOURCE
336 #endif
337 
338 
339 #endif // swcdb_db_client_Clients_h
SWC::client::Clients::set_flags__schemas_via_default
SWC_CAN_INLINE void set_flags__schemas_via_default() noexcept
Definition: Clients.h:119
SWC::client::Clients::get_schema
SWC_CAN_INLINE DB::Schema::Ptr get_schema(int &err, cid_t cid, uint32_t timeout=300000)
Definition: Clients.h:134
Managers.h
SWC::client::Clients::mngr_cache_get_write_master
SWC_CAN_INLINE bool mngr_cache_get_write_master(const cid_t cid, const DB::Cell::Key &key, rid_t &rid, DB::Cell::Key &key_end, Comm::EndPoints &endpoints, int64_t &revision)
Definition: Clients.h:207
SWC::client::Clients::cfg_recv_buff_sz
const Config::Property::Value_int32_g::Ptr cfg_recv_buff_sz
Definition: Clients.h:274
SWC::client::Clients::brokers
Brokers brokers
Definition: Clients.h:282
SWC::Core::AtomicBase< bool >
SWC::Env::Clients::get
static SWC_CAN_INLINE client::Clients::Ptr & get() noexcept
Definition: Clients.h:299
SWC::client::Clients::cfg_send_buff_sz
const Config::Property::Value_int32_g::Ptr cfg_send_buff_sz
Definition: Clients.h:269
SWC::DB::Schema::Ptr
std::shared_ptr< Schema > Ptr
Definition: Schema.h:185
SWC::client::Managers::queues
const Comm::client::ConnQueuesPtr queues
Definition: Managers.h:227
SWC::client::Clients::DEFAULT
@ DEFAULT
Definition: Clients.h:61
SWC::client::Brokers::queues
const Comm::client::ConnQueuesPtr queues
Definition: Brokers.h:60
SWC::Core::Atomic< uint8_t >
SWC::client::ContextManager::Ptr
std::shared_ptr< ContextManager > Ptr
Definition: ContextManager.h:18
SWC::client::Brokers
Definition: Brokers.h:18
SWC::client::Clients::io_ctx
Comm::IoContextPtr io_ctx
Definition: Clients.h:278
SWC::client::Clients::get_schema
SWC_CAN_INLINE DB::SchemasVec get_schema(int &err, const DB::Schemas::SelectorPatterns &patterns, uint32_t timeout=300000)
Definition: Clients.h:154
Settings.h
SWC::client::Clients::Ptr
ClientsPtr Ptr
Definition: Clients.h:58
SWC::client::Schemas
Definition: Schemas.h:17
SWC::Comm::IoContextPtr
std::shared_ptr< IoContext > IoContextPtr
Definition: IoContext.h:16
SWC::client::Clients::get_io
SWC_CAN_INLINE Comm::IoContextPtr & get_io() noexcept
Definition: Clients.h:124
SWC::client::Clients::cfg_send_ahead
const Config::Property::Value_uint8_g::Ptr cfg_send_ahead
Definition: Clients.h:270
SWC::client::Clients::cfg_send_timeout
const Config::Property::Value_int32_g::Ptr cfg_send_timeout
Definition: Clients.h:271
SWC::client::ContextBroker::Ptr
std::shared_ptr< ContextBroker > Ptr
Definition: ContextBroker.h:18
SWC::client::Clients::get_bkr_queue
SWC_CAN_INLINE Comm::client::Host::Ptr get_bkr_queue(const Comm::EndPoints &endpoints)
Definition: Clients.h:246
SWC::FS::BROKER
@ BROKER
Definition: FileSystem.h:24
SWC::client::CachedRangers::remove
void remove(const cid_t cid, const rid_t rid)
Definition: Cache.cc:38
Rangers.h
SWC::client::Brokers::cfg_hosts
const Config::Property::Value_strings_g::Ptr cfg_hosts
Definition: Brokers.h:61
SWC::client::Clients::mngr_cache_set_master
SWC_CAN_INLINE void mngr_cache_set_master(const cid_t cid, const rid_t rid, const DB::Cell::Key &range_begin, const DB::Cell::Key &range_end, const Comm::EndPoints &endpoints, const int64_t revision)
Definition: Clients.h:184
SWC::client::Clients::get_mngr
SWC_CAN_INLINE void get_mngr(const uint8_t &role, Comm::EndPoints &endpoints)
Definition: Clients.h:256
SWC::Config::Property::Value_strings_g::set_cb_on_chg
void set_cb_on_chg(OnChg_t &&cb)
Definition: Property.cc:1071
Base.cc
SWC::DB::Schemas::SelectorPatterns
Definition: Schemas.h:100
SWC::client::Clients::rangers
Rangers rangers
Definition: Clients.h:281
SWC::client::CachedRangers::set
void set(const cid_t cid, const rid_t rid, const Comm::EndPoints &endpoints)
Definition: Cache.cc:67
SWC::DB::Cell::Key
Definition: CellKey.h:24
Brokers.h
SWC::client::Clients::remove_mngr
SWC_CAN_INLINE void remove_mngr(const Comm::EndPoints &endpoints)
Definition: Clients.h:261
SWC::Env::Clients::init
static void init(const client::Clients::Ptr &clients)
Definition: Clients.cc:182
SWC::client::Clients::SCHEMA
@ SCHEMA
Definition: Clients.h:63
SWC::client::ClientsPtr
std::shared_ptr< Clients > ClientsPtr
Definition: Clients.h:23
SWC::client::Clients::schemas
Schemas schemas
Definition: Clients.h:279
SWC::client::Rangers::queues
const Comm::client::ConnQueuesPtr queues
Definition: Rangers.h:32
Clients.cc
SWC::Comm::client::Host::Ptr
std::shared_ptr< Host > Ptr
Definition: ClientConnQueues.h:19
SWC::Core::AtomicBase::store
constexpr SWC_CAN_INLINE void store(T v) noexcept
Definition: Atomic.h:37
SWC::client::Clients::get_rgr_queue
SWC_CAN_INLINE Comm::client::Host::Ptr get_rgr_queue(const Comm::EndPoints &endpoints)
Definition: Clients.h:235
SWC::client::Clients::cfg_recv_timeout
const Config::Property::Value_int32_g::Ptr cfg_recv_timeout
Definition: Clients.h:276
SWC_CAN_INLINE
#define SWC_CAN_INLINE
Definition: Compat.h:102
SWC::client::Clients::operator=
Clients & operator=(const Clients &)=delete
SWC::client::Clients::get_bkr_io
SWC_CAN_INLINE Comm::IoContextPtr get_bkr_io()
Definition: Clients.h:241
SWC::client::Clients::init
Ptr init()
Definition: Clients.h:91
Schemas.cc
SWC
The SWC-DB C++ namespace 'SWC'.
Definition: main.cc:12
SWC::client::Clients::rgr_cache_get
SWC_CAN_INLINE bool rgr_cache_get(const cid_t cid, const rid_t rid, Comm::EndPoints &endpoints)
Definition: Clients.h:166
SWC::client::Clients::rgr_cache_set
SWC_CAN_INLINE void rgr_cache_set(const cid_t cid, const rid_t rid, const Comm::EndPoints &endpoints)
Definition: Clients.h:172
SWC::Env::Clients::Clients
Clients(const client::Clients::Ptr &clients) noexcept
Definition: Clients.h:312
SWC::client::Rangers::cache
CachedRangers cache
Definition: Rangers.h:33
SWC::client::Clients::get_schema
SWC_CAN_INLINE void get_schema(int &err, const DB::Schemas::SelectorPatterns &patterns, DB::SchemasVec &_schemas, uint32_t timeout=300000)
Definition: Clients.h:146
SWC::client::Clients::stop_services
void stop_services()
Definition: Clients.cc:158
SWC::client::Clients::Flag
Flag
Definition: Clients.h:60
SWC::client::Managers::master_ranges_cache
MasterRangesCache master_ranges_cache
Definition: Managers.h:229
SWC::client::Clients::stop_io
void stop_io()
Definition: Clients.h:102
SWC::client::Clients::rgr_cache_remove
SWC_CAN_INLINE void rgr_cache_remove(const cid_t cid, const rid_t rid)
Definition: Clients.h:161
SWC::Config::Settings
Definition: Settings.h:25
SWC::client::Managers::MasterRangesCache::set
SWC_CAN_INLINE void set(const cid_t cid, const rid_t rid, const DB::Cell::Key &range_begin, const DB::Cell::Key &range_end, const Comm::EndPoints &endpoints, const int64_t revision)
Definition: Managers.h:166
SWC::client::Clients
Definition: Clients.h:39
SWC::Config::Property::Value_uint8_g
Definition: Property.h:511
ClientConnQueues.h
SWC::client::Clients::managers
Managers managers
Definition: Clients.h:280
SWC::cid_t
uint64_t cid_t
Definition: Identifiers.h:16
SWC::Env::Clients::m_clients
client::Clients::Ptr m_clients
Definition: Clients.h:319
SWC::client::Clients::mngr_cache_get_read_master
SWC_CAN_INLINE bool mngr_cache_get_read_master(const cid_t cid, const DB::Cell::Key &range_begin, const DB::Cell::Key &range_end, rid_t &rid, DB::Cell::Key &offset, bool &is_end, Comm::EndPoints &endpoints, int64_t &revision)
Definition: Clients.h:194
SWC::client::Clients::~Clients
~Clients() noexcept
Definition: Clients.cc:156
SWC::Core::Vector< Schema::Ptr >
SWC::client::Managers::MasterRangesCache::get_read
SWC_CAN_INLINE bool get_read(const cid_t cid, const DB::Cell::Key &range_begin, const DB::Cell::Key &range_end, rid_t &rid, DB::Cell::Key &offset, bool &is_end, Comm::EndPoints &endpoints, int64_t &revision)
Definition: Managers.h:176
SWC::client::ContextRanger::Ptr
std::shared_ptr< ContextRanger > Ptr
Definition: ContextRanger.h:18
SWC::client::Clients::get_mngr_queue
SWC_CAN_INLINE Comm::client::Host::Ptr get_mngr_queue(const Comm::EndPoints &endpoints)
Definition: Clients.h:224
SWC::client::Clients::get_mngr
SWC_CAN_INLINE void get_mngr(const cid_t &cid, Comm::EndPoints &endpoints)
Definition: Clients.h:251
SWC::client::Managers::MasterRangesCache::remove
SWC_CAN_INLINE void remove(const cid_t cid, const rid_t rid) noexcept
Definition: Managers.h:161
SWC::client::Schemas::get
DB::Schema::Ptr get(int &err, cid_t cid, uint32_t timeout=300000)
Definition: Schemas.cc:98
Base.cc
SWC::Env::Clients::m_env
static std::shared_ptr< Clients > m_env
Definition: Clients.h:320
SWC::Env::Clients
Definition: Clients.h:293
SWC::client::Clients::BROKER
@ BROKER
Definition: Clients.h:62
SWC::client::Clients::stopping
SWC_CAN_INLINE bool stopping() const noexcept
Definition: Clients.h:109
SWC::client::Clients::running
Core::AtomicBool running
Definition: Clients.h:266
Managers.cc
SWC::Env::Clients::reset
static void reset() noexcept
Definition: Clients.h:308
SWC::rid_t
uint64_t rid_t
Definition: Identifiers.h:17
SWC::client::Clients::get_schema
SWC_CAN_INLINE DB::Schema::Ptr get_schema(int &err, const std::string &name, uint32_t timeout=300000)
Definition: Clients.h:140
SWC::client::Clients::mngr_cache_remove_master
SWC_CAN_INLINE void mngr_cache_remove_master(const cid_t cid, const rid_t rid)
Definition: Clients.h:179
SWC::client::Clients::make
static Ptr make(const Config::Settings &settings, const Comm::IoContextPtr &io_ctx, const ContextManager::Ptr &mngr_ctx, const ContextRanger::Ptr &rgr_ctx, const ContextBroker::Ptr &bkr_ctx)
Definition: Clients.cc:13
SWC::client::Clients::stop
void stop()
Definition: Clients.cc:169
SWC::client::Managers::groups
const Mngr::Groups::Ptr groups
Definition: Managers.h:228
SWC::client::Clients::Clients
Clients(const Clients &)=delete
SWC::client::Managers::MasterRangesCache::get_write
SWC_CAN_INLINE bool get_write(const cid_t cid, const DB::Cell::Key &key, rid_t &rid, DB::Cell::Key &key_end, Comm::EndPoints &endpoints, int64_t &revision)
Definition: Managers.h:189
SWC::client::Clients::cfg_send_timeout_ratio
const Config::Property::Value_int32_g::Ptr cfg_send_timeout_ratio
Definition: Clients.h:272
SWC::client::Managers
Definition: Managers.h:22
SWC::client::CachedRangers::get
bool get(const cid_t cid, const rid_t rid, Comm::EndPoints &endpoints)
Definition: Cache.cc:52
SWC::client::Clients::shared
Ptr shared()
Definition: Clients.h:87
SWC::client::Clients::get_rgr_io
SWC_CAN_INLINE Comm::IoContextPtr get_rgr_io()
Definition: Clients.h:230
SWC::client::Clients::Clients
Clients(const Config::Settings &settings, const Comm::IoContextPtr &io_ctx, const ContextManager::Ptr &mngr_ctx, const ContextRanger::Ptr &rgr_ctx, const ContextBroker::Ptr &bkr_ctx)
Definition: Clients.cc:42
SWC::Env::Clients::~Clients
~Clients() noexcept
Definition: Clients.h:316
SWC::client::Clients::set_flags
SWC_CAN_INLINE void set_flags(uint8_t _flags) noexcept
Definition: Clients.h:114
SWC::client::Clients::get_mngr_io
SWC_CAN_INLINE Comm::IoContextPtr get_mngr_io()
Definition: Clients.h:219
SWC::client::Clients::has_brokers
SWC_CAN_INLINE bool has_brokers() noexcept
Definition: Clients.h:129
SWC::client::Rangers
Definition: Rangers.h:19
SWC::Config::Property::Value_int32_g
Definition: Property.h:586
SWC::client::Clients::cfg_recv_ahead
const Config::Property::Value_uint8_g::Ptr cfg_recv_ahead
Definition: Clients.h:275
SWC::client::Clients::flags
Core::Atomic< uint8_t > flags
Definition: Clients.h:267
Schemas.h
SWC::Env::Clients::ref
static SWC_CAN_INLINE const Clients & ref() noexcept
Definition: Clients.h:304