TARAXA
pbft_syncing_state.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 #include <atomic>
4 #include <memory>
5 #include <shared_mutex>
6 
7 #include "common/types.hpp"
8 
9 namespace taraxa::network::tarcap {
10 
11 class TaraxaPeer;
12 
18  public:
19  PbftSyncingState(uint16_t deep_syncing_threshold);
20 
28  bool setPbftSyncing(bool syncing, PbftPeriod current_period = 0, std::shared_ptr<TaraxaPeer> peer = nullptr);
29 
33  void setSyncStatePeriod(PbftPeriod period);
34 
40  bool isDeepPbftSyncing() const;
41 
47  bool isPbftSyncing();
48 
54  std::shared_ptr<TaraxaPeer> syncingPeer() const;
55 
59  void setLastSyncPacketTime();
60 
66  bool isActivelySyncing() const;
67 
68  private:
69  std::atomic<bool> deep_pbft_syncing_{false};
70  std::atomic<bool> pbft_syncing_{false};
71 
72  const uint16_t kDeepSyncingThreshold;
73 
74  // Number of seconds needed for ongoing syncing to be declared as inactive
75  static constexpr std::chrono::seconds kSyncingInactivityThreshold{60};
76 
77  // What time was received last syncing packet
79  mutable std::shared_mutex time_mutex_;
80 
81  // Peer that the node is syncing with
82  std::shared_ptr<TaraxaPeer> peer_;
83  mutable std::shared_mutex peer_mutex_;
84 };
85 
86 } // namespace taraxa::network::tarcap
PbftSyncingState contains common members and functions related to syncing that are shared among multi...
Definition: pbft_syncing_state.hpp:17
std::shared_mutex time_mutex_
Definition: pbft_syncing_state.hpp:79
std::chrono::steady_clock::time_point last_received_sync_packet_time_
Definition: pbft_syncing_state.hpp:78
bool isPbftSyncing()
Check if PBFT is in syncing. If not in active syncing, set PBFT syncing to false.
Definition: pbft_syncing_state.cpp:66
std::shared_ptr< TaraxaPeer > syncingPeer() const
Get the peer that our node is syncing with.
Definition: pbft_syncing_state.cpp:10
bool isActivelySyncing() const
Check if syncing is active.
Definition: pbft_syncing_state.cpp:57
static constexpr std::chrono::seconds kSyncingInactivityThreshold
Definition: pbft_syncing_state.hpp:75
std::shared_ptr< TaraxaPeer > peer_
Definition: pbft_syncing_state.hpp:82
void setLastSyncPacketTime()
Set current time as last received sync packet time.
Definition: pbft_syncing_state.cpp:52
bool setPbftSyncing(bool syncing, PbftPeriod current_period=0, std::shared_ptr< TaraxaPeer > peer=nullptr)
Set pbft syncing.
Definition: pbft_syncing_state.cpp:24
bool isDeepPbftSyncing() const
Check if PBFT is in deep syncing.
Definition: pbft_syncing_state.cpp:64
PbftSyncingState(uint16_t deep_syncing_threshold)
Definition: pbft_syncing_state.cpp:8
std::shared_mutex peer_mutex_
Definition: pbft_syncing_state.hpp:83
std::atomic< bool > pbft_syncing_
Definition: pbft_syncing_state.hpp:70
const uint16_t kDeepSyncingThreshold
Definition: pbft_syncing_state.hpp:72
void setSyncStatePeriod(PbftPeriod period)
Set current pbft period.
Definition: pbft_syncing_state.cpp:15
std::atomic< bool > deep_pbft_syncing_
Definition: pbft_syncing_state.hpp:69
std::chrono::system_clock::time_point time_point
Definition: watches.hpp:12
Definition: vote_manager.hpp:23
EthBlockNumber PbftPeriod
Definition: types.hpp:24