SWC-DB  v0.5.11 C++ documentations
SWC-DB© (Super Wide Column Database) - High Performance Scalable Database (https://github.com/kashirin-alex/swc-db)
Base.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_Query_Update_Handlers_Base_h
7 #define swcdb_db_client_Query_Update_Handlers_Base_h
8 
9 
11 #include "swcdb/db/Cells/Cell.h"
14 
15 
16 namespace SWC { namespace client { namespace Query { namespace Update {
17 
18 
19 
21 namespace Handlers {
22 
23 
24 
25 class Base : public std::enable_shared_from_this<Base> {
26  public:
27  typedef std::shared_ptr<Base> Ptr;
28 
29 
30  class Column {
31  public:
32  typedef std::shared_ptr<Column> Ptr;
33 
35  Column() noexcept { }
36 
37  virtual void print(std::ostream& out) = 0;
38 
39  virtual cid_t get_cid() const noexcept = 0;
40 
41  virtual DB::Types::KeySeq get_sequence() const noexcept = 0;
42 
43  virtual bool empty() noexcept = 0;
44 
45  virtual size_t size() noexcept = 0;
46 
47  virtual size_t size_bytes() noexcept = 0;
48 
49  virtual DB::Cell::Key::Ptr get_first_key() = 0;
50 
51  virtual DB::Cell::Key::Ptr get_key_next(const DB::Cell::Key& eval_key,
52  bool start_key=false) = 0;
53 
54  virtual size_t add(const DynamicBuffer& cells,
55  const DB::Cell::Key& upto_key,
56  const DB::Cell::Key& from_key,
57  uint32_t skip, bool malformed) = 0;
58 
59  virtual size_t add(const DynamicBuffer& cells, bool finalized=false) = 0;
60 
61  virtual void add(const DB::Cells::Cell& cell, bool finalized=false) = 0;
62 
63  virtual bool get_buff(const DB::Cell::Key& key_start,
64  const DB::Cell::Key& key_end,
65  size_t buff_sz, bool& more,
66  DynamicBuffer& cells_buff) = 0;
67 
68  virtual bool get_buff(size_t buff_sz, bool& more,
69  DynamicBuffer& cells_buff) = 0;
70 
72  DynamicBuffer::Ptr get_buff(const DB::Cell::Key& key_start,
73  const DB::Cell::Key& key_end,
74  size_t buff_sz, bool& more) {
75  DynamicBuffer cells_buff;
76  return DynamicBuffer::Ptr(
77  get_buff(key_start, key_end, buff_sz, more, cells_buff)
78  ? new DynamicBuffer(std::move(cells_buff))
79  : nullptr
80  );
81  }
82 
84  DynamicBuffer::Ptr get_buff(size_t buff_sz, bool& more) {
85  DynamicBuffer cells_buff;
86  return DynamicBuffer::Ptr(
87  get_buff(buff_sz, more, cells_buff)
88  ? new DynamicBuffer(std::move(cells_buff))
89  : nullptr
90  );
91  }
92 
93  virtual void error(int err) noexcept = 0;
94 
95  virtual int error() noexcept = 0;
96 
97  protected:
98 
99  virtual ~Column() noexcept { }
100 
101  };
103 
104 
109 
115 
117  Base(const Clients::Ptr& a_clients,
118  Clients::Flag a_executor=Clients::Flag::DEFAULT) noexcept
119  : clients(a_clients),
121  timeout(clients->cfg_send_timeout->get()),
122  timeout_ratio(clients->cfg_send_timeout_ratio->get()),
123  buff_sz(clients->cfg_send_buff_sz->get()),
124  buff_ahead(clients->cfg_send_ahead->get()),
125  executor(a_executor) {
126  if(!timeout_ratio)
127  timeout_ratio.store(1000);
128  }
129 
130  virtual bool valid() noexcept = 0;
131 
132  virtual void response(int err=Error::OK) = 0;
133 
134  virtual bool requires_commit() noexcept = 0;
135 
136  virtual bool empty() noexcept = 0;
137 
138  virtual size_t size_bytes() noexcept = 0;
139 
140  virtual void next(Colms& cols) noexcept = 0;
141 
142  virtual Column* next(cid_t cid) noexcept = 0;
143 
144  virtual void error(cid_t cid, int err) noexcept = 0;
145 
146 
147  virtual int error() noexcept {
148  return state_error;
149  }
150 
151  virtual void error(int err) noexcept {
152  int at = Error::OK;
154  }
155 
156 
158  void add_resend_count(size_t count) noexcept {
159  m_resend_cells.fetch_add(count);
160  }
161 
163  size_t get_resend_count(bool reset = true) noexcept {
165  }
166 
167  void commit() {
169  Colms cols;
170  next(cols);
171  for(auto colp : cols)
172  commit(colp);
173  response();
174  }
175 
177  void commit(const cid_t cid) {
178  commit(next(cid));
179  }
180 
181  void commit(Column* colp) {
183  if(colp && !colp->empty())
184  _execute(colp);
185  response();
186  }
187 
188  protected:
189 
190  virtual void _execute(Column* colp) {
191  default_executor(colp);
192  }
193 
194  virtual ~Base() noexcept { }
195 
196  private:
197 
198  void default_executor(Column* colp);
199 
201 };
202 
203 
204 }}}}}
205 
206 
207 #endif // swcdb_db_client_Query_Update_Handlers_Base_h
SWC::Core::AtomicBase::compare_exchange_weak
constexpr SWC_CAN_INLINE bool compare_exchange_weak(T &at, T value) noexcept
Definition: Atomic.h:52
SWC::client::Query::Update::Handlers::Base::Column::size
virtual size_t size() noexcept=0
Cell.h
SWC::client::Query::Update::Handlers::Base::requires_commit
virtual bool requires_commit() noexcept=0
Clients.h
CompletionCounter.h
SWC::Core::Atomic< int >
SWC::client::Query::Update::Handlers::Base::Column::empty
virtual bool empty() noexcept=0
SWC::client::Query::Update::Handlers::Base::Ptr
std::shared_ptr< Base > Ptr
Definition: Base.h:27
SWC::client::Clients::Ptr
ClientsPtr Ptr
Definition: Clients.h:58
SWC::DB::Types::Column
Column
Definition: Column.h:18
SWC::client::Query::Update::Handlers::Base::commit
SWC_CAN_INLINE void commit(const cid_t cid)
Definition: Base.h:177
SWC::client::Query::Update::Handlers::Base::Column::size_bytes
virtual size_t size_bytes() noexcept=0
SWC::client::Query::Update::Handlers::Base::timeout_ratio
Core::Atomic< uint32_t > timeout_ratio
Definition: Base.h:111
SWC::client::Query::Update::Handlers::Base::Column::Ptr
std::shared_ptr< Column > Ptr
Definition: Base.h:32
SWC::client::Query::Update::Handlers::Base::Colms
Core::Vector< Column * > Colms
Definition: Base.h:102
SWC::client::Query::Update::Handlers::Base::size_bytes
virtual size_t size_bytes() noexcept=0
SWC::client::Query::Update::Handlers::Base::commit
void commit()
Definition: Base.h:167
SWC::DB::Types::KeySeq
KeySeq
Definition: KeySeq.h:13
SWC::client::Query::Update::Handlers::Base::next
virtual void next(Colms &cols) noexcept=0
SWC::client::Query::Update::Handlers::Base::commit
void commit(Column *colp)
Definition: Base.h:181
SWC::Core::AtomicBase::store
constexpr SWC_CAN_INLINE void store(T v) noexcept
Definition: Atomic.h:37
SWC::Error::OK
@ OK
Definition: Error.h:45
SWC_CAN_INLINE
#define SWC_CAN_INLINE
Definition: Compat.h:102
SWC::client::Query::Update::Handlers::Base::Column::get_buff
SWC_CAN_INLINE DynamicBuffer::Ptr get_buff(size_t buff_sz, bool &more)
Definition: Base.h:84
SWC::client::Query::Update::Handlers::Base::buff_sz
Core::Atomic< uint32_t > buff_sz
Definition: Base.h:112
SWC::client::Query::Update::Handlers::Base::Column::error
virtual int error() noexcept=0
SWC::client::Query::Update::Handlers::Base::Column::get_key_next
virtual DB::Cell::Key::Ptr get_key_next(const DB::Cell::Key &eval_key, bool start_key=false)=0
SWC::client::Query::Update::Handlers::Base::executor
const Clients::Flag executor
Definition: Base.h:114
SWC
The SWC-DB C++ namespace 'SWC'.
Definition: main.cc:12
SWC::client::Query::Update::Handlers::Base::completion
Core::CompletionCounter< uint64_t > completion
Definition: Base.h:108
SWC::client::Query::Update::Handlers::Base::Base
SWC_CAN_INLINE Base(const Clients::Ptr &a_clients, Clients::Flag a_executor=Clients::Flag::DEFAULT) noexcept
Definition: Base.h:117
Profiling.h
SWC::Core::BufferDyn< StaticBuffer >
SWC::client::Clients::Flag
Flag
Definition: Clients.h:60
SWC::client::Query::Update::Handlers::Base::Column::get_sequence
virtual DB::Types::KeySeq get_sequence() const noexcept=0
SWC::Core::CompletionCounter< uint64_t >
SWC::client::Query::Update::Handlers::Base::Column
Definition: Base.h:30
SWC::client::Query::Update::Handlers::Base::default_executor
void default_executor(Column *colp)
Definition: Base.cc:17
SWC::client::Query::Update::Handlers::Base::Column::get_cid
virtual cid_t get_cid() const noexcept=0
SWC::DynamicBuffer
Core::DynamicBuffer DynamicBuffer
Definition: Buffer.h:330
SWC::client::Query::Update::Handlers::Base::Column::get_buff
virtual bool get_buff(const DB::Cell::Key &key_start, const DB::Cell::Key &key_end, size_t buff_sz, bool &more, DynamicBuffer &cells_buff)=0
SWC::client::Query::Update::Handlers::Base::Column::Column
SWC_CAN_INLINE Column() noexcept
Definition: Base.h:35
SWC::client::Query::Update::Handlers::Base::m_resend_cells
Core::Atomic< size_t > m_resend_cells
Definition: Base.h:200
SWC::cid_t
uint64_t cid_t
Definition: Identifiers.h:16
SWC::client::Query::Update::Handlers::Base::Column::print
virtual void print(std::ostream &out)=0
SWC::Core::AtomicBase::exchange
constexpr SWC_CAN_INLINE T exchange(T value) noexcept
Definition: Atomic.h:47
SWC::client::Query::Update::Handlers::Base::error
virtual int error() noexcept
Definition: Base.h:147
SWC::Core::Vector
Definition: Vector.h:14
SWC::client::Query::Update::Handlers::Base::buff_ahead
Core::Atomic< uint8_t > buff_ahead
Definition: Base.h:113
SWC::client::Query::Update::Handlers::Base::timeout
Core::Atomic< uint32_t > timeout
Definition: Base.h:110
SWC::client::Query::Update::Handlers::Base::get_resend_count
SWC_CAN_INLINE size_t get_resend_count(bool reset=true) noexcept
Definition: Base.h:163
SWC::client::Query::Profiling
Definition: Profiling.h:24
SWC::client::Query::Update::Handlers::Base::Column::get_first_key
virtual DB::Cell::Key::Ptr get_first_key()=0
SWC::Core::CompletionCounter::increment
constexpr SWC_CAN_INLINE void increment(CountT v=1) noexcept
Definition: CompletionCounter.h:32
SWC::Core::AtomicBase::load
constexpr SWC_CAN_INLINE T load() const noexcept
Definition: Atomic.h:42
SWC::client::Query::Update::Handlers::Base::Column::error
virtual void error(int err) noexcept=0
reset
void reset() noexcept
Definition: HeaderBufferInfo.h:10
SWC::client::Query::Update::Handlers::Base::profile
Profiling profile
Definition: Base.h:106
SWC::client::Query::Update::Handlers::Base::_execute
virtual void _execute(Column *colp)
Definition: Base.h:190
SWC::Core::BufferDyn< StaticBuffer >::Ptr
std::shared_ptr< BufferDyn > Ptr
Definition: Buffer.h:138
SWC::client::Query::Update::Handlers::Base::Column::add
virtual size_t add(const DynamicBuffer &cells, const DB::Cell::Key &upto_key, const DB::Cell::Key &from_key, uint32_t skip, bool malformed)=0
SWC::Core::Atomic::fetch_add
constexpr SWC_CAN_INLINE T fetch_add(T v) noexcept
Definition: Atomic.h:93
SWC::client::Query::Update::Handlers::Base::clients
Clients::Ptr clients
Definition: Base.h:105
SWC::client::Query::Update::Handlers::Base::state_error
Core::Atomic< int > state_error
Definition: Base.h:107
SWC::client::Query::Update::Handlers::Base::valid
virtual bool valid() noexcept=0
SWC::client::Query::Update::Handlers::Base::add_resend_count
SWC_CAN_INLINE void add_resend_count(size_t count) noexcept
Definition: Base.h:158
SWC::client::Query::Update::Handlers::Base::empty
virtual bool empty() noexcept=0
SWC::client::Query::Update::Handlers::Base::response
virtual void response(int err=Error::OK)=0
SWC::client::Query::Update::Handlers::Base::~Base
virtual ~Base() noexcept
Definition: Base.h:194
SWC::client::Query::Update::Handlers::Base
Definition: Base.h:25