xrpld
Loading...
Searching...
No Matches
xrpl::InboundLedger Class Referencefinal

#include <InboundLedger.h>

Inheritance diagram for xrpl::InboundLedger:
Collaboration diagram for xrpl::InboundLedger:

Public Types

enum class  Reason { HISTORY , GENERIC , CONSENSUS }
using clock_type = beast::AbstractClock<std::chrono::steady_clock>
using neededHash_t = std::pair<protocol::TMGetObjectByHash::ObjectType, uint256>

Public Member Functions

 InboundLedger (Application &app, uint256 const &hash, std::uint32_t seq, Reason reason, clock_type &, std::unique_ptr< PeerSet > peerSet)
 ~InboundLedger () override
void update (std::uint32_t seq)
bool isComplete () const
 Returns true if we got all the data.
bool isFailed () const
 Returns false if we failed to get the data.
std::shared_ptr< Ledger const > getLedger () const
std::uint32_t getSeq () const
bool checkLocal ()
void init (ScopedLockType &collectionLock)
bool gotData (std::weak_ptr< Peer >, std::shared_ptr< protocol::TMLedgerData > const &)
 Stash a TMLedgerData received from a peer for later processing Returns 'true' if we need to dispatch.
json::Value getJson (int)
 Return a json::ValueType::Object.
void runData ()
 Process pending TMLedgerData Query the a random sample of the 'best' peers.
void touch ()
clock_type::time_point getLastAction () const
virtual void cancel ()
 Cancel the task by marking it as failed if the task is not done.
shared_from_this (T... args)
weak_from_this (T... args)

Public Attributes

friend Object

Protected Types

using ScopedLockType = std::unique_lock<std::recursive_mutex>

Protected Member Functions

void setTimer (ScopedLockType &)
 Schedule a call to queueJob() after timerInterval_.
void queueJob (ScopedLockType &)
 Queue a job to call invokeOnTimer().
bool isDone () const

Protected Attributes

Applicationapp_
beast::Journal journal_
std::recursive_mutex mtx_
uint256 const hash_
 The hash of the object (in practice, always a ledger) we are trying to fetch.
int timeouts_ {0}
bool complete_ {false}
bool failed_ {false}
bool progress_ {false}
 Whether forward progress has been made.
std::chrono::milliseconds timerInterval_
 The minimum time to wait between calls to execute().
QueueJobParameter queueJobParameter_

Private Types

enum class  TriggerReason { Added , Reply , Timeout }

Private Member Functions

void filterNodes (std::vector< std::pair< SHAMapNodeID, uint256 > > &nodes, TriggerReason reason)
void trigger (std::shared_ptr< Peer > const &, TriggerReason)
 Request more nodes, perhaps from a specific peer.
std::vector< neededHash_tgetNeededHashes ()
void addPeers ()
 Add more peers to the set, if possible.
void tryDB (node_store::Database &srcDB)
void done ()
void onTimer (bool progress, ScopedLockType &peerSetLock) override
 Called with a lock by the PeerSet when the timer expires.
std::size_t getPeerCount () const
std::weak_ptr< TimeoutCounterpmDowncast () override
 Return a weak pointer to this.
int processData (std::shared_ptr< Peer > peer, protocol::TMLedgerData const &data)
 Process one TMLedgerData Returns the number of useful nodes.
bool takeHeader (std::string_view data)
 Take ledger header data Call with a lock.
void receiveNode (std::shared_ptr< Peer > const &peer, protocol::TMLedgerData const &packet, SHAMapAddNode &san)
 Process node data received from a peer Call with a lock.
bool takeTxRootNode (std::string_view data, SHAMapAddNode &san)
 Process AS root node received from a peer Call with a lock.
bool takeAsRootNode (std::string_view data, SHAMapAddNode &san)
 Process AS root node received from a peer Call with a lock.
std::vector< uint256neededTxHashes (int max, SHAMapSyncFilter const *filter) const
std::vector< uint256neededStateHashes (int max, SHAMapSyncFilter const *filter) const
void invokeOnTimer ()
 Calls onTimer() if in the right state.

Static Private Member Functions

static auto & getCounter () noexcept

Private Attributes

clock_typeclock_
clock_type::time_point lastAction_
std::shared_ptr< Ledgerledger_
bool haveHeader_ {false}
bool haveState_ {false}
bool haveTransactions_ {false}
bool signaled_ {false}
bool byHash_ {true}
std::uint32_t seq_
Reason const reason_
std::set< uint256recentNodes_
SHAMapAddNode stats_
std::mutex receivedDataLock_
std::vector< std::pair< std::weak_ptr< Peer >, std::shared_ptr< protocol::TMLedgerData > > > receivedData_
bool receiveDispatched_ {false}
std::unique_ptr< PeerSetpeerSet_
boost::asio::basic_waitable_timer< std::chrono::steady_clocktimer_

Detailed Description

Definition at line 33 of file InboundLedger.h.

Member Typedef Documentation

◆ clock_type

◆ neededHash_t

using xrpl::InboundLedger::neededHash_t = std::pair<protocol::TMGetObjectByHash::ObjectType, uint256>

Definition at line 99 of file InboundLedger.h.

◆ ScopedLockType

Definition at line 71 of file TimeoutCounter.h.

Member Enumeration Documentation

◆ Reason

enum class xrpl::InboundLedger::Reason
strong
Enumerator
HISTORY 
GENERIC 
CONSENSUS 

Definition at line 41 of file InboundLedger.h.

◆ TriggerReason

enum class xrpl::InboundLedger::TriggerReason
strongprivate
Enumerator
Added 
Reply 
Timeout 

Definition at line 123 of file InboundLedger.h.

Constructor & Destructor Documentation

◆ InboundLedger()

xrpl::InboundLedger::InboundLedger ( Application & app,
uint256 const & hash,
std::uint32_t seq,
Reason reason,
clock_type & clock,
std::unique_ptr< PeerSet > peerSet )

Definition at line 71 of file InboundLedger.cpp.

◆ ~InboundLedger()

xrpl::InboundLedger::~InboundLedger ( )
override

Definition at line 171 of file InboundLedger.cpp.

Member Function Documentation

◆ update()

void xrpl::InboundLedger::update ( std::uint32_t seq)

Definition at line 136 of file InboundLedger.cpp.

◆ isComplete()

bool xrpl::InboundLedger::isComplete ( ) const

Returns true if we got all the data.

Definition at line 65 of file InboundLedger.h.

◆ isFailed()

bool xrpl::InboundLedger::isFailed ( ) const

Returns false if we failed to get the data.

Definition at line 74 of file InboundLedger.h.

◆ getLedger()

std::shared_ptr< Ledger const > xrpl::InboundLedger::getLedger ( ) const

Definition at line 80 of file InboundLedger.h.

◆ getSeq()

std::uint32_t xrpl::InboundLedger::getSeq ( ) const

Definition at line 86 of file InboundLedger.h.

◆ checkLocal()

bool xrpl::InboundLedger::checkLocal ( )

Definition at line 149 of file InboundLedger.cpp.

◆ init()

void xrpl::InboundLedger::init ( ScopedLockType & collectionLock)

Definition at line 94 of file InboundLedger.cpp.

◆ gotData()

bool xrpl::InboundLedger::gotData ( std::weak_ptr< Peer > peer,
std::shared_ptr< protocol::TMLedgerData > const & data )

Stash a TMLedgerData received from a peer for later processing Returns 'true' if we need to dispatch.

Definition at line 1048 of file InboundLedger.cpp.

◆ getJson()

json::Value xrpl::InboundLedger::getJson ( int )

Return a json::ValueType::Object.

Definition at line 1303 of file InboundLedger.cpp.

◆ runData()

void xrpl::InboundLedger::runData ( )

Process pending TMLedgerData Query the a random sample of the 'best' peers.

Definition at line 1256 of file InboundLedger.cpp.

◆ touch()

void xrpl::InboundLedger::touch ( )

Definition at line 111 of file InboundLedger.h.

◆ getLastAction()

clock_type::time_point xrpl::InboundLedger::getLastAction ( ) const

Definition at line 117 of file InboundLedger.h.

◆ filterNodes()

void xrpl::InboundLedger::filterNodes ( std::vector< std::pair< SHAMapNodeID, uint256 > > & nodes,
TriggerReason reason )
private

Definition at line 739 of file InboundLedger.cpp.

◆ trigger()

void xrpl::InboundLedger::trigger ( std::shared_ptr< Peer > const & peer,
TriggerReason reason )
private

Request more nodes, perhaps from a specific peer.

Definition at line 465 of file InboundLedger.cpp.

◆ getNeededHashes()

std::vector< InboundLedger::neededHash_t > xrpl::InboundLedger::getNeededHashes ( )
private

Definition at line 1012 of file InboundLedger.cpp.

◆ addPeers()

void xrpl::InboundLedger::addPeers ( )
private

Add more peers to the set, if possible.

Definition at line 394 of file InboundLedger.cpp.

◆ tryDB()

void xrpl::InboundLedger::tryDB ( node_store::Database & srcDB)
private

Definition at line 228 of file InboundLedger.cpp.

◆ done()

void xrpl::InboundLedger::done ( )
private

Definition at line 414 of file InboundLedger.cpp.

◆ onTimer()

void xrpl::InboundLedger::onTimer ( bool progress,
ScopedLockType & peerSetLock )
overrideprivatevirtual

Called with a lock by the PeerSet when the timer expires.

Implements xrpl::TimeoutCounter.

Definition at line 344 of file InboundLedger.cpp.

◆ getPeerCount()

std::size_t xrpl::InboundLedger::getPeerCount ( ) const
private

Definition at line 128 of file InboundLedger.cpp.

◆ pmDowncast()

std::weak_ptr< TimeoutCounter > xrpl::InboundLedger::pmDowncast ( )
overrideprivatevirtual

Return a weak pointer to this.

Implements xrpl::TimeoutCounter.

Definition at line 408 of file InboundLedger.cpp.

◆ processData()

int xrpl::InboundLedger::processData ( std::shared_ptr< Peer > peer,
protocol::TMLedgerData const & data )
private

Process one TMLedgerData Returns the number of useful nodes.

Definition at line 1076 of file InboundLedger.cpp.

◆ takeHeader()

bool xrpl::InboundLedger::takeHeader ( std::string_view data)
private

Take ledger header data Call with a lock.

Definition at line 783 of file InboundLedger.cpp.

◆ receiveNode()

void xrpl::InboundLedger::receiveNode ( std::shared_ptr< Peer > const & peer,
protocol::TMLedgerData const & packet,
SHAMapAddNode & san )
private

Process node data received from a peer Call with a lock.

Definition at line 829 of file InboundLedger.cpp.

◆ takeTxRootNode()

bool xrpl::InboundLedger::takeTxRootNode ( std::string_view data,
SHAMapAddNode & san )
private

Process AS root node received from a peer Call with a lock.

Definition at line 980 of file InboundLedger.cpp.

◆ takeAsRootNode()

bool xrpl::InboundLedger::takeAsRootNode ( std::string_view data,
SHAMapAddNode & san )
private

Process AS root node received from a peer Call with a lock.

Definition at line 944 of file InboundLedger.cpp.

◆ neededTxHashes()

std::vector< uint256 > xrpl::InboundLedger::neededTxHashes ( int max,
SHAMapSyncFilter const * filter ) const
private

Definition at line 214 of file InboundLedger.cpp.

◆ neededStateHashes()

std::vector< uint256 > xrpl::InboundLedger::neededStateHashes ( int max,
SHAMapSyncFilter const * filter ) const
private

Definition at line 220 of file InboundLedger.cpp.

◆ cancel()

void xrpl::TimeoutCounter::cancel ( )
virtualinherited

Cancel the task by marking it as failed if the task is not done.

Note
this function does not attempt to cancel the scheduled timer or to remove the queued job if any. When the timer expires or the queued job starts, however, the code will see that the task is done and returns immediately, if it can lock the weak pointer of the task.

Definition at line 105 of file TimeoutCounter.cpp.

◆ setTimer()

void xrpl::TimeoutCounter::setTimer ( ScopedLockType & sl)
protectedinherited

Schedule a call to queueJob() after timerInterval_.

Definition at line 40 of file TimeoutCounter.cpp.

◆ queueJob()

void xrpl::TimeoutCounter::queueJob ( ScopedLockType & sl)
protectedinherited

Queue a job to call invokeOnTimer().

Definition at line 58 of file TimeoutCounter.cpp.

◆ isDone()

bool xrpl::TimeoutCounter::isDone ( ) const
protectedinherited

Definition at line 112 of file TimeoutCounter.h.

◆ invokeOnTimer()

void xrpl::TimeoutCounter::invokeOnTimer ( )
privateinherited

Calls onTimer() if in the right state.

Only called by queueJob().

Definition at line 80 of file TimeoutCounter.cpp.

◆ getCounter()

auto & xrpl::CountedObject< InboundLedger >::getCounter ( )
staticprivatenoexceptinherited

Definition at line 113 of file CountedObject.h.

Member Data Documentation

◆ clock_

clock_type& xrpl::InboundLedger::clock_
private

Definition at line 176 of file InboundLedger.h.

◆ lastAction_

clock_type::time_point xrpl::InboundLedger::lastAction_
private

Definition at line 177 of file InboundLedger.h.

◆ ledger_

std::shared_ptr<Ledger> xrpl::InboundLedger::ledger_
private

Definition at line 179 of file InboundLedger.h.

◆ haveHeader_

bool xrpl::InboundLedger::haveHeader_ {false}
private

Definition at line 180 of file InboundLedger.h.

◆ haveState_

bool xrpl::InboundLedger::haveState_ {false}
private

Definition at line 181 of file InboundLedger.h.

◆ haveTransactions_

bool xrpl::InboundLedger::haveTransactions_ {false}
private

Definition at line 182 of file InboundLedger.h.

◆ signaled_

bool xrpl::InboundLedger::signaled_ {false}
private

Definition at line 183 of file InboundLedger.h.

◆ byHash_

bool xrpl::InboundLedger::byHash_ {true}
private

Definition at line 184 of file InboundLedger.h.

◆ seq_

std::uint32_t xrpl::InboundLedger::seq_
private

Definition at line 185 of file InboundLedger.h.

◆ reason_

Reason const xrpl::InboundLedger::reason_
private

Definition at line 186 of file InboundLedger.h.

◆ recentNodes_

std::set<uint256> xrpl::InboundLedger::recentNodes_
private

Definition at line 188 of file InboundLedger.h.

◆ stats_

SHAMapAddNode xrpl::InboundLedger::stats_
private

Definition at line 190 of file InboundLedger.h.

◆ receivedDataLock_

std::mutex xrpl::InboundLedger::receivedDataLock_
private

Definition at line 193 of file InboundLedger.h.

◆ receivedData_

std::vector<std::pair<std::weak_ptr<Peer>, std::shared_ptr<protocol::TMLedgerData> > > xrpl::InboundLedger::receivedData_
private

Definition at line 195 of file InboundLedger.h.

◆ receiveDispatched_

bool xrpl::InboundLedger::receiveDispatched_ {false}
private

Definition at line 196 of file InboundLedger.h.

◆ peerSet_

std::unique_ptr<PeerSet> xrpl::InboundLedger::peerSet_
private

Definition at line 197 of file InboundLedger.h.

◆ app_

Application& xrpl::TimeoutCounter::app_
protectedinherited

Definition at line 119 of file TimeoutCounter.h.

◆ journal_

beast::Journal xrpl::TimeoutCounter::journal_
protectedinherited

Definition at line 120 of file TimeoutCounter.h.

◆ mtx_

std::recursive_mutex xrpl::TimeoutCounter::mtx_
mutableprotectedinherited

Definition at line 121 of file TimeoutCounter.h.

◆ hash_

uint256 const xrpl::TimeoutCounter::hash_
protectedinherited

The hash of the object (in practice, always a ledger) we are trying to fetch.

Definition at line 127 of file TimeoutCounter.h.

◆ timeouts_

int xrpl::TimeoutCounter::timeouts_ {0}
protectedinherited

Definition at line 128 of file TimeoutCounter.h.

◆ complete_

bool xrpl::TimeoutCounter::complete_ {false}
protectedinherited

Definition at line 129 of file TimeoutCounter.h.

◆ failed_

bool xrpl::TimeoutCounter::failed_ {false}
protectedinherited

Definition at line 130 of file TimeoutCounter.h.

◆ progress_

bool xrpl::TimeoutCounter::progress_ {false}
protectedinherited

Whether forward progress has been made.

Definition at line 134 of file TimeoutCounter.h.

◆ timerInterval_

std::chrono::milliseconds xrpl::TimeoutCounter::timerInterval_
protectedinherited

The minimum time to wait between calls to execute().

Definition at line 138 of file TimeoutCounter.h.

◆ queueJobParameter_

QueueJobParameter xrpl::TimeoutCounter::queueJobParameter_
protectedinherited

Definition at line 140 of file TimeoutCounter.h.

◆ timer_

boost::asio::basic_waitable_timer<std::chrono::steady_clock> xrpl::TimeoutCounter::timer_
privateinherited

Definition at line 150 of file TimeoutCounter.h.

◆ Object

Definition at line 138 of file CountedObject.h.