6 #ifndef IROHA_ROCKSDB_COMMON_HPP 7 #define IROHA_ROCKSDB_COMMON_HPP 12 #include <string_view> 14 #include <fmt/compile.h> 15 #include <fmt/format.h> 16 #include <rocksdb/db.h> 17 #include <rocksdb/utilities/optimistic_transaction_db.h> 18 #include <rocksdb/utilities/transaction.h> 156 #define RDB_DELIMITER "/" 157 #define RDB_XXX RDB_DELIMITER "{}" RDB_DELIMITER 160 #define RDB_STORE "s" 162 #define RDB_NETWORK "n" 163 #define RDB_SETTINGS "i" 164 #define RDB_ASSETS "x" 165 #define RDB_ROLES "r" 166 #define RDB_TRANSACTIONS "t" 167 #define RDB_ACCOUNTS "a" 168 #define RDB_PEERS "p" 169 #define RDB_STATUSES "u" 170 #define RDB_DETAILS "d" 171 #define RDB_GRANTABLE_PER "g" 172 #define RDB_POSITION "P" 173 #define RDB_TIMESTAMP "T" 174 #define RDB_DOMAIN "D" 175 #define RDB_SIGNATORIES "S" 176 #define RDB_OPTIONS "O" 177 #define RDB_ADDRESS "M" 180 #define RDB_F_QUORUM "q" 181 #define RDB_F_ASSET_SIZE "I" 182 #define RDB_F_TOP_BLOCK "Q" 183 #define RDB_F_PEERS_COUNT "Z" 184 #define RDB_F_TOTAL_COUNT "V" 185 #define RDB_F_VERSION "v" 187 #define RDB_PATH_DOMAIN RDB_ROOT RDB_WSV RDB_DOMAIN RDB_XXX 188 #define RDB_PATH_ACCOUNT RDB_PATH_DOMAIN RDB_ACCOUNTS RDB_XXX 382 #undef RDB_F_ASSET_SIZE 383 #undef RDB_PATH_DOMAIN 384 #undef RDB_PATH_ACCOUNT 394 #undef RDB_TRANSACTIONS 399 #undef RDB_GRANTABLE_PER 403 #undef RDB_SIGNATORIES 405 #undef RDB_F_TOP_BLOCK 406 #undef RDB_F_PEERS_COUNT 407 #undef RDB_F_TOTAL_COUNT 411 auto constexpr kValue{FMT_STRING(
"{}")};
427 : db_port(
std::move(dbp)) {
436 std::unique_ptr<rocksdb::Transaction> transaction;
439 fmt::memory_buffer key_buffer;
442 std::string value_buffer;
445 std::shared_ptr<RocksDBPort> db_port;
448 std::mutex this_context_cs;
470 template <
typename T,
typename... Args>
474 assert(format !=
nullptr);
476 DbError{code, fmt::format(format, std::forward<Args>(args)...)});
479 template <
typename T>
494 assert(*db_name_ == db_name);
498 rocksdb::Options options;
499 options.create_if_missing =
true;
501 rocksdb::OptimisticTransactionDB *transaction_db;
502 auto status = rocksdb::OptimisticTransactionDB::Open(
503 options, db_name, &transaction_db);
507 "Db {} initialization failed with status: {}.",
511 transaction_db_.reset(transaction_db);
517 std::unique_ptr<rocksdb::OptimisticTransactionDB> transaction_db_;
518 std::optional<std::string> db_name_;
522 assert(transaction_db_);
523 tx_context.transaction.reset(
524 transaction_db_->BeginTransaction(rocksdb::WriteOptions()));
528 #define RDB_ERROR_CHECK(...) \ 529 if (auto _tmp_gen_var = (__VA_ARGS__); \ 530 iroha::expected::hasError(_tmp_gen_var)) \ 531 return _tmp_gen_var.assumeError() 533 #define RDB_ERROR_CHECK_TO_STR(...) \ 534 if (auto _tmp_gen_var = (__VA_ARGS__); \ 535 iroha::expected::hasError(_tmp_gen_var)) \ 536 return _tmp_gen_var.assumeError().description 538 #define RDB_TRY_GET_VALUE(name, ...) \ 539 typename decltype(__VA_ARGS__)::ValueInnerType name; \ 540 if (auto _tmp_gen_var = (__VA_ARGS__); \ 541 iroha::expected::hasError(_tmp_gen_var)) \ 542 return _tmp_gen_var.assumeError(); \ 544 name = std::move(_tmp_gen_var.assumeValue()) 546 #define RDB_TRY_GET_VALUE_OR_STR_ERR(name, ...) \ 547 typename decltype(__VA_ARGS__)::ValueInnerType name; \ 548 if (auto _tmp_gen_var = (__VA_ARGS__); \ 549 iroha::expected::hasError(_tmp_gen_var)) \ 550 return _tmp_gen_var.assumeError().description; \ 552 name = std::move(_tmp_gen_var.assumeValue()) 560 : tx_context_(
std::move(tx_context)),
561 context_guard_(tx_context_->this_context_cs) {
563 assert(tx_context_->db_port);
568 return tx_context_->value_buffer;
573 return tx_context_->key_buffer;
577 auto &transaction() {
578 if (!tx_context_->transaction)
579 tx_context_->db_port->prepareTransaction(*tx_context_);
580 return tx_context_->transaction;
583 [[nodiscard]]
bool isTransaction()
const {
584 return tx_context_->transaction !=
nullptr;
590 template <
typename F>
591 auto enumerate(std::unique_ptr<rocksdb::Iterator> &it, F &&func) {
592 if (!it->status().ok())
595 rocksdb::Slice
const key(keyBuffer().data(), keyBuffer().size());
596 for (; it->Valid() && it->key().starts_with(key); it->Next())
597 if (!std::forward<F>(func)(it, key.size()))
608 status = transaction()->Commit();
610 transaction().reset();
618 status = transaction()->Rollback();
620 transaction().reset();
627 status = transaction()->PopSavePoint();
635 status = transaction()->Prepare();
642 transaction().reset();
648 transaction()->SetSavePoint();
655 status = transaction()->RollbackToSavePoint();
661 valueBuffer().clear();
662 fmt::format_to(std::back_inserter(valueBuffer()), kValue, number);
667 return std::from_chars(valueBuffer().data(),
668 valueBuffer().data() + valueBuffer().size(),
673 template <
typename S,
typename... Args>
674 auto get(S
const &fmtstring, Args &&... args) {
676 fmt::format_to(keyBuffer(), fmtstring, std::forward<Args>(args)...);
678 valueBuffer().clear();
679 return transaction()->Get(
680 rocksdb::ReadOptions(),
681 rocksdb::Slice(keyBuffer().data(), keyBuffer().size()),
686 template <
typename S,
typename... Args>
687 auto put(S
const &fmtstring, Args &&... args) {
689 fmt::format_to(keyBuffer(), fmtstring, std::forward<Args>(args)...);
691 return transaction()->Put(
692 rocksdb::Slice(keyBuffer().data(), keyBuffer().size()),
697 template <
typename S,
typename... Args>
698 auto del(S
const &fmtstring, Args &&... args) {
700 fmt::format_to(keyBuffer(), fmtstring, std::forward<Args>(args)...);
702 return transaction()->Delete(
703 rocksdb::Slice(keyBuffer().data(), keyBuffer().size()));
707 template <
typename S,
typename... Args>
708 auto seek(S
const &fmtstring, Args &&... args) {
710 fmt::format_to(keyBuffer(), fmtstring, std::forward<Args>(args)...);
712 std::unique_ptr<rocksdb::Iterator> it(
713 transaction()->GetIterator(rocksdb::ReadOptions()));
714 it->Seek(rocksdb::Slice(keyBuffer().data(), keyBuffer().size()));
721 template <
typename F,
typename S,
typename... Args>
727 fmt::format_to(keyBuffer(), fmtstring, std::forward<Args>(args)...);
728 return enumerate(it, std::forward<F>(func));
733 template <
typename F,
typename S,
typename... Args>
734 auto enumerate(F &&func, S
const &fmtstring, Args &&... args) {
735 auto it = seek(fmtstring, std::forward<Args>(args)...);
736 return enumerate(it, std::forward<F>(func));
740 template <
typename S,
typename... Args>
742 auto it = seek(fmtstring, std::forward<Args>(args)...);
743 if (!it->status().ok())
746 rocksdb::Slice
const key(keyBuffer().data(), keyBuffer().size());
747 for (; it->Valid() && it->key().starts_with(key); it->Next())
748 if (
auto status = transaction()->Delete(it->key()); !status.ok())
755 std::shared_ptr<RocksDBContext> tx_context_;
756 std::lock_guard<std::mutex> context_guard_;
782 template <
typename F,
typename S,
typename... Args>
787 return rdb.enumerate(
788 [func{std::forward<F>(func)}](
auto const &it,
789 auto const prefix_size)
mutable {
791 auto const key = it->key();
792 return std::forward<F>(func)(rocksdb::Slice(
794 key.size() - prefix_size
799 std::forward<Args>(args)...);
802 template <
typename F>
804 return [func{std::forward<F>(func)}](
auto const &it,
805 auto const prefix_size)
mutable {
807 auto const key = it->key();
808 return std::forward<F>(func)(
810 key.size() - prefix_size
818 template <
typename F,
typename S,
typename... Args>
823 return rdb.enumerate(
makeKVLambda(std::forward<F>(func)),
825 std::forward<Args>(args)...);
830 template <
typename F,
typename S,
typename... Args>
833 std::unique_ptr<rocksdb::Iterator> &it,
836 return rdb.enumerate(it,
839 std::forward<Args>(args)...);
842 template <
typename F>
845 if (status.IsNotFound())
850 "{}. Failed with status: {}.",
851 std::forward<F>(op_formatter)(),
855 "{}. Must not exist.",
856 std::forward<F>(op_formatter)());
859 template <
typename F>
862 if (status.IsNotFound())
864 "{}. Was not found.",
865 std::forward<F>(op_formatter)());
869 "{}. Failed with status: {}.",
870 std::forward<F>(op_formatter)(),
876 template <
typename F>
879 if (status.IsNotFound() || status.ok())
883 "{}. Failed with status: {}.",
884 std::forward<F>(op_formatter)(),
888 template <kDbEntry kSc,
typename F>
892 return mustExist(status, std::forward<F>(op_formatter));
894 return mustNotExist(status, std::forward<F>(op_formatter));
896 return canExist(status, std::forward<F>(op_formatter));
900 "Unexpected status check value");
905 typename OperationDescribtionF,
909 OperationDescribtionF &&op_formatter,
913 status = common.
get(std::forward<Args>(args)...);
915 status = common.
put(std::forward<Args>(args)...);
917 status = common.
del(std::forward<Args>(args)...);
921 "Unexpected operation value!");
925 "Delete operation does not report if key existed before deletion!");
928 status, std::forward<OperationDescribtionF>(op_formatter)));
934 typename = std::enable_if_t<std::is_same<T, uint64_t>::value>>
938 std::optional<uint64_t> value;
940 assert(expected::hasValue(status));
941 if (status.assumeValue().ok()) {
953 typename = std::enable_if_t<std::is_same<T, std::string_view>::value>>
957 std::optional<std::string_view> value;
959 assert(expected::hasValue(status));
960 if (status.assumeValue().ok())
969 typename = std::enable_if_t<
970 std::is_same<T, shared_model::interface::RolePermissionSet>::value>>
971 inline std::optional<shared_model::interface::RolePermissionSet>
loadValue(
974 std::optional<shared_model::interface::RolePermissionSet> value;
976 assert(expected::hasValue(status));
977 if (status.assumeValue().ok())
986 typename = std::enable_if_t<std::is_same<T, IrohadVersion>::value>>
990 std::optional<IrohadVersion> value;
992 assert(expected::hasValue(status));
993 if (status.assumeValue().ok()) {
994 auto const &[major, minor, patch] =
998 major.data(), major.data() + major.size(), version.major);
1000 minor.data(), minor.data() + minor.size(), version.minor);
1002 patch.data(), patch.data() + patch.size(), version.patch);
1011 typename = std::enable_if_t<
1012 std::is_same<T, shared_model::interface::Amount>::value>>
1013 inline std::optional<shared_model::interface::Amount>
loadValue(
1016 std::optional<shared_model::interface::Amount> value;
1018 assert(expected::hasValue(status));
1019 if (status.assumeValue().ok())
1027 typename = std::enable_if_t<std::is_same<
1030 inline std::optional<shared_model::interface::GrantablePermissionSet>
1033 std::optional<shared_model::interface::GrantablePermissionSet> value;
1035 assert(expected::hasValue(status));
1036 if (status.assumeValue().ok())
1045 typename = std::enable_if_t<std::is_same<T, bool>::value>>
1049 std::optional<bool> value;
1051 assert(expected::hasValue(status));
1052 if (status.assumeValue().ok())
1061 auto status = executeOperation<kOp, kSc>(
1063 [&] {
return fmt::format(std::forward<Args>(args)...); },
1064 std::forward<Args>(args)...);
1066 return loadValue<kOp, RetT>(common, status);
1082 std::string_view account,
1083 std::string_view domain) {
1084 return dbCall<uint64_t, kOp, kSc>(
1128 return dbCall<std::string_view, kOp, kSc>(
1159 std::string_view account,
1160 std::string_view domain) {
1161 return dbCall<uint64_t, kOp, kSc>(
1177 return dbCall<uint64_t, kOp, kSc>(
1204 inline expected::Result<std::optional<uint64_t>,
DbError>
1221 std::string_view account,
1222 std::string_view domain) {
1223 return forQuorum<kOp, kSc>(common, account, domain);
1237 Result<std::optional<shared_model::interface::RolePermissionSet>,
DbError>
1239 return dbCall<shared_model::interface::RolePermissionSet, kOp, kSc>(
1269 return dbCall<std::string_view, kOp, kSc>(
1285 inline expected::Result<std::optional<std::string_view>,
DbError>
1287 std::string_view account,
1291 return dbCall<std::string_view, kOp, kSc>(
1306 inline expected::Result<std::optional<std::string_view>,
DbError>
1308 std::string_view account,
1312 return dbCall<std::string_view, kOp, kSc>(
1328 return dbCall<std::string_view, kOp, kSc>(
1342 inline expected::Result<std::optional<std::string_view>,
DbError>
1344 return dbCall<std::string_view, kOp, kSc>(
1360 return dbCall<std::string_view, kOp, kSc>(
1376 RocksDbCommon &common, std::string_view asset, std::string_view domain) {
1377 return dbCall<uint64_t, kOp, kSc>(
1411 std::string_view account,
1412 std::string_view domain,
1413 std::string_view role) {
1414 return dbCall<bool, kOp, kSc>(
1432 inline expected::Result<std::optional<std::string_view>,
DbError>
1434 std::string_view account,
1435 std::string_view domain,
1436 std::string_view creator_id,
1437 std::string_view key) {
1438 return dbCall<std::string_view, kOp, kSc>(
1456 std::string_view account,
1457 std::string_view domain,
1458 std::string_view pubkey) {
1459 return dbCall<bool, kOp, kSc>(
1475 return dbCall<std::string_view, kOp, kSc>(
1492 std::string_view account,
1493 std::string_view domain) {
1494 return dbCall<uint64_t, kOp, kSc>(
1513 std::string_view account,
1514 std::string_view domain,
1515 std::string_view asset) {
1516 return dbCall<shared_model::interface::Amount, kOp, kSc>(
1534 std::optional<shared_model::interface::GrantablePermissionSet>,
1537 std::string_view account,
1538 std::string_view domain,
1539 std::string_view grantee_account_id) {
1540 return dbCall<shared_model::interface::GrantablePermissionSet, kOp, kSc>(
1553 std::string_view account,
1554 std::string_view domain) {
1555 assert(!domain.empty());
1556 assert(!account.empty());
1560 std::vector<std::string> roles;
1564 roles.emplace_back(role.ToStringView());
1566 assert(!
"Role can not be empty string!");
1575 return makeError<shared_model::interface::RolePermissionSet>(
1577 "Enumerate account {}@{} roles failed with status: {}.",
1583 for (
auto &role : roles) {
1585 forRole<kDbOperation::kGet, kDbEntry::kMustExist>(common, role);
1587 permissions |= *opt_perm.assumeValue();
1596 if (permissions.
isSet(to_check))
1603 std::string_view domain_id,
1604 std::string_view creator_domain_id,
1608 if (permissions.
isSet(all))
1611 if (domain_id == creator_domain_id && permissions.
isSet(domain))
1620 &grantable_permissions,
1622 if (grantable_permissions.
isSet(granted)
1632 &grantable_permissions,
1635 if (permissions.
isSet(role))
1638 if (grantable_permissions.
isSet(granted))
1645 std::string_view domain_id,
1646 std::string_view creator_domain_id,
1647 std::string_view qry_account_id,
1648 std::string_view creator_id,
1653 if (permissions.
isSet(all))
1656 if (domain_id == creator_domain_id && permissions.
isSet(domain))
1659 if (qry_account_id == creator_id && permissions.
isSet(my))
1677 std::string_view account,
1678 std::string_view domain,
1680 std::string_view writer_filter = std::string_view{},
1681 std::string_view key_filter = std::string_view{},
1682 std::optional<PaginationContext> pagination = std::nullopt,
1683 std::string *next_writer =
nullptr,
1684 std::string *next_key =
nullptr) {
1685 std::string result =
"{";
1686 std::string prev_writer;
1688 auto remains = pagination ? pagination->page_size + 1ull
1689 : std::numeric_limits<uint64_t>::max();
1690 bool found = !pagination || !pagination->first;
1691 bool have_entries =
false;
1697 [&](
auto path,
auto value) {
1698 auto const &[cur_writer, _, cur_key] =
1701 have_entries =
true;
1702 if (!writer_filter.empty() && cur_writer != writer_filter)
1704 if (!key_filter.empty() && cur_key != key_filter)
1709 if (cur_writer != pagination->first->writer_from
1710 || cur_key != pagination->first->key_from)
1715 if (remains == 0ull) {
1717 }
else if (remains-- == 1ull) {
1718 if (next_writer !=
nullptr)
1719 *next_writer = cur_writer;
1720 if (next_key !=
nullptr)
1721 *next_key = cur_key;
1725 if (prev_writer != cur_writer) {
1726 if (prev_writer.empty())
1730 result += cur_writer;
1732 prev_writer = cur_writer;
1739 result += value.ToStringView();
1748 return fmt::format(
"Aggregate account {}@{} data", account, domain);
1751 if (!found && have_entries)
1753 "Invalid pagination.");
1755 result += result.size() == 1ull ?
"}" :
"}}";
1762 "Clear WSV failed.");
Definition: block_query.hpp:17
static auto constexpr kPeersCount
Definition: rocksdb_common.hpp:344
Definition: rocksdb_common.hpp:457
expected::Result< std::optional< bool >, DbError > forSignatory(RocksDbCommon &common, std::string_view account, std::string_view domain, std::string_view pubkey)
Definition: rocksdb_common.hpp:1454
auto enumerateKeysAndValues(RocksDbCommon &rdb, F &&func, S const &strformat, Args &&... args)
Enumerating through all the keys matched to prefix and read the value.
Definition: rocksdb_common.hpp:819
#define RDB_PEERS
Definition: rocksdb_common.hpp:168
#define RDB_PATH_ACCOUNT
Definition: rocksdb_common.hpp:188
#define RDB_F_ASSET_SIZE
Definition: rocksdb_common.hpp:181
static auto constexpr kTransactionByPosition
Definition: rocksdb_common.hpp:254
auto filterDelete(S const &fmtstring, Args &&... args)
Removes range of items by key-filter.
Definition: rocksdb_common.hpp:741
Grantable
Definition: permissions.hpp:76
Definition: rocksdb_common.hpp:460
expected::Result< std::optional< bool >, DbError > forAccountRole(RocksDbCommon &common, std::string_view account, std::string_view domain, std::string_view role)
Definition: rocksdb_common.hpp:1409
auto rollback()
Rollback all transaction changes.
Definition: rocksdb_common.hpp:615
static auto constexpr kRole
Definition: rocksdb_common.hpp:283
static auto constexpr kTxsTotalCount
Definition: rocksdb_common.hpp:349
static auto constexpr kDomainsTotalCount
Definition: rocksdb_common.hpp:362
expected::Result< std::optional< uint64_t >, DbError > forAccountDetailsCount(RocksDbCommon &common, std::string_view account, std::string_view domain)
Definition: rocksdb_common.hpp:1081
expected::Result< std::optional< std::string_view >, DbError > forTopBlockInfo(RocksDbCommon &common)
Definition: rocksdb_common.hpp:1392
static auto constexpr kDomain
Definition: rocksdb_common.hpp:329
expected::Result< std::optional< std::string_view >, DbError > forDomain(RocksDbCommon &common, std::string_view domain)
Definition: rocksdb_common.hpp:1473
expected::Result< std::optional< std::string_view >, DbError > forTransactionStatus(RocksDbCommon &common, std::string_view tx_hash)
Definition: rocksdb_common.hpp:1268
Definition: rocksdb_common.hpp:452
expected::Result< std::optional< shared_model::interface::Amount >, DbError > forAccountAsset(RocksDbCommon &common, std::string_view account, std::string_view domain, std::string_view asset)
Definition: rocksdb_common.hpp:1512
static auto constexpr kAsset
Definition: rocksdb_common.hpp:292
Definition: permissions.hpp:103
static auto constexpr kAllTxsTotalCount
Definition: rocksdb_common.hpp:358
#define RDB_STATUSES
Definition: rocksdb_common.hpp:169
RocksDBContext(std::shared_ptr< RocksDBPort > dbp)
Definition: rocksdb_common.hpp:426
read the value by the key
static auto constexpr kPathAccount
Definition: rocksdb_common.hpp:212
RocksDbCommon(std::shared_ptr< RocksDBContext > tx_context)
Definition: rocksdb_common.hpp:559
Definition: result_fwd.hpp:27
expected::Result< shared_model::interface::RolePermissionSet, DbError > accountPermissions(RocksDbCommon &common, std::string_view account, std::string_view domain)
Definition: rocksdb_common.hpp:1552
auto commit()
Makes commit to DB.
Definition: rocksdb_common.hpp:605
#define RDB_SIGNATORIES
Definition: rocksdb_common.hpp:175
auto & valueBuffer()
Get value buffer.
Definition: rocksdb_common.hpp:567
kDbEntry
Definition: rocksdb_common.hpp:773
expected::Result< std::optional< uint64_t >, DbError > forAccountAssetSize(RocksDbCommon &common, std::string_view account, std::string_view domain)
Definition: rocksdb_common.hpp:1490
static auto constexpr kPathPeers
Definition: rocksdb_common.hpp:215
expected::Result< void, DbError > checkPermissions(shared_model::interface::RolePermissionSet const &permissions, shared_model::interface::permissions::Role const to_check)
Definition: rocksdb_common.hpp:1593
Definition: rocksdb_common.hpp:422
static auto constexpr kPathRoles
Definition: rocksdb_common.hpp:223
Definition: rocksdb_common.hpp:453
static auto constexpr kPathAccountRoles
Definition: rocksdb_common.hpp:204
void savepoint()
Saves current state of a transaction.
Definition: rocksdb_common.hpp:646
#define RDB_XXX
Definition: rocksdb_common.hpp:157
static auto constexpr kPathTransactionByPosition
Definition: rocksdb_common.hpp:232
auto encode(uint64_t number)
Encode number into.
Definition: rocksdb_common.hpp:660
Definition: rocksdb_common.hpp:487
static auto constexpr kPathStore
Definition: rocksdb_common.hpp:209
Definition: rocksdb_common.hpp:190
Role
Definition: permissions.hpp:18
uint32_t code
Definition: rocksdb_common.hpp:466
static auto constexpr kAccountDetail
Definition: rocksdb_common.hpp:301
static auto constexpr kAccountDetailsCount
Definition: rocksdb_common.hpp:366
auto enumerate(F &&func, S const &fmtstring, Args &&... args)
Definition: rocksdb_common.hpp:734
auto put(S const &fmtstring, Args &&... args)
Put data from.
Definition: rocksdb_common.hpp:687
static const std::string kDelimiter
Definition: rocksdb_common.hpp:196
Definition: rocksdb_common.hpp:458
auto forAccount(RocksDbCommon &common, std::string_view account, std::string_view domain)
Definition: rocksdb_common.hpp:1220
static auto constexpr kStoreVersion
Definition: rocksdb_common.hpp:370
expected::Result< std::optional< std::string_view >, DbError > forSettings(RocksDbCommon &common, std::string_view key)
Definition: rocksdb_common.hpp:1326
static auto constexpr kTopBlock
Definition: rocksdb_common.hpp:332
#define RDB_SETTINGS
Definition: rocksdb_common.hpp:163
expected::Result< std::string, DbError > aggregateAccountDetails(RocksDbCommon &common, std::string_view account, std::string_view domain, uint64_t &total, std::string_view writer_filter=std::string_view{}, std::string_view key_filter=std::string_view{}, std::optional< PaginationContext > pagination=std::nullopt, std::string *next_writer=nullptr, std::string *next_key=nullptr)
Definition: rocksdb_common.hpp:1675
void skip()
Skips all changes made in this transaction.
Definition: rocksdb_common.hpp:640
#define RDB_DELIMITER
Definition: rocksdb_common.hpp:156
auto seek(S const &fmtstring, Args &&... args)
Searches for the first key that matches a prefix.
Definition: rocksdb_common.hpp:708
auto makeKVLambda(F &&func)
Definition: rocksdb_common.hpp:803
static constexpr size_t kDelimiterSize
Definition: rocksdb_common.hpp:191
static auto constexpr kPathAccountAssets
Definition: rocksdb_common.hpp:241
#define RDB_TLS
Definition: rocksdb_common.hpp:178
static auto constexpr kBlocksTotalCount
Definition: rocksdb_common.hpp:354
expected::Result< void, DbError > checkGrantablePermissions(shared_model::interface::RolePermissionSet const &permissions, shared_model::interface::GrantablePermissionSet const &grantable_permissions, shared_model::interface::permissions::Grantable const granted)
Definition: rocksdb_common.hpp:1617
auto del(S const &fmtstring, Args &&... args)
Delete database entry by the key.
Definition: rocksdb_common.hpp:698
auto decode(uint64_t &number)
Decode number from.
Definition: rocksdb_common.hpp:666
#define RDB_F_TOTAL_COUNT
Definition: rocksdb_common.hpp:184
static constexpr size_t kDelimiterCountForAField
Definition: rocksdb_common.hpp:194
#define RDB_NETWORK
Definition: rocksdb_common.hpp:162
expected::Result< void, DbError > checkStatus(rocksdb::Status status, F &&op_formatter)
Definition: rocksdb_common.hpp:889
#define RDB_ROLES
Definition: rocksdb_common.hpp:165
expected::Result< std::optional< IrohadVersion >, DbError > forWSVVersion(RocksDbCommon &common)
Definition: rocksdb_common.hpp:1111
Definition: rocksdb_common.hpp:461
#define RDB_POSITION
Definition: rocksdb_common.hpp:172
DbErrorCode
Definition: rocksdb_common.hpp:451
expected::Result< std::optional< RetT >, DbError > dbCall(RocksDbCommon &common, Args &&... args)
Definition: rocksdb_common.hpp:1059
expected::Result< std::optional< uint64_t >, DbError > forPeersCount(RocksDbCommon &common)
Definition: rocksdb_common.hpp:1252
Db errors structure.
Definition: rocksdb_common.hpp:465
static auto constexpr kWsvVersion
Definition: rocksdb_common.hpp:374
expected::Result< T, DbError > makeError(uint32_t code, DbError &&e)
Definition: rocksdb_common.hpp:480
#define RDB_TRANSACTIONS
Definition: rocksdb_common.hpp:166
auto get(S const &fmtstring, Args &&... args)
Read data from database to.
Definition: rocksdb_common.hpp:674
expected::Result< std::optional< shared_model::interface::RolePermissionSet >, DbError > forRole(RocksDbCommon &common, std::string_view role)
Definition: rocksdb_common.hpp:1238
expected::Result< std::optional< std::string_view >, DbError > forTransactionByPosition(RocksDbCommon &common, std::string_view account, uint64_t ts, uint64_t height, uint64_t index)
Definition: rocksdb_common.hpp:1286
expected::Result< std::optional< std::string_view >, DbError > forPeerTLS(RocksDbCommon &common, std::string_view pubkey)
Definition: rocksdb_common.hpp:1358
auto enumerateKeys(RocksDbCommon &rdb, F &&func, S const &strformat, Args &&... args)
Enumerating through all the keys matched to prefix without reading value.
Definition: rocksdb_common.hpp:783
#define RDB_ROOT
Definition: rocksdb_common.hpp:159
expected::Result< void, DbError > mustNotExist(rocksdb::Status const &status, F &&op_formatter)
Definition: rocksdb_common.hpp:843
Definition: rocksdb_common.hpp:454
expected::Result< void, DbError > dropWSV(RocksDbCommon &common)
Definition: rocksdb_common.hpp:1759
static auto constexpr kSetting
Definition: rocksdb_common.hpp:320
Definition: rocksdb_common.hpp:459
static auto constexpr kAccountRole
Definition: rocksdb_common.hpp:279
expected::Result< std::optional< std::string_view >, DbError > forTransactionByTimestamp(RocksDbCommon &common, std::string_view account, uint64_t ts, uint64_t height, uint64_t index)
Definition: rocksdb_common.hpp:1307
entry must exist and data must be accessible
#define RDB_ACCOUNTS
Definition: rocksdb_common.hpp:167
expected::Result< void, DbError > canExist(rocksdb::Status const &status, F &&op_formatter)
Definition: rocksdb_common.hpp:877
put the value with the key
auto rollbackToSavepoint()
Restores to the previously saved savepoint.
Definition: rocksdb_common.hpp:652
expected::Result< std::optional< std::string_view >, DbError > forAccountDetail(RocksDbCommon &common, std::string_view account, std::string_view domain, std::string_view creator_id, std::string_view key)
Definition: rocksdb_common.hpp:1433
auto prepare()
Prepare tx for 2pc.
Definition: rocksdb_common.hpp:632
Definition: rocksdb_common.hpp:557
#define RDB_STORE
Definition: rocksdb_common.hpp:160
static auto constexpr kAccountAssetSize
Definition: rocksdb_common.hpp:341
#define RDB_ERROR_CHECK(...)
Definition: rocksdb_common.hpp:528
static auto constexpr kAccountAsset
Definition: rocksdb_common.hpp:296
Definition: rocksdb_common.hpp:455
static auto constexpr kQuorum
Definition: rocksdb_common.hpp:337
expected::Result< rocksdb::Status, DbError > executeOperation(RocksDbCommon &common, OperationDescribtionF &&op_formatter, Args &&... args)
Definition: rocksdb_common.hpp:907
expected::Result< std::optional< std::string_view >, DbError > forPeerAddress(RocksDbCommon &common, std::string_view pubkey)
Definition: rocksdb_common.hpp:1343
static auto constexpr kPeerAddress
Definition: rocksdb_common.hpp:305
auto enumerate(std::unique_ptr< rocksdb::Iterator > &it, F &&func, S const &fmtstring, Args &&... args)
Definition: rocksdb_common.hpp:722
#define RDB_ASSETS
Definition: rocksdb_common.hpp:164
static auto constexpr kTransactionByTs
Definition: rocksdb_common.hpp:259
#define RDB_WSV
Definition: rocksdb_common.hpp:161
std::optional< uint64_t > loadValue(RocksDbCommon &common, expected::Result< rocksdb::Status, DbError > const &status)
Definition: rocksdb_common.hpp:935
static auto constexpr kTransactionByTsLowerBound
Definition: rocksdb_common.hpp:269
static auto constexpr kTransactionByHeight
Definition: rocksdb_common.hpp:264
expected::Result< std::optional< uint64_t >, DbError > forBlocksTotalCount(RocksDbCommon &common)
Definition: rocksdb_common.hpp:1141
static auto constexpr kPathSignatories
Definition: rocksdb_common.hpp:219
#define RDB_F_QUORUM
Definition: rocksdb_common.hpp:180
static auto constexpr kPathTransactionByTs
Definition: rocksdb_common.hpp:227
expected::Result< void, DbError > initialize(std::string const &db_name)
Definition: rocksdb_common.hpp:492
static auto constexpr kTransactionStatus
Definition: rocksdb_common.hpp:274
check the entry exists by the key
static auto constexpr kPathAccountDetail
Definition: rocksdb_common.hpp:237
static auto constexpr kGranted
Definition: rocksdb_common.hpp:316
static auto constexpr kSignatory
Definition: rocksdb_common.hpp:288
static auto constexpr kPeerTLS
Definition: rocksdb_common.hpp:310
static auto constexpr kBlockDataInStore
Definition: rocksdb_common.hpp:250
std::string description
Definition: rocksdb_common.hpp:467
Definition: rocksdb_common.hpp:456
Definition: irohad_version.hpp:23
expected::Result< std::optional< IrohadVersion >, DbError > forStoreVersion(RocksDbCommon &common)
Definition: rocksdb_common.hpp:1098
#define RDB_PATH_DOMAIN
Definition: rocksdb_common.hpp:187
bool isSet(Perm p) const
Definition: permissions.cpp:94
#define RDB_F_TOP_BLOCK
Definition: rocksdb_common.hpp:182
expected::Result< T, DbError > makeError(uint32_t code, char const *format, Args &&... args)
Definition: rocksdb_common.hpp:471
Status
Definition: status.hpp:12
kDbOperation
Definition: rocksdb_common.hpp:762
auto & keyBuffer()
Get key buffer.
Definition: rocksdb_common.hpp:572
#define RDB_ADDRESS
Definition: rocksdb_common.hpp:177
expected::Result< void, DbError > mustExist(rocksdb::Status const &status, F &&op_formatter)
Definition: rocksdb_common.hpp:860
expected::Result< std::optional< shared_model::interface::GrantablePermissionSet >, DbError > forGrantablePermissions(RocksDbCommon &common, std::string_view account, std::string_view domain, std::string_view grantee_account_id)
Definition: rocksdb_common.hpp:1536
#define RDB_F_PEERS_COUNT
Definition: rocksdb_common.hpp:183
expected::Result< std::optional< uint64_t >, DbError > forTxsTotalCount(RocksDbCommon &common, std::string_view account_id)
Definition: rocksdb_common.hpp:1175
#define RDB_DOMAIN
Definition: rocksdb_common.hpp:174
expected::Result< std::optional< uint64_t >, DbError > forDomainsTotalCount(RocksDbCommon &common)
Definition: rocksdb_common.hpp:1205
static auto constexpr kPathWsv
Definition: rocksdb_common.hpp:207
#define RDB_OPTIONS
Definition: rocksdb_common.hpp:176
#define RDB_GRANTABLE_PER
Definition: rocksdb_common.hpp:171
#define RDB_F_VERSION
Definition: rocksdb_common.hpp:185
expected::Result< std::optional< uint64_t >, DbError > forQuorum(RocksDbCommon &common, std::string_view account, std::string_view domain)
Definition: rocksdb_common.hpp:1157
expected::Result< std::optional< uint64_t >, DbError > forAsset(RocksDbCommon &common, std::string_view asset, std::string_view domain)
Definition: rocksdb_common.hpp:1375
expected::Result< std::optional< std::string_view >, DbError > forBlock(RocksDbCommon &common, uint64_t height)
Definition: rocksdb_common.hpp:1126
auto release()
Definition: rocksdb_common.hpp:624
#define RDB_DETAILS
Definition: rocksdb_common.hpp:170
#define RDB_TIMESTAMP
Definition: rocksdb_common.hpp:173