SWC-DB  v0.5.12 C++ documentations
SWC-DB© (Super Wide Column Database) - High Performance Scalable Database (https://github.com/kashirin-alex/swc-db)
MngdColumns.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_MngdColumns_h
7 #define swcdb_manager_MngdColumns_h
8 
10 #include <forward_list>
11 
12 namespace SWC { namespace Manager {
13 
14 
15 class MngdColumns final {
16  public:
17 
19  public Comm::ResponseCallback {
20  typedef std::shared_ptr<ColumnReq> Ptr;
21  uint64_t id;
24  noexcept : Comm::ResponseCallback(conn, ev), id(0) {
25  }
26  ~ColumnReq() noexcept { }
27  };
28 
29 
35 
36 
37  MngdColumns();
38 
39  MngdColumns(const MngdColumns&) = delete;
40  MngdColumns(MngdColumns&&) = delete;
41  MngdColumns& operator=(const MngdColumns&) = delete;
43 
44  ~MngdColumns() noexcept { }
45 
47  bool running() const noexcept {
48  return m_run;
49  }
50 
51  void stop();
52 
53  void create_schemas_store();
54 
55  void reset(bool schemas_mngr);
56 
57 
58  bool is_schemas_mngr(int& err);
59 
60  bool has_active() noexcept;
61 
62  bool is_active(cid_t cid) noexcept;
63 
64  bool active(cid_t& cid_begin, cid_t& cid_end) noexcept;
65 
66  bool expected_ready() noexcept;
67 
68  void columns_ready(int& err);
69 
70  Column::Ptr get_column(int& err, cid_t cid);
71 
72  void change_active(const cid_t cid_begin, const cid_t cid_end,
73  bool has_cols);
74 
75 
76  void require_sync();
77 
78  void action(const ColumnReq::Ptr& req);
79 
80  void set_expect(cid_t cid_begin, cid_t cid_end, uint64_t total,
81  cids_t&& columns, bool initial);
82 
83  void update_status(Comm::Protocol::Mngr::Params::ColumnMng::Function func,
84  const DB::Schema::Ptr& schema, int err, uint64_t req_id,
85  bool initial=false);
86 
87  void update(Comm::Protocol::Mngr::Params::ColumnMng::Function func,
88  const DB::Schema::Ptr& schema, int err, uint64_t req_id);
89 
90  void remove(const DB::Schema::Ptr& schema, rgrid_t rgrid, uint64_t req_id);
91 
92  void print(std::ostream& out);
93 
94 
95  bool initialize();
96 
97  private:
98 
99  bool columns_load();
100 
102 
103  void create(int &err, DB::Schema::Ptr& schema);
104 
105  void update(int &err, DB::Schema::Ptr& schema, const DB::Schema::Ptr& old);
106 
107  void update_status_ack(
108  Comm::Protocol::Mngr::Params::ColumnMng::Function func,
109  const DB::Schema::Ptr& schema, int err, uint64_t req_id);
110 
111  void run_actions();
112 
113 
115 
116  Core::StateRunning m_columns_load;
117 
118  Core::MutexSptd m_mutex_schemas;
120 
121  Core::MutexSptd m_mutex_active;
126  Core::Atomic<cid_t> m_last_used_cid;
127  std::forward_list<cid_t> m_expected_load;
128 
129  Core::MutexSptd m_mutex_actions;
130  Core::QueueSafe<ColumnReq::Ptr> m_actions;
131  std::unordered_map<uint64_t, ColumnReq::Ptr> m_actions_pending;
132 
133  constexpr static uint64_t STATE_COLUMNS_NOT_INITIALIZED = UINT64_MAX;
134 };
135 
136 
137 }} // namespace SWC::Manager
138 
139 #endif // swcdb_manager_MngdColumns_h
SWC::Manager::MngdColumns::initialize
bool initialize()
Definition: MngdColumns.cc:504
SWC::Manager::MngdColumns::require_sync
void require_sync()
Definition: MngdColumns.cc:229
SWC::Manager::MngdColumns::m_actions_pending
std::unordered_map< uint64_t, ColumnReq::Ptr > m_actions_pending
Definition: MngdColumns.h:131
SWC::Manager::MngdColumns::is_schemas_mngr
bool is_schemas_mngr(int &err)
Definition: MngdColumns.cc:116
SWC::Manager::Column
Definition: Column.h:18
SWC::Manager::MngdColumns::m_last_used_cid
Core::Atomic< cid_t > m_last_used_cid
Definition: MngdColumns.h:126
SWC::Manager::MngdColumns::m_cid_begin
cid_t m_cid_begin
Definition: MngdColumns.h:123
SWC::Manager::MngdColumns::m_columns_load
Core::StateRunning m_columns_load
Definition: MngdColumns.h:116
SWC::Manager::MngdColumns::cfg_delay_cols_init
const Config::Property::Value_int32_g::Ptr cfg_delay_cols_init
Definition: MngdColumns.h:34
SWC::Manager::MngdColumns::get_column
Column::Ptr get_column(int &err, cid_t cid)
Definition: MngdColumns.cc:174
SWC::Manager::MngdColumns::has_active
bool has_active() noexcept
Definition: MngdColumns.cc:133
SWC::Manager::MngdColumns::m_cid_end
cid_t m_cid_end
Definition: MngdColumns.h:124
SWC::Manager::MngdColumns::ColumnReq::Ptr
std::shared_ptr< ColumnReq > Ptr
Definition: MngdColumns.h:20
SWC::Config::Property::Value_uint64_g
Definition: Property.h:624
SWC::Manager::MngdColumns::set_expect
void set_expect(cid_t cid_begin, cid_t cid_end, uint64_t total, cids_t &&columns, bool initial)
Definition: MngdColumns.cc:249
SWC::Manager::MngdColumns::print
void print(std::ostream &out)
Definition: MngdColumns.cc:500
ColumnMng.h
SWC::Manager::MngdColumns::m_schemas_set
Core::AtomicBool m_schemas_set
Definition: MngdColumns.h:119
SWC::Manager::MngdColumns::is_active
bool is_active(cid_t cid) noexcept
Definition: MngdColumns.cc:139
SWC::Manager::MngdColumns::create
void create(int &err, DB::Schema::Ptr &schema)
Definition: MngdColumns.cc:722
SWC::Manager::MngdColumns::change_active
void change_active(const cid_t cid_begin, const cid_t cid_end, bool has_cols)
Definition: MngdColumns.cc:193
SWC::Manager::MngdColumns::m_mutex_active
Core::MutexSptd m_mutex_active
Definition: MngdColumns.h:121
SWC::Manager::MngdColumns::active
bool active(cid_t &cid_begin, cid_t &cid_end) noexcept
Definition: MngdColumns.cc:146
SWC::Manager::MngdColumns::ColumnReq::id
uint64_t id
Definition: MngdColumns.h:21
SWC::Manager::MngdColumns::update_status
void update_status(Comm::Protocol::Mngr::Params::ColumnMng::Function func, const DB::Schema::Ptr &schema, int err, uint64_t req_id, bool initial=false)
Definition: MngdColumns.cc:304
SWC::Manager::MngdColumns::m_run
Core::AtomicBool m_run
Definition: MngdColumns.h:114
SWC::Manager::MngdColumns::remove
void remove(const DB::Schema::Ptr &schema, rgrid_t rgrid, uint64_t req_id)
Definition: MngdColumns.cc:407
SWC::Manager::MngdColumns::ColumnReq::ColumnReq
SWC_CAN_INLINE ColumnReq(const Comm::ConnHandlerPtr &conn, const Comm::Event::Ptr &ev) noexcept
Definition: MngdColumns.h:23
SWC::Manager::MngdColumns::columns_ready
void columns_ready(int &err)
Definition: MngdColumns.cc:161
SWC::Manager::MngdColumns::m_expected_load
std::forward_list< cid_t > m_expected_load
Definition: MngdColumns.h:127
SWC::Manager::MngdColumns::ColumnReq
Definition: MngdColumns.h:19
SWC_CAN_INLINE
#define SWC_CAN_INLINE
Definition: Compat.h:102
SWC::Manager::MngdColumns::operator=
MngdColumns & operator=(const MngdColumns &)=delete
SWC::Manager::MngdColumns::m_cid_active
bool m_cid_active
Definition: MngdColumns.h:122
SWC::Manager::MngdColumns::cfg_schema_replication
const Config::Property::Value_uint8_g::Ptr cfg_schema_replication
Definition: MngdColumns.h:30
SWC::Manager::MngdColumns::operator=
MngdColumns & operator=(MngdColumns &&)=delete
SWC::Manager::MngdColumns::get_next_cid
cid_t get_next_cid()
Definition: MngdColumns.cc:708
SWC::Manager::MngdColumns::running
SWC_CAN_INLINE bool running() const noexcept
Definition: MngdColumns.h:47
SWC
The SWC-DB C++ namespace 'SWC'.
Definition: main.cc:12
SWC::Manager::MngdColumns::cfg_schemas_store_encoder
const Config::Property::Value_enum_g::Ptr cfg_schemas_store_encoder
Definition: MngdColumns.h:33
SWC::Manager::MngdColumns::cfg_schemas_store_blksz
const Config::Property::Value_int32_g::Ptr cfg_schemas_store_blksz
Definition: MngdColumns.h:32
SWC::Manager::MngdColumns::m_expected_remain
uint64_t m_expected_remain
Definition: MngdColumns.h:125
SWC::Manager::MngdColumns::reset
void reset(bool schemas_mngr)
Definition: MngdColumns.cc:98
SWC::rgrid_t
uint64_t rgrid_t
Definition: Identifiers.h:18
SWC::Manager::MngdColumns::MngdColumns
MngdColumns(MngdColumns &&)=delete
SWC::Comm::Protocol::Mngr::Params::Report::Function
Function
Definition: Report.h:26
SWC::Config::Property::Value_uint8_g
Definition: Property.h:511
SWC::Comm::ResponseCallback
Definition: ResponseCallback.h:14
SWC::cid_t
uint64_t cid_t
Definition: Identifiers.h:16
SWC::Comm::ConnHandlerPtr
std::shared_ptr< ConnHandler > ConnHandlerPtr
Definition: AppContext.h:17
SWC::Comm::Protocol::Mngr::Params::ColumnMng
Definition: ColumnMng.h:18
SWC::Manager::MngdColumns::~MngdColumns
~MngdColumns() noexcept
Definition: MngdColumns.h:44
SWC::Config::Property::Value_enum_g
Definition: Property.h:662
SWC::Core::Vector< cid_t, cid_t >
SWC::Manager::MngdColumns::create_schemas_store
void create_schemas_store()
Definition: MngdColumns.cc:80
SWC::Manager::MngdColumns::update
void update(Comm::Protocol::Mngr::Params::ColumnMng::Function func, const DB::Schema::Ptr &schema, int err, uint64_t req_id)
Definition: MngdColumns.cc:808
SWC::Manager::MngdColumns::ColumnReq::~ColumnReq
~ColumnReq() noexcept
Definition: MngdColumns.h:26
SWC::Manager::MngdColumns::m_mutex_actions
Core::MutexSptd m_mutex_actions
Definition: MngdColumns.h:129
SWC::Manager::MngdColumns
Definition: MngdColumns.h:15
SWC::Manager::MngdColumns::STATE_COLUMNS_NOT_INITIALIZED
constexpr static uint64_t STATE_COLUMNS_NOT_INITIALIZED
Definition: MngdColumns.h:133
SWC::Manager::MngdColumns::cfg_schemas_store_cap
const Config::Property::Value_uint64_g::Ptr cfg_schemas_store_cap
Definition: MngdColumns.h:31
SWC::Manager::MngdColumns::MngdColumns
MngdColumns(const MngdColumns &)=delete
SWC::Manager::MngdColumns::stop
void stop()
Definition: MngdColumns.cc:48
SWC::Manager::MngdColumns::expected_ready
bool expected_ready() noexcept
Definition: MngdColumns.cc:156
SWC::Manager::MngdColumns::run_actions
void run_actions()
Definition: MngdColumns.cc:901
SWC::Manager::MngdColumns::columns_load
bool columns_load()
Definition: MngdColumns.cc:605
SWC::Manager::MngdColumns::MngdColumns
MngdColumns()
Definition: MngdColumns.cc:22
SWC::Manager::MngdColumns::m_mutex_schemas
Core::MutexSptd m_mutex_schemas
Definition: MngdColumns.h:118
SWC::Comm::Event::Ptr
std::shared_ptr< Event > Ptr
Definition: Event.h:33
SWC::Manager::MngdColumns::m_actions
Core::QueueSafe< ColumnReq::Ptr > m_actions
Definition: MngdColumns.h:130
SWC::Config::Property::Value_int32_g
Definition: Property.h:586
SWC::Manager::MngdColumns::update_status_ack
void update_status_ack(Comm::Protocol::Mngr::Params::ColumnMng::Function func, const DB::Schema::Ptr &schema, int err, uint64_t req_id)
Definition: MngdColumns.cc:818
SWC::Core::AtomicBool
AtomicBase< bool > AtomicBool
Definition: Atomic.h:63
SWC::Manager::MngdColumns::action
void action(const ColumnReq::Ptr &req)
Definition: MngdColumns.cc:238