hyperledger/iroha
Iroha - A simple, decentralized ledger http://iroha.tech
storage_impl.hpp
Go to the documentation of this file.
1 
6 #ifndef IROHA_STORAGE_IMPL_HPP
7 #define IROHA_STORAGE_IMPL_HPP
8 
10 
11 #include <soci/soci.h>
12 
13 namespace shared_model {
14  namespace interface {
15  class QueryResponseFactory;
16  } // namespace interface
17 } // namespace shared_model
18 namespace iroha {
19 
20  class PendingTransactionStorage;
21 
22  namespace ametsuchi {
23 
24  class AmetsuchiTest;
25  class PostgresOptions;
26  class VmCaller;
27 
28  class StorageImpl final : public StorageBase {
29  public:
30  static expected::Result<std::shared_ptr<StorageImpl>, std::string> create(
31  const PostgresOptions &postgres_options,
32  std::shared_ptr<PoolWrapper> pool_wrapper,
33  std::shared_ptr<shared_model::interface::PermissionToString>
34  perm_converter,
35  std::shared_ptr<PendingTransactionStorage> pending_txs_storage,
36  std::shared_ptr<shared_model::interface::QueryResponseFactory>
37  query_response_factory,
38  std::unique_ptr<BlockStorageFactory> temporary_block_storage_factory,
39  std::shared_ptr<BlockStorage> persistent_block_storage,
40  std::optional<std::reference_wrapper<const VmCaller>> vm_caller_ref,
41  std::function<void(
42  std::shared_ptr<shared_model::interface::Block const>)> callback,
43  logger::LoggerManagerTreePtr log_manager,
44  size_t pool_size = 10);
45 
47  createCommandExecutor() override;
48 
49  std::unique_ptr<TemporaryWsv> createTemporaryWsv(
50  std::shared_ptr<CommandExecutor> command_executor) override;
51 
52  boost::optional<std::unique_ptr<SettingQuery>> createSettingQuery()
53  const override;
54 
56  createQueryExecutor(
57  std::shared_ptr<PendingTransactionStorage> pending_txs_storage,
58  std::shared_ptr<shared_model::interface::QueryResponseFactory>
59  response_factory) const override;
60 
62  const shared_model::interface::Peer &peer) override;
63 
65  createMutableStorage(std::shared_ptr<CommandExecutor> command_executor,
66  BlockStorageFactory &storage_factory) override;
67 
69  createMutableStorage(
70  std::shared_ptr<CommandExecutor> command_executor) override;
71 
72  expected::Result<void, std::string> resetPeers() override;
73 
74  void freeConnections() override;
75 
76  CommitResult commitPrepared(
77  std::shared_ptr<const shared_model::interface::Block> block) override;
78 
79  std::shared_ptr<WsvQuery> getWsvQuery() const override;
80 
81  std::shared_ptr<BlockQuery> getBlockQuery() const override;
82 
83  void prepareBlock(std::unique_ptr<TemporaryWsv> wsv) override;
84 
85  ~StorageImpl() override;
86 
87  protected:
89  boost::optional<std::shared_ptr<const iroha::LedgerState>>
90  ledger_state,
91  const PostgresOptions &postgres_options,
92  std::shared_ptr<BlockStorage> block_store,
93  std::shared_ptr<PoolWrapper> pool_wrapper,
94  std::shared_ptr<shared_model::interface::PermissionToString>
95  perm_converter,
96  std::shared_ptr<PendingTransactionStorage> pending_txs_storage,
97  std::shared_ptr<shared_model::interface::QueryResponseFactory>
98  query_response_factory,
99  std::unique_ptr<BlockStorageFactory> temporary_block_storage_factory,
100  size_t pool_size,
101  std::optional<std::reference_wrapper<const VmCaller>> vm_caller,
102  std::function<void(
103  std::shared_ptr<shared_model::interface::Block const>)> callback,
104  logger::LoggerManagerTreePtr log_manager);
105 
106  private:
107  friend class ::iroha::ametsuchi::AmetsuchiTest;
108 
112  void tryRollback(soci::session &session);
113 
115  std::shared_ptr<PoolWrapper> pool_wrapper_;
116  std::shared_ptr<soci::connection_pool> &connection_;
117  mutable std::shared_timed_mutex drop_mutex_;
118  const size_t pool_size_;
119  std::string prepared_block_name_;
120  };
121  } // namespace ametsuchi
122 } // namespace iroha
123 
124 #endif // IROHA_STORAGE_IMPL_HPP
Definition: block_query.hpp:17
Definition: postgres_options.hpp:19
Definition: peer.hpp:20
Definition: result_fwd.hpp:27
Definition: block_query.hpp:15
std::shared_ptr< LoggerManagerTree > LoggerManagerTreePtr
Definition: logger_manager_fwd.hpp:14
Definition: block_storage_factory.hpp:19
Definition: storage_base.hpp:40
Definition: command_executor.hpp:13
Definition: storage_impl.hpp:28