TARAXA
Loading...
Searching...
No Matches
storage.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <rocksdb/db.h>
4#include <rocksdb/options.h>
5#include <rocksdb/slice.h>
6#include <rocksdb/write_batch.h>
7
8#include <filesystem>
9#include <functional>
10#include <regex>
11
12#include "common/types.hpp"
13#include "dag/dag_block.hpp"
14#include "logger/logger.hpp"
15#include "pbft/pbft_block.hpp"
16#include "pbft/period_data.hpp"
21#include "vote/pillar_vote.hpp"
23
24namespace taraxa {
25namespace fs = std::filesystem;
26struct SortitionParamsChange;
27
28namespace pillar_chain {
29struct PillarBlockData;
30class PillarBlock;
31} // namespace pillar_chain
32
42
43enum class PbftMgrField : uint8_t { Round = 0, Step, Lambda };
44
51
52enum class DBMetaKeys { LAST_NUMBER = 1 };
53
54class DbException : public std::exception {
55 public:
56 explicit DbException(const std::string& desc) : desc_(desc) {}
57 virtual ~DbException() = default;
58
59 DbException(const DbException&) = default;
63
64 virtual const char* what() const noexcept { return desc_.c_str(); }
65
66 private:
67 const std::string desc_;
68};
69
70using Batch = rocksdb::WriteBatch;
71using Slice = rocksdb::Slice;
72using OnEntry = std::function<void(Slice const&, Slice const&)>;
73
74class DbStorage : public std::enable_shared_from_this<DbStorage> {
75 public:
76 class Column {
77 std::string const name_;
78
79 public:
80 size_t const ordinal_;
81 const rocksdb::Comparator* comparator_;
82
83 Column(std::string name, size_t ordinal, const rocksdb::Comparator* comparator)
84 : name_(std::move(name)), ordinal_(ordinal), comparator_(comparator) {}
85
86 Column(std::string name, size_t ordinal) : name_(std::move(name)), ordinal_(ordinal), comparator_(nullptr) {}
87
88 auto const& name() const { return ordinal_ ? name_ : rocksdb::kDefaultColumnFamilyName; }
89 };
90
91 class Columns {
92 static inline std::vector<Column> all_;
93
94 public:
95 static inline auto const& all = all_;
96
97#define COLUMN(__name__) static inline auto const __name__ = all_.emplace_back(#__name__, all_.size())
98#define COLUMN_W_COMP(__name__, ...) \
99 static inline auto const __name__ = all_.emplace_back(#__name__, all_.size(), __VA_ARGS__)
100
101 // do not change/move
102 COLUMN(default_column);
103 // migrations
104 COLUMN(migrations);
105 // Contains full data for an executed PBFT block including PBFT block, cert votes, dag blocks and transactions
106 COLUMN_W_COMP(period_data, getIntComparator<PbftPeriod>());
107 COLUMN(genesis);
108 COLUMN(dag_blocks);
109 COLUMN_W_COMP(dag_blocks_level, getIntComparator<uint64_t>());
110 COLUMN(transactions);
111 COLUMN(trx_period);
112 COLUMN(status);
113 COLUMN(pbft_mgr_round_step);
114 COLUMN(pbft_mgr_status);
115 COLUMN(cert_voted_block_in_round); // Cert voted block + round -> node voted for this block
116 COLUMN(proposed_pbft_blocks); // Proposed pbft blocks
117 COLUMN(pbft_head);
118 COLUMN(latest_round_own_votes); // own votes of any type for the latest round
119 COLUMN(latest_round_two_t_plus_one_votes); // 2t+1 votes bundles of any type for the latest round
120 COLUMN(extra_reward_votes); // extra reward votes on top of 2t+1 cert votes bundle from
121 // latest_round_two_t_plus_one_votes
122 COLUMN(pbft_block_period);
123 COLUMN(dag_block_period);
124 COLUMN_W_COMP(proposal_period_levels_map, getIntComparator<uint64_t>());
125 COLUMN(final_chain_meta);
126 COLUMN(final_chain_blk_by_number);
127 COLUMN(final_chain_blk_hash_by_number);
128 COLUMN(final_chain_blk_number_by_hash);
129 COLUMN(final_chain_receipt_by_trx_hash);
130 COLUMN(final_chain_log_blooms_index);
131 COLUMN_W_COMP(sortition_params_change, getIntComparator<PbftPeriod>());
132
133 COLUMN_W_COMP(block_rewards_stats, getIntComparator<uint64_t>());
134
135 // Finalized pillar blocks
136 COLUMN_W_COMP(pillar_block, getIntComparator<PbftPeriod>());
137 // Current pillar block data - current pillar block + current vote counts
138 COLUMN(current_pillar_block_data);
139 // Current pillar block own pillar vote
140 COLUMN(current_pillar_block_own_vote);
141 // system transactions that is not a part of the block
142 COLUMN(system_transaction);
143 // system transactions hashes by period
144 COLUMN(period_system_transactions);
145 // final chain receipts by period
146 COLUMN_W_COMP(final_chain_receipt_by_period, getIntComparator<PbftPeriod>());
147 // Rounds count (per N blocks) used to determine dynamic lambda
148 COLUMN(rounds_count_dynamic_lambda);
149
150#undef COLUMN
151#undef COLUMN_W_COMP
152 };
153
154 auto handle(Column const& col) const { return handles_[col.ordinal_]; }
155
156 void DeleteRange(const Column& col, uint64_t begin, uint64_t end);
157 void CompactRange(const Column& col, uint64_t begin, uint64_t end);
158 rocksdb::ReadOptions read_options_;
159
160 rocksdb::WriteOptions async_write_;
161 rocksdb::WriteOptions sync_write_;
162
163 private:
164 fs::path path_;
165 fs::path db_path_;
167 const std::string kDbDir = "db";
168 const std::string kStateDbDir = "state_db";
169 std::unique_ptr<rocksdb::DB> db_;
170 std::vector<rocksdb::ColumnFamilyHandle*> handles_;
172 std::atomic<uint64_t> dag_blocks_count_;
173 std::atomic<uint64_t> dag_edge_count_;
174 const uint32_t kDbSnapshotsEachNblock = 0;
175 std::atomic<bool> snapshots_enabled_ = true;
176 const uint32_t kDbSnapshotsMaxCount = 0;
177 std::set<PbftPeriod> snapshots_;
179
183
185
186 public:
187 explicit DbStorage(fs::path const& base_path, uint32_t db_snapshot_each_n_pbft_block = 0, uint32_t max_open_files = 0,
188 uint32_t db_max_snapshots = 0, PbftPeriod db_revert_to_period = 0, addr_t node_addr = addr_t(),
189 bool rebuild = false);
190 ~DbStorage();
191
192 DbStorage(const DbStorage&) = delete;
193 DbStorage(DbStorage&&) = delete;
194 DbStorage& operator=(const DbStorage&) = delete;
196
197 auto const& path() const { return path_; }
198 auto dbStoragePath() const { return db_path_; }
199 auto stateDbStoragePath() const { return state_db_path_; }
200 static Batch createWriteBatch();
201 void commitWriteBatch(Batch& write_batch, const rocksdb::WriteOptions& opts);
202 void commitWriteBatch(Batch& write_batch) { commitWriteBatch(write_batch, async_write_); }
203
204 void rebuildColumns(const rocksdb::Options& options);
205 bool createSnapshot(PbftPeriod period);
206 void deleteSnapshot(PbftPeriod period);
207 void recoverToPeriod(PbftPeriod period);
208 void loadSnapshots();
209 void disableSnapshots();
210 void enableSnapshots();
211 void updateDbVersions();
212 void deleteColumnData(const Column& c);
213
214 void replaceColumn(const Column& to_be_replaced_col, std::unique_ptr<rocksdb::ColumnFamilyHandle>&& replacing_col);
215 std::unique_ptr<rocksdb::ColumnFamilyHandle> copyColumn(rocksdb::ColumnFamilyHandle* orig_column,
216 const std::string& new_col_name, bool move_data = false);
217
218 // For removal of LOG.old.* files in the database
219 void removeTempFiles() const;
220 void removeFilesWithPattern(const std::string& directory, const std::regex& pattern) const;
221 void deleteTmpDirectories(const std::string& path) const;
222
223 uint32_t getMajorVersion() const;
224 std::unique_ptr<rocksdb::Iterator> getColumnIterator(const Column& c);
225 std::unique_ptr<rocksdb::Iterator> getColumnIterator(rocksdb::ColumnFamilyHandle* c);
226
227 // Genesis
228 void setGenesisHash(const h256& genesis_hash);
229 std::optional<h256> getGenesisHash();
230
231 // Period data
232 void savePeriodData(const PeriodData& period_data, Batch& write_batch);
234 std::optional<PeriodData> getPeriodData(PbftPeriod period) const;
235 std::optional<PbftBlock> getPbftBlock(PbftPeriod period) const;
236 std::vector<std::shared_ptr<PbftVote>> getPeriodCertVotes(PbftPeriod period) const;
238 SharedTransactions transactionsFromPeriodDataRlp(PbftPeriod period, const dev::RLP& period_data_rlp) const;
239 std::optional<SharedTransactions> getPeriodTransactions(PbftPeriod period) const;
240 std::vector<std::shared_ptr<PillarVote>> getPeriodPillarVotes(PbftPeriod period) const;
241 uint64_t getEarliestBlockNumber() const;
242
243 // Pillar chain
244 void savePillarBlock(const std::shared_ptr<pillar_chain::PillarBlock>& pillar_block);
245 std::shared_ptr<pillar_chain::PillarBlock> getPillarBlock(PbftPeriod period) const;
246 std::shared_ptr<pillar_chain::PillarBlock> getLatestPillarBlock() const;
247 void saveOwnPillarBlockVote(const std::shared_ptr<PillarVote>& vote);
248 std::shared_ptr<PillarVote> getOwnPillarBlockVote() const;
249 void saveCurrentPillarBlockData(const pillar_chain::CurrentPillarBlockDataDb& current_pillar_block_data);
250 std::optional<pillar_chain::CurrentPillarBlockDataDb> getCurrentPillarBlockData() const;
251
252 // DAG
253 void saveDagBlock(const std::shared_ptr<DagBlock>& blk, Batch* write_batch_p = nullptr);
254 std::shared_ptr<DagBlock> getDagBlock(blk_hash_t const& hash);
255 bool dagBlockInDb(blk_hash_t const& hash);
256 std::set<blk_hash_t> getBlocksByLevel(level_t level);
258 std::vector<std::shared_ptr<DagBlock>> getDagBlocksAtLevel(level_t level, int number_of_levels);
259 void updateDagBlockCounters(std::vector<std::shared_ptr<DagBlock>> blks);
260 std::map<level_t, std::vector<std::shared_ptr<DagBlock>>> getNonfinalizedDagBlocks();
261 void removeDagBlockBatch(Batch& write_batch, blk_hash_t const& hash);
262 void removeDagBlock(blk_hash_t const& hash);
263 // Sortition params
264 void saveSortitionParamsChange(PbftPeriod period, const SortitionParamsChange& params, Batch& batch);
265 std::deque<SortitionParamsChange> getLastSortitionParams(size_t count);
266 std::optional<SortitionParamsChange> getParamsChangeForPeriod(PbftPeriod period);
267
268 // Transaction
269 std::shared_ptr<Transaction> getTransaction(trx_hash_t const& hash) const;
270 std::shared_ptr<Transaction> getTransaction(PbftPeriod period, uint32_t position) const;
271
273 bool transactionInDb(trx_hash_t const& hash);
274 bool transactionFinalized(trx_hash_t const& hash);
275 std::vector<bool> transactionsInDb(std::vector<trx_hash_t> const& trx_hashes);
276 std::vector<bool> transactionsFinalized(std::vector<trx_hash_t> const& trx_hashes);
277 void addTransactionToBatch(Transaction const& trx, Batch& write_batch);
278 void removeTransactionToBatch(trx_hash_t const& trx, Batch& write_batch);
279
280 void addTransactionLocationToBatch(Batch& write_batch, trx_hash_t const& trx, PbftPeriod period, uint32_t position,
281 bool is_system = false);
282 std::optional<TransactionLocation> getTransactionLocation(trx_hash_t const& hash) const;
283 std::unordered_map<trx_hash_t, PbftPeriod> getAllTransactionPeriod();
284 uint64_t getTransactionCount(PbftPeriod period) const;
286 std::optional<TransactionReceipt> getTransactionReceipt(EthBlockNumber blk_n, uint64_t position) const;
287
295 SharedTransactions getFinalizedTransactions(std::vector<trx_hash_t> const& trx_hashes) const;
296
297 // System transaction
299 std::shared_ptr<Transaction> getSystemTransaction(const trx_hash_t& hash) const;
300 void addPeriodSystemTransactions(Batch& write_batch, SharedTransactions trxs, PbftPeriod period);
301 std::vector<trx_hash_t> getPeriodSystemTransactionsHashes(PbftPeriod period) const;
303
304 // PBFT manager
305 uint32_t getPbftMgrField(PbftMgrField field);
306 void savePbftMgrField(PbftMgrField field, uint32_t value);
307 void addPbftMgrFieldToBatch(PbftMgrField field, uint32_t value, Batch& write_batch);
308
310 void savePbftMgrStatus(PbftMgrStatus field, bool const& value);
311 void addPbftMgrStatusToBatch(PbftMgrStatus field, bool const& value, Batch& write_batch);
312
313 void saveCertVotedBlockInRound(PbftRound round, const std::shared_ptr<PbftBlock>& block);
314 std::optional<std::pair<PbftRound, std::shared_ptr<PbftBlock>>> getCertVotedBlockInRound() const;
315 void removeCertVotedBlockInRound(Batch& write_batch);
316
317 // pbft_blocks
318 std::optional<PbftBlock> getPbftBlock(blk_hash_t const& hash);
319 bool pbftBlockInDb(blk_hash_t const& hash);
320
321 // Proposed pbft blocks
322 void saveProposedPbftBlock(const std::shared_ptr<PbftBlock>& block);
323 void removeProposedPbftBlock(const blk_hash_t& block_hash, Batch& write_batch);
324 std::vector<std::shared_ptr<PbftBlock>> getProposedPbftBlocks();
325
326 // pbft_blocks (head)
327 std::string getPbftHead(blk_hash_t const& hash);
328 void savePbftHead(blk_hash_t const& hash, std::string const& pbft_chain_head_str);
329 void addPbftHeadToBatch(taraxa::blk_hash_t const& head_hash, std::string const& head_str, Batch& write_batch);
330
331 // status
332 uint64_t getStatusField(StatusDbField const& field);
333 void saveStatusField(StatusDbField const& field, uint64_t value);
334 void addStatusFieldToBatch(StatusDbField const& field, uint64_t value, Batch& write_batch);
335
336 // Own votes for the latest round
337 void saveOwnVerifiedVote(const std::shared_ptr<PbftVote>& vote);
338 std::vector<std::shared_ptr<PbftVote>> getOwnVerifiedVotes();
339 void clearOwnVerifiedVotes(Batch& write_batch, const std::vector<std::shared_ptr<PbftVote>>& own_verified_votes);
340
341 // 2t+1 votes bundles for the latest round
342 void replaceTwoTPlusOneVotes(TwoTPlusOneVotedBlockType type, const std::vector<std::shared_ptr<PbftVote>>& votes);
344 const std::vector<std::shared_ptr<PbftVote>>& votes, Batch& write_batch);
345 std::vector<std::shared_ptr<PbftVote>> getAllTwoTPlusOneVotes();
346
347 // Reward votes - cert votes for the latest finalized block
348 void removeExtraRewardVotes(const std::vector<vote_hash_t>& votes, Batch& write_batch);
349 void saveExtraRewardVote(const std::shared_ptr<PbftVote>& vote);
350 std::vector<std::shared_ptr<PbftVote>> getRewardVotes();
351
352 // period_pbft_block
353 void addPbftBlockPeriodToBatch(PbftPeriod period, taraxa::blk_hash_t const& pbft_block_hash, Batch& write_batch);
354 std::pair<bool, PbftPeriod> getPeriodFromPbftHash(taraxa::blk_hash_t const& pbft_block_hash);
355 // dag_block_period
356 std::shared_ptr<std::pair<PbftPeriod, uint32_t>> getDagBlockPeriod(blk_hash_t const& hash);
357 void addDagBlockPeriodToBatch(blk_hash_t const& hash, PbftPeriod period, uint32_t position, Batch& write_batch);
358
359 uint64_t getDagBlocksCount() const { return dag_blocks_count_.load(); }
360 uint64_t getDagEdgeCount() const { return dag_edge_count_.load(); }
361
365
366 std::vector<blk_hash_t> getFinalizedDagBlockHashesByPeriod(PbftPeriod period);
367 std::vector<std::shared_ptr<DagBlock>> getFinalizedDagBlockByPeriod(PbftPeriod period);
368 std::pair<blk_hash_t, std::vector<std::shared_ptr<DagBlock>>> getLastPbftBlockHashAndFinalizedDagBlockByPeriod(
369 PbftPeriod period);
370
371 // DPOS level to proposal period map
372 std::optional<uint64_t> getProposalPeriodForDagLevel(uint64_t level);
373 void saveProposalPeriodDagLevelsMap(uint64_t level, PbftPeriod period);
374 void addProposalPeriodDagLevelsMapToBatch(uint64_t level, PbftPeriod period, Batch& write_batch);
375
376 // Rounds count dynamic lambda
377 void saveRoundsCountDynamicLambda(uint32_t rounds_count, Batch& write_batch);
379
382
383 void compactColumn(Column const& column) { db_->CompactRange({}, handle(column), nullptr, nullptr); }
384
385 inline static bytes asBytes(std::string const& b) {
386 return bytes((byte const*)b.data(), (byte const*)(b.data() + b.size()));
387 }
388
389 template <typename T>
390 inline static Slice make_slice(T const* begin, size_t size) {
391 if (!size) {
392 return {};
393 }
394 return {reinterpret_cast<char const*>(begin), size};
395 }
396
397 inline static Slice toSlice(dev::bytesConstRef const& b) { return make_slice(b.data(), b.size()); }
398
399 template <unsigned N>
400 inline static Slice toSlice(dev::FixedHash<N> const& h) {
401 return make_slice(h.data(), N);
402 }
403
404 inline static Slice toSlice(dev::bytes const& b) { return make_slice(b.data(), b.size()); }
405
406 template <class N>
407 inline static auto toSlice(N const& n) -> std::enable_if_t<std::is_integral_v<N> || std::is_enum_v<N>, Slice> {
408 return make_slice(&n, sizeof(N));
409 }
410
411 inline static Slice toSlice(std::string const& str) { return make_slice(str.data(), str.size()); }
412
413 inline static auto const& toSlice(Slice const& s) { return s; }
414
415 template <typename T>
416 inline static auto toSlices(std::vector<T> const& keys) {
417 std::vector<Slice> ret;
418 ret.reserve(keys.size());
419 for (auto const& k : keys) {
420 ret.emplace_back(toSlice(k));
421 }
422 return ret;
423 }
424
425 inline static auto const& toSlices(std::vector<Slice> const& ss) { return ss; }
426
427 template <typename K>
428 std::string lookup(K const& key, Column const& column) const {
429 std::string value;
430 auto status = db_->Get(read_options_, handle(column), toSlice(key), &value);
431 if (status.IsNotFound()) {
432 return value;
433 }
434 checkStatus(status);
435 return value;
436 }
437
438 template <typename Int, typename K>
439 auto lookup_int(K const& key, Column const& column) -> std::enable_if_t<std::is_integral_v<Int>, std::optional<Int>> {
440 auto str = lookup(key, column);
441 if (str.empty()) {
442 return std::nullopt;
443 }
444 return *reinterpret_cast<Int*>(str.data());
445 }
446
447 template <typename K>
448 bool exist(K const& key, Column const& column) {
449 std::string value;
450 // KeyMayExist can lead to a few false positives, but not false negatives.
451 if (db_->KeyMayExist(read_options_, handle(column), toSlice(key), &value)) {
452 auto status = db_->Get(read_options_, handle(column), toSlice(key), &value);
453 if (status.IsNotFound()) {
454 return false;
455 }
456 checkStatus(status);
457 return !value.empty();
458 }
459 return false;
460 }
461
462 static void checkStatus(rocksdb::Status const& status);
463
464 template <typename K, typename V>
465 void insert(rocksdb::ColumnFamilyHandle* col, const K& k, const V& v) {
466 checkStatus(db_->Put(async_write_, col, toSlice(k), toSlice(v)));
467 }
468
469 template <typename K, typename V>
470 void insert(Column const& col, K const& k, V const& v) {
471 checkStatus(db_->Put(async_write_, handle(col), toSlice(k), toSlice(v)));
472 }
473
474 template <typename K, typename V>
475 void insert(Batch& batch, Column const& col, K const& k, V const& v) {
476 checkStatus(batch.Put(handle(col), toSlice(k), toSlice(v)));
477 }
478
479 template <typename K, typename V>
480 void insert(Batch& batch, rocksdb::ColumnFamilyHandle* col, K const& k, V const& v) {
481 checkStatus(batch.Put(col, toSlice(k), toSlice(v)));
482 }
483
484 template <typename K>
485 void remove(Column const& col, K const& k) {
486 checkStatus(db_->Delete(async_write_, handle(col), toSlice(k)));
487 }
488
489 template <typename K>
490 void remove(Batch& batch, Column const& col, K const& k) {
491 checkStatus(batch.Delete(handle(col), toSlice(k)));
492 }
493
494 template <typename K>
495 void remove(Batch& batch, Column const& col, std::unordered_set<K> const& keys) {
496 for (auto const& k : keys) {
497 checkStatus(batch.Delete(handle(col), toSlice(k)));
498 }
499 }
500
501 template <typename T>
502 void clearColumnHistory(std::unordered_set<T>& to_keep, Column c) {
503 std::map<T, bytes> data_to_keep;
504 for (auto t : to_keep) {
505 auto raw = asBytes(lookup(t, c));
506 if (!raw.empty()) {
507 data_to_keep[t] = raw;
508 }
509 }
510
512 auto batch = createWriteBatch();
513 for (auto data : data_to_keep) {
514 insert(batch, c, data.first, data.second);
515 }
516 commitWriteBatch(batch);
517 data_to_keep.clear();
518 }
519
520 void forEach(Column const& col, OnEntry const& f);
521};
522
523} // namespace taraxa
Definition FixedHash.h:35
::byte * data()
Definition FixedHash.h:189
Definition RLP.h:56
Definition vector_ref.h:23
_T * data() const
Definition vector_ref.h:76
size_t size() const
Definition vector_ref.h:82
Definition storage.hpp:54
virtual const char * what() const noexcept
Definition storage.hpp:64
virtual ~DbException()=default
const std::string desc_
Definition storage.hpp:67
DbException(const std::string &desc)
Definition storage.hpp:56
DbException(const DbException &)=default
DbException(DbException &&)=default
DbException & operator=(DbException &&)=delete
DbException & operator=(const DbException &)=delete
Definition storage.hpp:76
Column(std::string name, size_t ordinal, const rocksdb::Comparator *comparator)
Definition storage.hpp:83
const rocksdb::Comparator * comparator_
Definition storage.hpp:81
Column(std::string name, size_t ordinal)
Definition storage.hpp:86
auto const & name() const
Definition storage.hpp:88
size_t const ordinal_
Definition storage.hpp:80
std::string const name_
Definition storage.hpp:77
Definition storage.hpp:91
static auto const & all
Definition storage.hpp:95
COLUMN(period_system_transactions)
COLUMN(rounds_count_dynamic_lambda)
COLUMN(cert_voted_block_in_round)
COLUMN_W_COMP(dag_blocks_level, getIntComparator< uint64_t >())
COLUMN(current_pillar_block_own_vote)
COLUMN(final_chain_meta)
COLUMN(dag_block_period)
COLUMN_W_COMP(pillar_block, getIntComparator< PbftPeriod >())
COLUMN(final_chain_receipt_by_trx_hash)
COLUMN_W_COMP(block_rewards_stats, getIntComparator< uint64_t >())
COLUMN(final_chain_blk_by_number)
COLUMN(extra_reward_votes)
COLUMN(final_chain_blk_hash_by_number)
COLUMN(pbft_block_period)
COLUMN(latest_round_two_t_plus_one_votes)
COLUMN(system_transaction)
COLUMN(final_chain_log_blooms_index)
COLUMN(latest_round_own_votes)
COLUMN_W_COMP(proposal_period_levels_map, getIntComparator< uint64_t >())
COLUMN(pbft_mgr_round_step)
static std::vector< Column > all_
Definition storage.hpp:92
COLUMN_W_COMP(period_data, getIntComparator< PbftPeriod >())
COLUMN(pbft_mgr_status)
COLUMN(proposed_pbft_blocks)
COLUMN_W_COMP(sortition_params_change, getIntComparator< PbftPeriod >())
COLUMN(current_pillar_block_data)
COLUMN(final_chain_blk_number_by_hash)
COLUMN_W_COMP(final_chain_receipt_by_period, getIntComparator< PbftPeriod >())
Definition storage.hpp:74
void addStatusFieldToBatch(StatusDbField const &field, uint64_t value, Batch &write_batch)
Definition storage.cpp:995
void addDagBlockPeriodToBatch(blk_hash_t const &hash, PbftPeriod period, uint32_t position, Batch &write_batch)
Definition storage.cpp:1208
auto const & path() const
Definition storage.hpp:197
uint64_t getTransactionCount(PbftPeriod period) const
Definition storage.cpp:806
std::atomic< uint64_t > dag_blocks_count_
Definition storage.hpp:172
SharedTransactions getPeriodSystemTransactions(PbftPeriod period) const
Definition storage.cpp:871
static auto toSlices(std::vector< T > const &keys)
Definition storage.hpp:416
bool dagBlockInDb(blk_hash_t const &hash)
Definition storage.cpp:474
void remove(Batch &batch, Column const &col, K const &k)
Definition storage.hpp:490
std::shared_ptr< DagBlock > getDagBlock(blk_hash_t const &hash)
Definition storage.cpp:457
fs::path db_path_
Definition storage.hpp:165
std::shared_ptr< Transaction > getTransaction(trx_hash_t const &hash) const
Definition storage.cpp:781
void disableSnapshots()
Definition storage.cpp:393
std::vector< std::shared_ptr< PbftVote > > getAllTwoTPlusOneVotes()
Definition storage.cpp:1137
std::optional< uint64_t > getProposalPeriodForDagLevel(uint64_t level)
Definition storage.cpp:1255
std::mutex dag_blocks_mutex_
Definition storage.hpp:171
uint32_t getPbftMgrField(PbftMgrField field)
Definition storage.cpp:1001
std::optional< PeriodData > getPeriodData(PbftPeriod period) const
Definition storage.cpp:645
void saveProposedPbftBlock(const std::shared_ptr< PbftBlock > &block)
Definition storage.cpp:746
void removeProposedPbftBlock(const blk_hash_t &block_hash, Batch &write_batch)
Definition storage.cpp:750
void addProposalPeriodDagLevelsMapToBatch(uint64_t level, PbftPeriod period, Batch &write_batch)
Definition storage.cpp:1274
void saveCertVotedBlockInRound(PbftRound round, const std::shared_ptr< PbftBlock > &block)
Definition storage.cpp:1038
std::unordered_map< trx_hash_t, PbftPeriod > getAllTransactionPeriod()
Definition storage.cpp:733
void saveOwnPillarBlockVote(const std::shared_ptr< PillarVote > &vote)
Definition storage.cpp:677
rocksdb::WriteOptions async_write_
Definition storage.hpp:160
std::shared_ptr< pillar_chain::PillarBlock > getPillarBlock(PbftPeriod period) const
Definition storage.cpp:658
void addPbftMgrStatusToBatch(PbftMgrStatus field, bool const &value, Batch &write_batch)
Definition storage.cpp:1034
void removeExtraRewardVotes(const std::vector< vote_hash_t > &votes, Batch &write_batch)
Definition storage.cpp:1157
void rebuildColumns(const rocksdb::Options &options)
Definition storage.cpp:229
void addTransactionLocationToBatch(Batch &write_batch, trx_hash_t const &trx, PbftPeriod period, uint32_t position, bool is_system=false)
Definition storage.cpp:703
SharedTransactions transactionsFromPeriodDataRlp(PbftPeriod period, const dev::RLP &period_data_rlp) const
Definition storage.cpp:897
blk_hash_t getPeriodBlockHash(PbftPeriod period) const
Definition storage.cpp:773
std::vector< std::shared_ptr< PbftBlock > > getProposedPbftBlocks()
Definition storage.cpp:754
std::vector< std::shared_ptr< DagBlock > > getDagBlocksAtLevel(level_t level, int number_of_levels)
Definition storage.cpp:498
void remove(Batch &batch, Column const &col, std::unordered_set< K > const &keys)
Definition storage.hpp:495
std::shared_ptr< PillarVote > getOwnPillarBlockVote() const
Definition storage.cpp:681
std::atomic< bool > snapshots_enabled_
Definition storage.hpp:175
DbStorage & operator=(DbStorage &&)=delete
uint32_t kMajorVersion_
Definition storage.hpp:180
const uint32_t kDbSnapshotsMaxCount
Definition storage.hpp:176
void addPeriodSystemTransactions(Batch &write_batch, SharedTransactions trxs, PbftPeriod period)
Definition storage.cpp:854
static auto const & toSlices(std::vector< Slice > const &ss)
Definition storage.hpp:425
void clearColumnHistory(std::unordered_set< T > &to_keep, Column c)
Definition storage.hpp:502
std::optional< h256 > getGenesisHash()
Definition storage.cpp:403
void compactColumn(Column const &column)
Definition storage.hpp:383
SharedTransactions getAllNonfinalizedTransactions()
Definition storage.cpp:523
void insert(Batch &batch, Column const &col, K const &k, V const &v)
Definition storage.hpp:475
auto stateDbStoragePath() const
Definition storage.hpp:199
uint64_t getDagBlocksCount() const
Definition storage.hpp:359
std::vector< blk_hash_t > getFinalizedDagBlockHashesByPeriod(PbftPeriod period)
Definition storage.cpp:1217
void saveRoundsCountDynamicLambda(uint32_t rounds_count, Batch &write_batch)
Definition storage.cpp:1278
bool transactionInDb(trx_hash_t const &hash)
Definition storage.cpp:961
void saveOwnVerifiedVote(const std::shared_ptr< PbftVote > &vote)
Definition storage.cpp:1092
bool minor_version_changed_
Definition storage.hpp:182
bool createSnapshot(PbftPeriod period)
Definition storage.cpp:312
SharedTransactions getFinalizedTransactions(std::vector< trx_hash_t > const &trx_hashes) const
Gets finalized transactions from provided hashes.
Definition storage.cpp:815
std::map< level_t, std::vector< std::shared_ptr< DagBlock > > > getNonfinalizedDagBlocks()
Definition storage.cpp:513
void saveStatusField(StatusDbField const &field, uint64_t value)
Definition storage.cpp:991
void saveCurrentPillarBlockData(const pillar_chain::CurrentPillarBlockDataDb &current_pillar_block_data)
Definition storage.cpp:690
rocksdb::ReadOptions read_options_
Definition storage.hpp:158
std::unique_ptr< rocksdb::DB > db_
Definition storage.hpp:169
void commitWriteBatch(Batch &write_batch, const rocksdb::WriteOptions &opts)
Definition storage.cpp:441
uint64_t getEarliestBlockNumber() const
Definition storage.cpp:616
bool exist(K const &key, Column const &column)
Definition storage.hpp:448
void saveExtraRewardVote(const std::shared_ptr< PbftVote > &vote)
Definition storage.cpp:1163
void removeDagBlock(blk_hash_t const &hash)
Definition storage.cpp:536
fs::path path_
Definition storage.hpp:164
void insert(Column const &col, K const &k, V const &v)
Definition storage.hpp:470
std::vector< bool > transactionsInDb(std::vector< trx_hash_t > const &trx_hashes)
Definition storage.cpp:969
std::pair< blk_hash_t, std::vector< std::shared_ptr< DagBlock > > > getLastPbftBlockHashAndFinalizedDagBlockByPeriod(PbftPeriod period)
Definition storage.cpp:1241
void savePeriodData(const PeriodData &period_data, Batch &write_batch)
Definition storage.cpp:618
void deleteColumnData(const Column &c)
Definition storage.cpp:218
void recoverToPeriod(PbftPeriod period)
Definition storage.cpp:345
fs::path state_db_path_
Definition storage.hpp:166
std::shared_ptr< pillar_chain::PillarBlock > getLatestPillarBlock() const
Definition storage.cpp:667
std::optional< TransactionLocation > getTransactionLocation(trx_hash_t const &hash) const
Definition storage.cpp:715
bool getPbftMgrStatus(PbftMgrStatus field)
Definition storage.cpp:1020
bool major_version_changed_
Definition storage.hpp:181
void savePillarBlock(const std::shared_ptr< pillar_chain::PillarBlock > &pillar_block)
Definition storage.cpp:654
void savePbftMgrField(PbftMgrField field, uint32_t value)
Definition storage.cpp:1012
std::optional< std::pair< PbftRound, std::shared_ptr< PbftBlock > > > getCertVotedBlockInRound() const
Definition storage.cpp:1047
static Slice make_slice(T const *begin, size_t size)
Definition storage.hpp:390
std::vector< bool > transactionsFinalized(std::vector< trx_hash_t > const &trx_hashes)
Definition storage.cpp:723
bool transactionFinalized(trx_hash_t const &hash)
Definition storage.cpp:965
std::deque< SortitionParamsChange > getLastSortitionParams(size_t count)
Definition storage.cpp:591
uint32_t getRoundsCountDynamicLambda()
Definition storage.cpp:1282
static auto toSlice(N const &n) -> std::enable_if_t< std::is_integral_v< N >||std::is_enum_v< N >, Slice >
Definition storage.hpp:407
void deleteSnapshot(PbftPeriod period)
Definition storage.cpp:377
std::shared_ptr< std::pair< PbftPeriod, uint32_t > > getDagBlockPeriod(blk_hash_t const &hash)
Definition storage.cpp:1195
void forEach(Column const &col, OnEntry const &f)
Definition storage.cpp:1293
void remove(Column const &col, K const &k)
Definition storage.hpp:485
DbStorage(DbStorage &&)=delete
std::set< PbftPeriod > snapshots_
Definition storage.hpp:177
void CompactRange(const Column &col, uint64_t begin, uint64_t end)
Definition storage.cpp:451
void removeCertVotedBlockInRound(Batch &write_batch)
Definition storage.cpp:1063
void savePbftMgrStatus(PbftMgrStatus field, bool const &value)
Definition storage.cpp:1030
void replaceColumn(const Column &to_be_replaced_col, std::unique_ptr< rocksdb::ColumnFamilyHandle > &&replacing_col)
Definition storage.cpp:200
std::optional< PbftBlock > getPbftBlock(PbftPeriod period) const
Definition storage.cpp:763
void addPbftBlockPeriodToBatch(PbftPeriod period, taraxa::blk_hash_t const &pbft_block_hash, Batch &write_batch)
Definition storage.cpp:1178
void addSystemTransactionToBatch(Batch &write_batch, SharedTransaction trx)
Definition storage.cpp:841
auto getNumTransactionExecuted()
Definition storage.hpp:362
void commitWriteBatch(Batch &write_batch)
Definition storage.hpp:202
static void checkStatus(rocksdb::Status const &status)
Definition storage.cpp:430
std::optional< SharedTransactions > getPeriodTransactions(PbftPeriod period) const
Definition storage.cpp:908
static Batch createWriteBatch()
Definition storage.cpp:439
void clearOwnVerifiedVotes(Batch &write_batch, const std::vector< std::shared_ptr< PbftVote > > &own_verified_votes)
Definition storage.cpp:1107
rocksdb::WriteOptions sync_write_
Definition storage.hpp:161
level_t getLastBlocksLevel() const
Definition storage.cpp:488
void addTransactionToBatch(Transaction const &trx, Batch &write_batch)
Definition storage.cpp:953
void DeleteRange(const Column &col, uint64_t begin, uint64_t end)
Definition storage.cpp:447
std::set< blk_hash_t > getBlocksByLevel(level_t level)
Definition storage.cpp:482
void setGenesisHash(const h256 &genesis_hash)
Definition storage.cpp:397
auto dbStoragePath() const
Definition storage.hpp:198
std::string lookup(K const &key, Column const &column) const
Definition storage.hpp:428
uint32_t getMajorVersion() const
Definition storage.cpp:420
std::vector< std::shared_ptr< DagBlock > > getFinalizedDagBlockByPeriod(PbftPeriod period)
Definition storage.cpp:1230
const std::string kStateDbDir
Definition storage.hpp:168
void saveDagBlock(const std::shared_ptr< DagBlock > &blk, Batch *write_batch_p=nullptr)
Definition storage.cpp:559
~DbStorage()
Definition storage.cpp:411
std::vector< std::shared_ptr< PbftVote > > getOwnVerifiedVotes()
Definition storage.cpp:1096
const std::string kDbDir
Definition storage.hpp:167
void deleteTmpDirectories(const std::string &path) const
Definition storage.cpp:134
std::vector< std::shared_ptr< PillarVote > > getPeriodPillarVotes(PbftPeriod period) const
Definition storage.cpp:938
dev::bytes getPeriodDataRaw(PbftPeriod period) const
Definition storage.cpp:641
std::unique_ptr< rocksdb::ColumnFamilyHandle > copyColumn(rocksdb::ColumnFamilyHandle *orig_column, const std::string &new_col_name, bool move_data=false)
Definition storage.cpp:156
std::pair< bool, PbftPeriod > getPeriodFromPbftHash(taraxa::blk_hash_t const &pbft_block_hash)
Definition storage.cpp:1183
void insert(rocksdb::ColumnFamilyHandle *col, const K &k, const V &v)
Definition storage.hpp:465
auto getNumTransactionInDag()
Definition storage.hpp:363
void enableSnapshots()
Definition storage.cpp:395
void saveProposalPeriodDagLevelsMap(uint64_t level, PbftPeriod period)
Definition storage.cpp:1270
std::string getPbftHead(blk_hash_t const &hash)
Definition storage.cpp:1079
void updateDagBlockCounters(std::vector< std::shared_ptr< DagBlock > > blks)
Definition storage.cpp:538
void replaceTwoTPlusOneVotes(TwoTPlusOneVotedBlockType type, const std::vector< std::shared_ptr< PbftVote > > &votes)
Definition storage.cpp:1114
void removeTempFiles() const
Definition storage.cpp:109
bool hasMinorVersionChanged()
Definition storage.hpp:380
uint64_t getStatusField(StatusDbField const &field)
Definition storage.cpp:980
auto handle(Column const &col) const
Definition storage.hpp:154
std::optional< pillar_chain::CurrentPillarBlockDataDb > getCurrentPillarBlockData() const
Definition storage.cpp:694
std::atomic< uint64_t > dag_edge_count_
Definition storage.hpp:173
std::vector< rocksdb::ColumnFamilyHandle * > handles_
Definition storage.hpp:170
SharedTransactionReceipts getBlockReceipts(PbftPeriod period) const
Definition storage.cpp:929
static Slice toSlice(dev::bytesConstRef const &b)
Definition storage.hpp:397
static bytes asBytes(std::string const &b)
Definition storage.hpp:385
std::vector< std::shared_ptr< PbftVote > > getRewardVotes()
Definition storage.cpp:1167
uint64_t getDagEdgeCount() const
Definition storage.hpp:360
std::optional< TransactionReceipt > getTransactionReceipt(EthBlockNumber blk_n, uint64_t position) const
Definition storage.cpp:917
void updateDbVersions()
Definition storage.cpp:150
void addPbftHeadToBatch(taraxa::blk_hash_t const &head_hash, std::string const &head_str, Batch &write_batch)
Definition storage.cpp:1087
void savePbftHead(blk_hash_t const &hash, std::string const &pbft_chain_head_str)
Definition storage.cpp:1083
auto lookup_int(K const &key, Column const &column) -> std::enable_if_t< std::is_integral_v< Int >, std::optional< Int > >
Definition storage.hpp:439
void saveSortitionParamsChange(PbftPeriod period, const SortitionParamsChange &params, Batch &batch)
Definition storage.cpp:587
void addPbftMgrFieldToBatch(PbftMgrField field, uint32_t value, Batch &write_batch)
Definition storage.cpp:1016
std::vector< std::shared_ptr< PbftVote > > getPeriodCertVotes(PbftPeriod period) const
Definition storage.cpp:883
DbStorage & operator=(const DbStorage &)=delete
auto getNumBlockExecuted()
Definition storage.hpp:364
bool hasMajorVersionChanged()
Definition storage.hpp:381
std::vector< trx_hash_t > getPeriodSystemTransactionsHashes(PbftPeriod period) const
Definition storage.cpp:863
bool pbftBlockInDb(blk_hash_t const &hash)
Definition storage.cpp:1075
void removeDagBlockBatch(Batch &write_batch, blk_hash_t const &hash)
Definition storage.cpp:532
std::shared_ptr< Transaction > getSystemTransaction(const trx_hash_t &hash) const
Definition storage.cpp:845
void removeTransactionToBatch(trx_hash_t const &trx, Batch &write_batch)
Definition storage.cpp:957
static Slice toSlice(dev::bytes const &b)
Definition storage.hpp:404
std::optional< SortitionParamsChange > getParamsChangeForPeriod(PbftPeriod period)
Definition storage.cpp:603
DbStorage(const DbStorage &)=delete
const uint32_t kDbSnapshotsEachNblock
Definition storage.hpp:174
void loadSnapshots()
Definition storage.cpp:286
uint64_t earliest_block_number_
Definition storage.hpp:178
static auto const & toSlice(Slice const &s)
Definition storage.hpp:413
static Slice toSlice(std::string const &str)
Definition storage.hpp:411
static Slice toSlice(dev::FixedHash< N > const &h)
Definition storage.hpp:400
void removeFilesWithPattern(const std::string &directory, const std::regex &pattern) const
Definition storage.cpp:116
std::unique_ptr< rocksdb::Iterator > getColumnIterator(const Column &c)
Definition storage.cpp:422
void insert(Batch &batch, rocksdb::ColumnFamilyHandle *col, K const &k, V const &v)
Definition storage.hpp:480
void replaceTwoTPlusOneVotesToBatch(TwoTPlusOneVotedBlockType type, const std::vector< std::shared_ptr< PbftVote > > &votes, Batch &write_batch)
Definition storage.cpp:1125
Changing vrf params for DAG blocks generation.
Definition sortition_params_manager.hpp:18
PeriodData class is for block execution, that includes PBFT block, certify votes, DAG blocks,...
Definition period_data.hpp:26
Definition pillar_block.hpp:155
#define LOG_OBJECTS_DEFINE
Definition logger.hpp:60
std::vector<::byte > bytes
Definition Common.h:46
std::hash for asio::adress
Definition FixedHash.h:483
Definition app.hpp:16
rocksdb::WriteBatch Batch
Definition storage.hpp:70
std::shared_ptr< Transaction > SharedTransaction
Definition transaction.hpp:84
uint64_t EthBlockNumber
Definition types.hpp:23
std::shared_ptr< std::vector< TransactionReceipt > > SharedTransactionReceipts
Definition receipt.hpp:54
DBMetaKeys
Definition storage.hpp:52
std::vector< byte > bytes
Definition types.hpp:53
uint32_t PbftRound
Definition types.hpp:25
EthBlockNumber PbftPeriod
Definition types.hpp:24
std::vector< SharedTransaction > SharedTransactions
Definition transaction.hpp:86
rocksdb::Slice Slice
Definition storage.hpp:71
std::function< void(Slice const &, Slice const &)> OnEntry
Definition storage.hpp:72
PbftMgrStatus
Definition storage.hpp:45
@ NextVotedNullBlockHash
Definition storage.hpp:49
@ ExecutedInRound
Definition storage.hpp:47
@ NextVotedSoftValue
Definition storage.hpp:48
@ ExecutedBlock
Definition storage.hpp:46
uint64_t level_t
Definition types.hpp:46
StatusDbField
Definition storage.hpp:33
@ DbMinorVersion
Definition storage.hpp:40
@ DbMajorVersion
Definition storage.hpp:39
@ DagEdgeCount
Definition storage.hpp:38
@ ExecutedTrxCount
Definition storage.hpp:35
@ TrxCount
Definition storage.hpp:36
@ ExecutedBlkCount
Definition storage.hpp:34
@ DagBlkCount
Definition storage.hpp:37
uint160_hash_t addr_t
Definition types.hpp:39
PbftMgrField
Definition storage.hpp:43
TwoTPlusOneVotedBlockType
Definition verified_votes.hpp:13
Definition transaction.hpp:12