SWC-DB  v0.5.12 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  Column(Column&&) = delete;
38  Column(const Column&) = delete;
39  Column& operator=(const Column&) = delete;
40  Column& operator=(Column&&) = delete;
41 
42  virtual void print(std::ostream& out) = 0;
43 
44  virtual cid_t get_cid() const noexcept = 0;
45 
46  virtual DB::Types::KeySeq get_sequence() const noexcept = 0;
47 
48  virtual bool empty() noexcept = 0;
49 
50  virtual size_t size() noexcept = 0;
51 
52  virtual size_t size_bytes() noexcept = 0;
53 
54  virtual DB::Cell::Key::Ptr get_first_key() = 0;
55 
56  virtual DB::Cell::Key::Ptr get_key_next(const DB::Cell::Key& eval_key,
57  bool start_key=false) = 0;
58 
59  virtual size_t add(const DynamicBuffer& cells,
60  const DB::Cell::Key& upto_key,
61  const DB::Cell::Key& from_key,
62  uint32_t skip, bool malformed) = 0;
63 
64  virtual size_t add(const DynamicBuffer& cells, bool finalized=false) = 0;
65 
66  virtual void add(const DB::Cells::Cell& cell, bool finalized=false) = 0;
67 
68  virtual bool get_buff(const DB::Cell::Key& key_start,
69  const DB::Cell::Key& key_end,
70  size_t buff_sz, bool& more,
71  DynamicBuffer& cells_buff) = 0;
72 
73  virtual bool get_buff(size_t buff_sz, bool& more,
74  DynamicBuffer& cells_buff) = 0;
75 
77  DynamicBuffer::Ptr get_buff(const DB::Cell::Key& key_start,
78  const DB::Cell::Key& key_end,
79  size_t buff_sz, bool& more) {
80  DynamicBuffer cells_buff;
81  return DynamicBuffer::Ptr(
82  get_buff(key_start, key_end, buff_sz, more, cells_buff)
83  ? new DynamicBuffer(std::move(cells_buff))
84  : nullptr
85  );
86  }
87 
89  DynamicBuffer::Ptr get_buff(size_t buff_sz, bool& more) {
90  DynamicBuffer cells_buff;
91  return DynamicBuffer::Ptr(
92  get_buff(buff_sz, more, cells_buff)
93  ? new DynamicBuffer(std::move(cells_buff))
94  : nullptr
95  );
96  }
97 
98  virtual void error(int err) noexcept = 0;
99 
100  virtual int error() noexcept = 0;
101 
102  protected:
103 
104  virtual ~Column() noexcept { }
105 
106  };
108 
109 
114 
120 
122  Base(const Clients::Ptr& a_clients,
123  Clients::Flag a_executor=Clients::Flag::DEFAULT) noexcept
124  : clients(a_clients),
125  profile(),
127  timeout(clients->cfg_send_timeout->get()),
128  timeout_ratio(clients->cfg_send_timeout_ratio->get()),
129  buff_sz(clients->cfg_send_buff_sz->get()),
130  buff_ahead(clients->cfg_send_ahead->get()),
131  executor(a_executor),
132  m_resend_cells(0) {
133  if(!timeout_ratio)
134  timeout_ratio.store(1000);
135  }
136 
137  Base(Base&&) = delete;
138  Base(const Base&) = delete;
139  Base& operator=(const Base&) = delete;
140  Base& operator=(Base&&) = delete;
141 
142  virtual bool valid() noexcept = 0;
143 
144  virtual void response(int err=Error::OK) = 0;
145 
146  virtual bool requires_commit() noexcept = 0;
147 
148  virtual bool empty() noexcept = 0;
149 
150  virtual size_t size_bytes() noexcept = 0;
151 
152  virtual void next(Colms& cols) noexcept = 0;
153 
154  virtual Column* next(cid_t cid) noexcept = 0;
155 
156  virtual void error(cid_t cid, int err) noexcept = 0;
157 
158 
159  virtual int error() noexcept {
160  return state_error;
161  }
162 
163  virtual void error(int err) noexcept {
164  int at = Error::OK;
166  }
167 
168 
170  void add_resend_count(size_t count) noexcept {
171  m_resend_cells.fetch_add(count);
172  }
173 
175  size_t get_resend_count(bool reset = true) noexcept {
177  }
178 
179  void commit() {
181  Colms cols;
182  next(cols);
183  for(auto colp : cols)
184  commit(colp);
185  response();
186  }
187 
189  void commit(const cid_t cid) {
190  commit(next(cid));
191  }
192 
193  void commit(Column* colp) {
195  if(colp && !colp->empty())
196  _execute(colp);
197  response();
198  }
199 
200  protected:
201 
202  virtual void _execute(Column* colp) {
203  default_executor(colp);
204  }
205 
206  virtual ~Base() noexcept { }
207 
208  private:
209 
210  void default_executor(Column* colp);
211 
213 };
214 
215 
216 }}}}}
217 
218 
219 #endif // swcdb_db_client_Query_Update_Handlers_Base_h
SWC::client::Query::Update::Handlers::Base::Column::Column
Column(const Column &)=delete
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::client::Query::Update::Handlers::Base::Base
Base(Base &&)=delete
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:189
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:116
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:107
SWC::client::Query::Update::Handlers::Base::operator=
Base & operator=(const Base &)=delete
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:179
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:193
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:89
SWC::client::Query::Update::Handlers::Base::buff_sz
Core::Atomic< uint32_t > buff_sz
Definition: Base.h:117
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:119
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:113
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:122
SWC::client::Query::Update::Handlers::Base::Column::operator=
Column & operator=(Column &&)=delete
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:341
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:212
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:159
SWC::client::Query::Update::Handlers::Base::Column::Column
Column(Column &&)=delete
SWC::Core::Vector
Definition: Vector.h:14
SWC::client::Query::Update::Handlers::Base::buff_ahead
Core::Atomic< uint8_t > buff_ahead
Definition: Base.h:118
SWC::client::Query::Update::Handlers::Base::timeout
Core::Atomic< uint32_t > timeout
Definition: Base.h:115
SWC::client::Query::Update::Handlers::Base::get_resend_count
SWC_CAN_INLINE size_t get_resend_count(bool reset=true) noexcept
Definition: Base.h:175
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::operator=
Base & operator=(Base &&)=delete
SWC::client::Query::Update::Handlers::Base::Base
Base(const Base &)=delete
SWC::client::Query::Update::Handlers::Base::Column::error
virtual void error(int err) noexcept=0
SWC::client::Query::Update::Handlers::Base::Column::operator=
Column & operator=(const Column &)=delete
reset
void reset() noexcept
Definition: HeaderBufferInfo.h:10
SWC::client::Query::Update::Handlers::Base::profile
Profiling profile
Definition: Base.h:111
SWC::client::Query::Update::Handlers::Base::_execute
virtual void _execute(Column *colp)
Definition: Base.h:202
SWC::Core::BufferDyn< StaticBuffer >::Ptr
std::shared_ptr< BufferDyn > Ptr
Definition: Buffer.h:141
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:110
SWC::client::Query::Update::Handlers::Base::state_error
Core::Atomic< int > state_error
Definition: Base.h:112
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:170
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:206
SWC::client::Query::Update::Handlers::Base
Definition: Base.h:25