SWC-DB  v0.5.12 C++ documentations
SWC-DB© (Super Wide Column Database) - High Performance Scalable Database (https://github.com/kashirin-alex/swc-db)
Range.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 
7 #ifndef swcdb_ranger_db_Range_h
8 #define swcdb_ranger_db_Range_h
9 
10 
12 #include "swcdb/core/QueueSafe.h"
13 #include "swcdb/db/Types/Range.h"
15 
22 
23 
24 namespace SWC { namespace Ranger {
25 
26 
27 class Range final : public std::enable_shared_from_this<Range> {
28 
29  class MetaRegOnLoadReq;
30  class MetaRegOnAddReq;
31 
32  struct TaskRunQueueScan;
33  struct TaskRunQueueAdd;
34 
35  public:
36 
37  static constexpr const char CELLSTORES_BAK_DIR[] = "cs_bak";
38  static constexpr const char CELLSTORES_RCVD_DIR[] = "cs_rcvd";
39  static constexpr const char CELLSTORES_TMP_DIR[] = "cs_tmp";
40  static constexpr const char LOG_TMP_DIR[] = "log_tmp";
41 
42  enum State : uint8_t {
48  };
49 
50  // Compact states by process weight
51  static const uint8_t COMPACT_NONE = 0x00;
52  static const uint8_t COMPACT_CHECKING = 0x01;
53  static const uint8_t COMPACT_COMPACTING = 0x02;
54  static const uint8_t COMPACT_PREPARING = 0x03;
55  static const uint8_t COMPACT_APPLYING = 0x04;
56 
58  const rid_t rid;
61 
62  Range(const ColumnCfg::Ptr& cfg, const rid_t rid);
63 
64  void init();
65 
66  ~Range() noexcept;
67 
68  std::string get_path(const std::string suff) const;
69 
70  std::string get_path_cs(const csid_t csid) const;
71 
72  std::string get_path_cs_on(const std::string folder,
73  const csid_t csid) const;
74 
75  void set_rgr(int &err) const noexcept;
76 
77  void remove_rgr(int &err) const noexcept;
78 
80 
81  void get_interval(DB::Cells::Interval& interval);
82 
83  bool can_be_merged();
84 
85  void _get_interval(DB::Cells::Interval& interval) const;
86 
87  void _get_interval(DB::Cell::Key& key_begin, DB::Cell::Key& key_end) const;
88 
89  bool _is_any_begin() const;
90 
91  bool _is_any_end() const;
92 
93  void schema_update(bool compact);
94 
95  void set_state(State new_state);
96 
97  void reset_load_revision();
98 
99  int64_t get_load_revision();
100 
101  bool is_loaded();
102 
103  bool deleted();
104 
105  void state(int& err) const;
106 
107  bool state_unloading() const noexcept;
108 
109  void add(Callback::RangeQueryUpdate* req);
110 
111  void scan(ReqScan::Ptr&& req);
112 
113  void scan_internal(ReqScan::Ptr&& req);
114 
115  void load(const Callback::RangeLoad::Ptr& req);
116 
117  void internal_take_ownership(int &err, const Callback::RangeLoad::Ptr& req);
118 
119  void internal_unload(bool completely, bool& chk_empty);
120 
121  void issue_unload();
122 
123  void remove(const Callback::ColumnDelete::Ptr& req);
124 
125  void internal_remove(int &err);
126 
127  void wait_queue();
128 
129  bool compacting();
130 
131  bool compact_apply();
132 
133  void compacting(uint8_t state);
134 
135  bool compacting_ifnot_applying(uint8_t state);
136 
137  bool compact_possible(bool minor=true);
138 
139  void compact_require(bool require);
140 
141  bool compact_required();
142 
143  void apply_new(int &err,
144  CellStore::Writers& w_cellstores,
145  CommitLog::Fragments::Vec& fragments_old,
146  const Query::Update::BaseMeta::Ptr& hdlr=nullptr);
147 
148  void expand_and_align(bool w_chg_chk,
149  const Query::Update::BaseMeta::Ptr& hdlr);
150 
151  void internal_create_folders(int& err);
152 
153  void internal_create(int &err, const CellStore::Writers& w_cellstores);
154 
155  void internal_create(int &err, CellStore::Readers::Vec& mv_css);
156 
157  void check_meta(const Query::Select::CheckMeta::Ptr& hdlr);
158 
159  void print(std::ostream& out, bool minimal=true);
160 
161  private:
162 
163  void last_rgr_chk(int &err, const Callback::RangeLoad::Ptr& req);
164 
165  void load(int &err, const Callback::RangeLoad::Ptr& req);
166 
167  void loaded(int err, const Callback::RangeLoad::Ptr& req);
168 
169  void on_change(bool removal,
170  const Query::Update::BaseMeta::Ptr& hdlr,
171  const DB::Cell::Key* old_key_begin=nullptr);
172 
173  bool wait(uint8_t from_state=COMPACT_CHECKING, bool incr=false);
174 
175  void _run_scan_queue();
176 
177  void run_add_queue();
178 
179  void _run_add_queue();
180 
181  const std::string m_path;
182  Core::MutexAtomic m_mutex_intval;
183  Core::MutexAtomic m_mutex_intval_alignment;
184  DB::Cells::Interval m_interval;
185  Core::Atomic<int64_t> m_load_revision;
186 
187  std::shared_mutex m_mutex;
188 
189  Core::Atomic<State> m_state;
190  uint8_t m_compacting;
192 
195 
196  Core::Atomic<uint32_t> m_adding;
197  Core::QueuePointer<Callback::RangeQueryUpdate*> m_q_add;
198  Core::QueueSafe<ReqScan::Ptr> m_q_scan;
199 
200  std::condition_variable_any m_cv;
201 
202  //Core::Atomic<size_t> m_inbytes;
203 };
204 
205 
206 }}
207 
208 
209 
210 #endif //swcdb_ranger_db_Range_h
SWC::Ranger::Range::compacting
bool compacting()
Definition: Range.cc:541
SWC::Ranger::Range::apply_new
void apply_new(int &err, CellStore::Writers &w_cellstores, CommitLog::Fragments::Vec &fragments_old, const Query::Update::BaseMeta::Ptr &hdlr=nullptr)
Definition: Range.cc:690
SWC::Ranger::Range::UNLOADING
@ UNLOADING
Definition: Range.h:46
SWC::Ranger::Range::get_path_cs_on
std::string get_path_cs_on(const std::string folder, const csid_t csid) const
Definition: Range.cc:158
SWC::Ranger::Range::CELLSTORES_RCVD_DIR
static constexpr const char CELLSTORES_RCVD_DIR[]
Definition: Range.h:38
SWC::Ranger::Range::add
void add(Callback::RangeQueryUpdate *req)
Definition: Range.cc:281
SWC::Ranger::ReqScan
Definition: ReqScan.h:21
SWC::Ranger::Range::loaded
void loaded(int err, const Callback::RangeLoad::Ptr &req)
Definition: Range.cc:1054
SWC::Ranger::Range::_run_scan_queue
void _run_scan_queue()
Definition: Range.cc:306
SWC::Ranger::Range::Range
Range(const ColumnCfg::Ptr &cfg, const rid_t rid)
Definition: Range.cc:119
SWC::Ranger::Range::TaskRunQueueAdd
Definition: Range.cc:101
SWC::Ranger::Range::internal_take_ownership
void internal_take_ownership(int &err, const Callback::RangeLoad::Ptr &req)
Definition: Range.cc:387
SWC::Ranger::Range::~Range
~Range() noexcept
Definition: Range.cc:140
SWC::Ranger::Range::LOG_TMP_DIR
static constexpr const char LOG_TMP_DIR[]
Definition: Range.h:40
SWC::Ranger::Range::m_q_scan
Core::QueueSafe< ReqScan::Ptr > m_q_scan
Definition: Range.h:198
SWC::Ranger::Range::get_path
std::string get_path(const std::string suff) const
Definition: Range.cc:144
SWC::Ranger::Range::expand_and_align
void expand_and_align(bool w_chg_chk, const Query::Update::BaseMeta::Ptr &hdlr)
Definition: Range.cc:704
SWC::Ranger::Range::deleted
bool deleted()
Definition: Range.cc:259
SWC::Ranger::Range::issue_unload
void issue_unload()
Definition: Range.cc:473
SWC::Ranger::Range::COMPACT_CHECKING
static const uint8_t COMPACT_CHECKING
Definition: Range.h:52
SWC::Ranger::Range::remove_rgr
void remove_rgr(int &err) const noexcept
Definition: Range.cc:172
SWC::Ranger::Range::check_meta
void check_meta(const Query::Select::CheckMeta::Ptr &hdlr)
Definition: Range.cc:956
SWC::Ranger::Range::load
void load(const Callback::RangeLoad::Ptr &req)
Definition: Range.cc:357
SWC::csid_t
uint32_t csid_t
Definition: Identifiers.h:19
SWC::Ranger::Range::_is_any_begin
bool _is_any_begin() const
Definition: Range.cc:221
SWC::Ranger::Range::schema_update
void schema_update(bool compact)
Definition: Range.cc:231
SWC::Ranger::Range::cfg
const ColumnCfg::Ptr cfg
Definition: Range.h:57
SWC::Ranger::Range::can_be_merged
bool can_be_merged()
Definition: Range.cc:194
CheckMeta.h
ColumnCfg.h
SWC::Ranger::Range::wait
bool wait(uint8_t from_state=COMPACT_CHECKING, bool incr=false)
Definition: Range.cc:1084
SWC::Ranger::CellStore::Writers
Core::Vector< Write::Ptr > Writers
Definition: CellStore.h:175
SWC::DB::Cell::Key
Definition: CellKey.h:24
SWC::Ranger::Range::_run_add_queue
void _run_add_queue()
Definition: Range.cc:1153
SWC::Ranger::Range::m_mutex_intval_alignment
Core::MutexAtomic m_mutex_intval_alignment
Definition: Range.h:183
SWC::Ranger::Range::m_q_add
Core::QueuePointer< Callback::RangeQueryUpdate * > m_q_add
Definition: Range.h:197
SWC::Ranger::Range::run_add_queue
void run_add_queue()
Definition: Range.cc:1100
BaseMeta.h
RangeBase.h
SWC::Ranger::Range::internal_create_folders
void internal_create_folders(int &err)
Definition: Range.cc:741
SWC::Ranger::Range::scan
void scan(ReqScan::Ptr &&req)
Definition: Range.cc:286
SWC::Ranger::Range::internal_create
void internal_create(int &err, const CellStore::Writers &w_cellstores)
Definition: Range.cc:750
SWC::Ranger::Range::COMPACT_PREPARING
static const uint8_t COMPACT_PREPARING
Definition: Range.h:54
SWC::Ranger::Range::init
void init()
Definition: Range.cc:136
SWC::Ranger::Range::MetaRegOnLoadReq
Definition: Range.cc:21
SWC::Ranger::Range::get_interval
void get_interval(DB::Cells::Interval &interval)
Definition: Range.cc:188
SWC::Ranger::Range::LOADED
@ LOADED
Definition: Range.h:45
SWC::Ranger::Range::m_path
const std::string m_path
Definition: Range.h:181
Range.h
SWC::Ranger::Range::m_q_run_scan
bool m_q_run_scan
Definition: Range.h:194
RangeQueryUpdate.h
SWC::Ranger::Range::State
State
Definition: Range.h:42
SWC
The SWC-DB C++ namespace 'SWC'.
Definition: main.cc:12
SWC::Ranger::Range::m_state
Core::Atomic< State > m_state
Definition: Range.h:189
SWC::Ranger::Range::CELLSTORES_BAK_DIR
static constexpr const char CELLSTORES_BAK_DIR[]
Definition: Range.h:37
SWC::Ranger::Range::reset_load_revision
void reset_load_revision()
Definition: Range.cc:243
SWC::Ranger::Range::internal_remove
void internal_remove(int &err)
Definition: Range.cc:514
SWC::Ranger::Range::m_interval
DB::Cells::Interval m_interval
Definition: Range.h:184
SWC::Ranger::Range::print
void print(std::ostream &out, bool minimal=true)
Definition: Range.cc:797
SWC::Ranger::Range::rid
const rid_t rid
Definition: Range.h:58
SWC::Ranger::Range::last_rgr_chk
void last_rgr_chk(int &err, const Callback::RangeLoad::Ptr &req)
Definition: Range.cc:811
SWC::Ranger::Range::CELLSTORES_TMP_DIR
static constexpr const char CELLSTORES_TMP_DIR[]
Definition: Range.h:39
ReqScan.h
SWC::Ranger::Range::m_compacting
uint8_t m_compacting
Definition: Range.h:190
SWC::Ranger::Range::known_interval_count
uint24_t known_interval_count()
Definition: Range.cc:180
SWC::Ranger::Range::state_unloading
bool state_unloading() const noexcept
Definition: Range.cc:274
QueueSafe.h
SWC::Ranger::Range::m_mutex
std::shared_mutex m_mutex
Definition: Range.h:187
SWC::Ranger::Range::internal_unload
void internal_unload(bool completely, bool &chk_empty)
Definition: Range.cc:440
SWC::Ranger::Range::COMPACT_NONE
static const uint8_t COMPACT_NONE
Definition: Range.h:51
SWC::Ranger::Range::NOTLOADED
@ NOTLOADED
Definition: Range.h:43
SWC::Core::NotMovableSharedPtr< ColumnCfg >
SWC::Ranger::Range::get_path_cs
std::string get_path_cs(const csid_t csid) const
Definition: Range.cc:153
SWC::Ranger::Range::scan_internal
void scan_internal(ReqScan::Ptr &&req)
Definition: Range.cc:353
SWC::Ranger::Range::is_loaded
bool is_loaded()
Definition: Range.cc:253
QueuePointer.h
RangeBlocks.h
SWC::Ranger::Range::COMPACT_APPLYING
static const uint8_t COMPACT_APPLYING
Definition: Range.h:55
SWC::Ranger::Range
Definition: Range.h:27
SWC::Ranger::Range::on_change
void on_change(bool removal, const Query::Update::BaseMeta::Ptr &hdlr, const DB::Cell::Key *old_key_begin=nullptr)
Definition: Range.cc:614
SWC::Ranger::Range::TaskRunQueueScan
Definition: Range.cc:86
SWC::Ranger::Range::COMPACT_COMPACTING
static const uint8_t COMPACT_COMPACTING
Definition: Range.h:53
SWC::Ranger::Range::m_mutex_intval
Core::MutexAtomic m_mutex_intval
Definition: Range.h:182
SWC::uint24_t
Core::uint24_t uint24_t
Definition: BitFieldInt.h:401
SWC::Ranger::Range::compact_apply
bool compact_apply()
Definition: Range.cc:547
SWC::Ranger::Range::LOADING
@ LOADING
Definition: Range.h:44
SWC::Ranger::Range::m_q_run_add
bool m_q_run_add
Definition: Range.h:193
SWC::Ranger::Range::m_load_revision
Core::Atomic< int64_t > m_load_revision
Definition: Range.h:185
SWC::Ranger::Range::remove
void remove(const Callback::ColumnDelete::Ptr &req)
Definition: Range.cc:480
SWC::Ranger::Range::prev_range_end
DB::Cell::Key prev_range_end
Definition: Range.h:60
SWC::Ranger::Range::set_rgr
void set_rgr(int &err) const noexcept
Definition: Range.cc:163
SWC::rid_t
uint64_t rid_t
Definition: Identifiers.h:17
SWC::Ranger::Range::state
void state(int &err) const
Definition: Range.cc:265
SWC::Ranger::Blocks
Definition: RangeBlocks.h:23
SWC::Ranger::Range::m_require_compact
Core::AtomicBool m_require_compact
Definition: Range.h:191
SWC::Ranger::Range::compact_require
void compact_require(bool require)
Definition: Range.cc:605
SWC::Ranger::Range::compacting_ifnot_applying
bool compacting_ifnot_applying(uint8_t state)
Definition: Range.cc:573
SWC::Ranger::Range::set_state
void set_state(State new_state)
Definition: Range.cc:237
SWC::Ranger::Range::get_load_revision
int64_t get_load_revision()
Definition: Range.cc:248
SWC::Ranger::Range::_is_any_end
bool _is_any_end() const
Definition: Range.cc:226
SWC::Ranger::Range::wait_queue
void wait_queue()
Definition: Range.cc:535
SWC::Ranger::Range::m_cv
std::condition_variable_any m_cv
Definition: Range.h:200
SWC::Ranger::Range::MetaRegOnAddReq
Definition: Range.cc:1109
SWC::Ranger::Range::compact_possible
bool compact_possible(bool minor=true)
Definition: Range.cc:595
SWC::Ranger::Range::DELETED
@ DELETED
Definition: Range.h:47
SWC::Ranger::Range::compact_required
bool compact_required()
Definition: Range.cc:610
SWC::Ranger::Range::blocks
Blocks blocks
Definition: Range.h:59
SWC::Ranger::Range::_get_interval
void _get_interval(DB::Cells::Interval &interval) const
Definition: Range.cc:209
SWC::Ranger::Range::m_adding
Core::Atomic< uint32_t > m_adding
Definition: Range.h:196
SWC::Core::AtomicBool
AtomicBase< bool > AtomicBool
Definition: Atomic.h:63