hyperledger/iroha
Iroha - A simple, decentralized ledger http://iroha.tech
synchronizer_impl.hpp
Go to the documentation of this file.
1 
6 #ifndef IROHA_SYNCHRONIZER_IMPL_HPP
7 #define IROHA_SYNCHRONIZER_IMPL_HPP
8 
10 
11 #include <rxcpp/rx-lite.hpp>
15 #include "common/result_fwd.hpp"
16 #include "logger/logger_fwd.hpp"
17 #include "network/block_loader.hpp"
20 
21 namespace iroha {
22 
23  namespace ametsuchi {
24  class BlockQueryFactory;
25  class CommandExecutor;
26  } // namespace ametsuchi
27 
28  namespace synchronizer {
29 
30  class SynchronizerImpl : public Synchronizer {
31  public:
33  std::unique_ptr<iroha::ametsuchi::CommandExecutor> command_executor,
34  std::shared_ptr<network::ConsensusGate> consensus_gate,
35  std::shared_ptr<validation::ChainValidator> validator,
36  std::shared_ptr<ametsuchi::MutableFactory> mutable_factory,
37  std::shared_ptr<ametsuchi::BlockQueryFactory> block_query_factory,
38  std::shared_ptr<network::BlockLoader> block_loader,
39  logger::LoggerPtr log);
40 
41  ~SynchronizerImpl() override;
42 
43  void processOutcome(consensus::GateObject object) override;
44  rxcpp::observable<SynchronizationEvent> on_commit_chain() override;
45 
46  private:
55  ametsuchi::CommitResult downloadAndCommitMissingBlocks(
59  &public_keys);
60 
61  void processNext(const consensus::PairValid &msg);
62 
68  void processDifferent(
69  const consensus::Synchronizable &msg,
71 
73  std::string>
74  getStorage();
75 
76  std::shared_ptr<iroha::ametsuchi::CommandExecutor> command_executor_;
77 
78  std::shared_ptr<validation::ChainValidator> validator_;
79  std::shared_ptr<ametsuchi::MutableFactory> mutable_factory_;
80  std::shared_ptr<ametsuchi::BlockQueryFactory> block_query_factory_;
81  std::shared_ptr<network::BlockLoader> block_loader_;
82 
83  // internal
84  rxcpp::composite_subscription notifier_lifetime_;
85  rxcpp::subjects::subject<SynchronizationEvent> notifier_;
86  rxcpp::composite_subscription subscription_;
87 
88  logger::LoggerPtr log_;
89  };
90 
91  } // namespace synchronizer
92 } // namespace iroha
93 
94 #endif // IROHA_SYNCHRONIZER_IMPL_HPP
Current pair is valid.
Definition: gate_object.hpp:34
uint64_t HeightType
Type of height (for Block, Proposal etc)
Definition: types.hpp:48
Definition: synchronizer_impl.hpp:30
Definition: synchronizer.hpp:19
Definition: result_fwd.hpp:27
std::vector< std::string > PublicKeyCollectionType
Type of public keys&#39; collection.
Definition: types.hpp:52
Definition: gate_object.hpp:44
std::shared_ptr< Logger > LoggerPtr
Definition: logger_fwd.hpp:22
Definition: block_query.hpp:15
boost::variant< PairValid, VoteOther, ProposalReject, BlockReject, AgreementOnNone, Future > GateObject
Definition: gate_object.hpp:95