SWC-DB  v0.5.12 C++ documentations
SWC-DB© (Super Wide Column Database) - High Performance Scalable Database (https://github.com/kashirin-alex/swc-db)
CellStoreBlock.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_CellStoreBlock_h
8 #define swcdb_ranger_db_CellStoreBlock_h
9 
11 
12 
13 namespace SWC { namespace Ranger { namespace CellStore {
14 
15 // Forward Declaration
16 class Read;
17 
18 
19 namespace Block {
20 
21 /* file-format:
22  header: i8(encoder), i32(enc-len), i32(len),
23  i32(cells), i32(checksum-data), i32(checksum)
24  data: [cell]
25 */
26 
27 
28 class Read final {
29  public:
30  typedef Read* Ptr;
31 
32  enum State : uint8_t {
35  LOADED
36  };
37 
38  static const char* SWC_CONST_FUNC to_string(const State state) noexcept;
39 
40  /*
41  static Ptr make(int& err, CellStore::Read* cellstore,
42  const DB::Cells::Interval& interval,
43  const uint64_t offset);
44  */
45 
46  static void load_header(int& err, FS::SmartFd::Ptr& smartfd,
47  Header& header);
48 
49  const Header header;
51 
52  explicit Read(Header&& header) noexcept;
53 
54  void init(CellStore::Read* cellstore) noexcept;
55 
56  Read(const Read&) = delete;
57 
58  Read(const Read&&) = delete;
59 
60  Read& operator=(const Read&) = delete;
61 
62  ~Read() noexcept;
63 
64  //size_t size_of() const noexcept;
65 
66  bool load(BlockLoader* loader);
67 
68  void load();
69 
70  void load_cells(int& err, Ranger::Block::Ptr cells_block);
71 
72  void processing_decrement() noexcept;
73 
74  size_t release();
75 
76  bool processing() noexcept;
77 
78  bool loaded() const noexcept;
79 
80  bool loaded(int& err) noexcept;
81 
82  size_t size_bytes(bool only_loaded=false) const noexcept;
83 
84  size_t size_bytes_enc(bool only_loaded=false) const noexcept;
85 
86  void print(std::ostream& out);
87 
88  private:
89 
90  void load_open(int err);
91 
92  void load_read(int err, StaticBuffer&& buffer);
93 
94  void load_finish(int err);
95 
96 
97  Core::MutexSptd m_mutex;
98  Core::Atomic<State> m_state;
99  int m_err;
100  Core::Atomic<uint32_t> m_cells_remain;
101  Core::Atomic<size_t> m_processing;
103  std::queue<BlockLoader*> m_queue;
104 
105 };
106 
107 
108 
109 class Write final {
110  public:
111  typedef std::shared_ptr<Write> Ptr;
112 
113  Write(Header&& header) noexcept;
114 
115  ~Write() noexcept { }
116 
117  static void encode(int& err, DynamicBuffer& cells, DynamicBuffer& output,
118  Header& header);
119 
120  void print(std::ostream& out) const;
121 
122  const Header header;
123 
124 };
125 
126 
127 
128 }}}} // namespace SWC::Ranger::CellStore::Block
129 
130 
131 
133 
134 #endif // swcdb_ranger_db_CellStoreBlock_h
SWC::Ranger::CellStore::Block::Header
Definition: CellStoreBlockHeader.h:23
SWC::Ranger::CellStore::Block::Read::load_cells
void load_cells(int &err, Ranger::Block::Ptr cells_block)
Definition: CellStoreBlock.cc:140
CellStoreBlockHeader.h
SWC::Ranger::Block
Definition: RangeBlock.h:23
SWC::Ranger::CellStore::Block::Read::~Read
~Read() noexcept
Definition: CellStoreBlock.cc:92
SWC::Ranger::CellStore::Block::Read::m_state
Core::Atomic< State > m_state
Definition: CellStoreBlock.h:98
SWC::Ranger::CellStore::Block::Read::load_finish
void load_finish(int err)
Definition: CellStoreBlock.cc:320
SWC::Ranger::CellStore::Block::Read::State
State
Definition: CellStoreBlock.h:32
SWC::Ranger::CellStore::Block::Read::operator=
Read & operator=(const Read &)=delete
SWC::Ranger::CellStore::Block::Read::m_err
int m_err
Definition: CellStoreBlock.h:99
SWC::Ranger::CellStore::Block::Read::header
const Header header
Definition: CellStoreBlock.h:49
SWC::Ranger::CellStore::Block::Read::m_buffer
StaticBuffer m_buffer
Definition: CellStoreBlock.h:102
SWC::Ranger::CellStore::Block::Read::m_cells_remain
Core::Atomic< uint32_t > m_cells_remain
Definition: CellStoreBlock.h:100
SWC::Ranger::CellStore::Block::Read::processing_decrement
void processing_decrement() noexcept
Definition: CellStoreBlock.cc:160
SWC::Ranger::CellStore::Block::Read::Read
Read(const Read &)=delete
SWC::Ranger::CellStore::Block::Write::header
const Header header
Definition: CellStoreBlock.h:122
CellStoreBlockHeader.cc
SWC::Ranger::CellStore::Block::Read::size_bytes_enc
size_t size_bytes_enc(bool only_loaded=false) const noexcept
Definition: CellStoreBlock.cc:217
SWC::Ranger::CellStore::Block::Read::load_open
void load_open(int err)
Definition: CellStoreBlock.cc:235
SWC::Ranger::CellStore::Block::Read::size_bytes
size_t size_bytes(bool only_loaded=false) const noexcept
Definition: CellStoreBlock.cc:212
SWC_CONST_FUNC
#define SWC_CONST_FUNC
Definition: Compat.h:107
SWC::Ranger::CellStore::Block::Write::~Write
~Write() noexcept
Definition: CellStoreBlock.h:115
SWC::Ranger::CellStore::Block::Read::Read
Read(Header &&header) noexcept
Definition: CellStoreBlock.cc:79
SWC::Ranger::CellStore::Block::Read::init
void init(CellStore::Read *cellstore) noexcept
Definition: CellStoreBlock.cc:88
SWC
The SWC-DB C++ namespace 'SWC'.
Definition: main.cc:12
SWC::Core::BufferDyn< StaticBuffer >
SWC::Core::Buffer
Definition: Buffer.h:18
SWC::Ranger::CellStore::Read
Definition: CellStore.h:41
SWC::Ranger::CellStore::Block::Read::NONE
@ NONE
Definition: CellStoreBlock.h:33
SWC::Ranger::CellStore::Block::Read::m_queue
std::queue< BlockLoader * > m_queue
Definition: CellStoreBlock.h:103
SWC::Ranger::BlockLoader
Definition: RangeBlockLoader.h:19
SWC::Ranger::CellStore::Block::Read
Definition: CellStoreBlock.h:28
SWC::Ranger::CellStore::Block::Read::load_header
static void load_header(int &err, FS::SmartFd::Ptr &smartfd, Header &header)
Definition: CellStoreBlock.cc:38
SWC::Ranger::CellStore::Block::Read::m_mutex
Core::MutexSptd m_mutex
Definition: CellStoreBlock.h:97
SWC::Ranger::CellStore::Block::Read::m_processing
Core::Atomic< size_t > m_processing
Definition: CellStoreBlock.h:101
SWC::Ranger::CellStore::Block::Read::loaded
bool loaded() const noexcept
Definition: CellStoreBlock.cc:201
SWC::Ranger::CellStore::Block::Read::LOADED
@ LOADED
Definition: CellStoreBlock.h:35
SWC::Ranger::CellStore::Block::Write
Definition: CellStoreBlock.h:109
SWC::Ranger::CellStore::Block::Read::Ptr
Read * Ptr
Definition: CellStoreBlock.h:30
SWC::FS::SmartFd::Ptr
std::shared_ptr< SmartFd > Ptr
Definition: SmartFd.h:37
SWC::Ranger::CellStore::Block::Read::release
size_t release()
Definition: CellStoreBlock.cc:165
SWC::Ranger::CellStore::Block::Read::LOADING
@ LOADING
Definition: CellStoreBlock.h:34
SWC::Ranger::CellStore::Block::Read::print
void print(std::ostream &out)
Definition: CellStoreBlock.cc:221
SWC::Ranger::CellStore::Block::Read::load_read
void load_read(int err, StaticBuffer &&buffer)
Definition: CellStoreBlock.cc:292
SWC::Ranger::CellStore::Block::Read::load
void load()
Definition: CellStoreBlock.cc:129
SWC::Ranger::CellStore::Block::Read::processing
bool processing() noexcept
Definition: CellStoreBlock.cc:185
SWC::Ranger::CellStore::Block::Read::Read
Read(const Read &&)=delete
SWC::Ranger::CellStore::Block::Read::to_string
static const char *SWC_CONST_FUNC to_string(const State state) noexcept
Definition: CellStoreBlock.cc:14
encode
void encode(uint8_t **bufp) const
Definition: HeaderBufferInfo.h:24
SWC::Ranger::CellStore::Block::Write::Ptr
std::shared_ptr< Write > Ptr
Definition: CellStoreBlock.h:111
SWC::Ranger::CellStore::Block::Read::cellstore
CellStore::Read * cellstore
Definition: CellStoreBlock.h:50