SWC-DB  v0.5.12 C++ documentations
SWC-DB© (Super Wide Column Database) - High Performance Scalable Database (https://github.com/kashirin-alex/swc-db)
Ranger.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_manager_Ranger_h
7 #define swcdb_manager_Ranger_h
8 
9 
11 
12 
13 namespace SWC { namespace Manager {
14 
15 namespace RangerState = DB::Types::MngrRangerState;
16 
17 class Ranger final {
18 
19  public:
20 
21  typedef std::shared_ptr<Ranger> Ptr;
22 
23  /*
24  SWC_CAN_INLINE
25  Ranger() noexcept
26  : rgrid(0),
27  interm_ranges(0), failures(0), load_scale(0),
28  state(RangerState::NONE), m_rebalance(0) {
29  }
30  */
31 
33  Ranger(rgrid_t a_rgrid, const Comm::EndPoints& a_endpoints)
34  : rgrid(a_rgrid), endpoints(a_endpoints),
36  state(RangerState::NONE), m_mutex(), m_rebalance(0),
37  m_queue(nullptr) {
38  }
39 
41  Ranger(const uint8_t** bufp, size_t* remainp)
42  : rgrid(Serialization::decode_vi64(bufp, remainp)),
43  endpoints(Serialization::decode_endpoints(bufp, remainp)),
44  interm_ranges(0), failures(0),
45  load_scale(Serialization::decode_i16(bufp, remainp)),
46  state(Serialization::decode_i8(bufp, remainp)),
47  m_mutex(), m_rebalance(Serialization::decode_i8(bufp, remainp)),
48  m_queue(nullptr) {
49  }
50 
52  Ranger(const Ranger& other, const Comm::EndPoints& a_endpoints)
53  : rgrid(other.rgrid.load()),
54  endpoints(a_endpoints),
56  failures(other.failures.load()),
57  load_scale(other.load_scale.load()),
58  state(other.state.load()),
59  m_mutex(), m_rebalance(other.rebalance()),
60  m_queue(nullptr) {
61  }
62 
63  ~Ranger() noexcept { }
64 
65  void print(std::ostream& out) const {
66  out << "[rgrid=" << rgrid.load()
67  << " state=" << RangerState::to_string(state.load())
68  << " failures=" << failures.load()
69  << " load_scale=" << load_scale.load()
70  << " rebalance=" << int(rebalance())
71  << " interm_ranges=" << interm_ranges.load();
72  Comm::print(out << ' ', endpoints);
73  if(m_queue)
74  m_queue->print(out << ' ');
75  out << ']';
76  }
77 
78  size_t encoded_length() const noexcept {
79  size_t len = 4
82  return len;
83  }
84 
85  void encode(uint8_t** bufp) const {
91  }
92 
94  void init_queue() {
95  m_queue = Env::Clients::get()->get_rgr_queue(endpoints);
96  }
97 
100  m_queue->put(req);
101  }
102 
103  void stop() {
104  m_queue->stop();
105  }
106 
108  void rebalance(uint8_t num) {
110  m_rebalance = num;
111  }
112 
114  uint8_t rebalance() const {
116  return m_rebalance;
117  }
118 
120  bool can_rebalance() {
122  if(m_rebalance) {
123  --m_rebalance;
124  return true;
125  }
126  return false;
127  }
128 
129 
136 
137 
138  private:
139 
141  uint8_t m_rebalance;
143 
144 };
145 
147 
148 }}
149 
150 #endif // swcdb_manager_Ranger_h
SWC::Manager::Ranger::failures
Core::Atomic< int16_t > failures
Definition: Ranger.h:133
SWC::Env::Clients::get
static SWC_CAN_INLINE client::Clients::Ptr & get() noexcept
Definition: Clients.h:299
SWC::Manager::Ranger::Ranger
SWC_CAN_INLINE Ranger(const Ranger &other, const Comm::EndPoints &a_endpoints)
Definition: Ranger.h:52
SWC::Manager::Ranger::can_rebalance
SWC_CAN_INLINE bool can_rebalance()
Definition: Ranger.h:120
SWC::Core::Atomic< rgrid_t >
SWC::Manager::Ranger::state
Core::Atomic< uint8_t > state
Definition: Ranger.h:135
SWC::Common::Files::Schema::load
void load(int &err, const std::string &filepath, DB::Schema::Ptr &schema)
Definition: Schema.h:87
SWC::Manager::Ranger::init_queue
SWC_CAN_INLINE void init_queue()
Definition: Ranger.h:94
SWC::Serialization::encode_i16
SWC_CAN_INLINE void encode_i16(uint8_t **bufp, uint16_t val) noexcept
Definition: Serialization.h:112
SWC::Manager::Ranger::encoded_length
size_t encoded_length() const noexcept
Definition: Ranger.h:78
SWC::Serialization::encode_i8
constexpr SWC_CAN_INLINE void encode_i8(uint8_t **bufp, uint8_t val) noexcept
Definition: Serialization.h:85
SWC::Serialization::encoded_length
SWC_CAN_INLINE uint8_t encoded_length(const Comm::EndPoint &endpoint) noexcept
Definition: Resolver.h:63
SWC::Manager::Ranger::m_rebalance
uint8_t m_rebalance
Definition: Ranger.h:141
SWC::Comm::print
void print(std::ostream &out, const EndPoints &endpoints)
Definition: Resolver.cc:85
SWC::Core::MutexAtomic::scope
Definition: MutexAtomic.h:77
SWC::Serialization::encode
void encode(uint8_t **bufp, const Comm::EndPoint &endpoint)
Definition: Resolver.cc:22
SWC::Manager::Ranger::rebalance
SWC_CAN_INLINE void rebalance(uint8_t num)
Definition: Ranger.h:108
MngrRangerState.h
SWC::Comm::client::Host::Ptr
std::shared_ptr< Host > Ptr
Definition: ClientConnQueues.h:19
SWC::Manager::Ranger::rebalance
SWC_CAN_INLINE uint8_t rebalance() const
Definition: Ranger.h:114
SWC_CAN_INLINE
#define SWC_CAN_INLINE
Definition: Compat.h:102
SWC::Serialization::decode_i16
SWC_CAN_INLINE uint16_t decode_i16(const uint8_t **bufp, size_t *remainp)
Definition: Serialization.h:117
SWC::Manager::Ranger::put
SWC_CAN_INLINE void put(const Comm::client::ConnQueue::ReqBase::Ptr &req)
Definition: Ranger.h:99
SWC
The SWC-DB C++ namespace 'SWC'.
Definition: main.cc:12
SWC::Core::MutexAtomic
Definition: MutexAtomic.h:17
SWC::Manager::Ranger::m_queue
Comm::client::Host::Ptr m_queue
Definition: Ranger.h:142
SWC::Manager::Ranger::encode
void encode(uint8_t **bufp) const
Definition: Ranger.h:85
SWC::Manager::Ranger::Ptr
std::shared_ptr< Ranger > Ptr
Definition: Ranger.h:21
SWC::rgrid_t
uint64_t rgrid_t
Definition: Identifiers.h:18
SWC::Serialization::encoded_length_vi64
constexpr SWC_CAN_INLINE uint8_t encoded_length_vi64(uint64_t val) noexcept
Definition: Serialization.h:272
SWC::Condition::NONE
@ NONE
Definition: Comparators.h:28
SWC::Manager::Ranger::Ranger
SWC_CAN_INLINE Ranger(rgrid_t a_rgrid, const Comm::EndPoints &a_endpoints)
Definition: Ranger.h:33
SWC::Manager::Ranger::load_scale
Core::Atomic< uint16_t > load_scale
Definition: Ranger.h:134
SWC::Core::Vector< EndPoint >
SWC::Serialization::decode_endpoints
SWC_CAN_INLINE Comm::EndPoints decode_endpoints(const uint8_t **bufp, size_t *remainp)
Definition: Resolver.h:81
SWC::Manager::Ranger::m_mutex
Core::MutexAtomic m_mutex
Definition: Ranger.h:140
SWC::Core::AtomicBase::load
constexpr SWC_CAN_INLINE T load() const noexcept
Definition: Atomic.h:42
SWC::Manager::Ranger::rgrid
Core::Atomic< rgrid_t > rgrid
Definition: Ranger.h:130
SWC::Serialization::decode_vi64
constexpr SWC_CAN_INLINE uint64_t decode_vi64(const uint8_t **bufp, size_t *remainp)
Definition: Serialization.h:302
SWC::Serialization::encode_vi64
constexpr SWC_CAN_INLINE void encode_vi64(uint8_t **bufp, uint64_t val)
Definition: Serialization.h:286
SWC::Manager::RangerList
Core::Vector< Ranger::Ptr > RangerList
Definition: Ranger.h:146
SWC::Manager::Ranger
Definition: Ranger.h:17
SWC::Manager::Ranger::stop
void stop()
Definition: Ranger.h:103
SWC::Comm::client::ConnQueueReqBase::Ptr
std::shared_ptr< ConnQueueReqBase > Ptr
Definition: ClientConnQueue.h:25
SWC::Manager::Ranger::~Ranger
~Ranger() noexcept
Definition: Ranger.h:63
SWC::Core::to_string
SWC_CAN_INLINE std::string to_string(const BitFieldInt< T, SZ > &v)
Definition: BitFieldInt.h:263
SWC::Serialization::decode_i8
constexpr SWC_CAN_INLINE uint8_t decode_i8(const uint8_t **bufp, size_t *remainp)
Definition: Serialization.h:91
SWC::Manager::Ranger::endpoints
Comm::EndPoints endpoints
Definition: Ranger.h:131
SWC::Manager::Ranger::print
void print(std::ostream &out) const
Definition: Ranger.h:65
SWC::Manager::Ranger::interm_ranges
Core::Atomic< size_t > interm_ranges
Definition: Ranger.h:132
SWC::Manager::Ranger::Ranger
SWC_CAN_INLINE Ranger(const uint8_t **bufp, size_t *remainp)
Definition: Ranger.h:41