rippled
Public Types | Public Member Functions | Protected Types | Protected Member Functions | Protected Attributes | Private Member Functions | Static Private Member Functions | Private Attributes | Friends | List of all members
ripple::LedgerDeltaAcquire Class Referencefinal

Manage the retrieval of a ledger delta (header and transactions) from the network. More...

Inheritance diagram for ripple::LedgerDeltaAcquire:
Inheritance graph
[legend]
Collaboration diagram for ripple::LedgerDeltaAcquire:
Collaboration graph
[legend]

Public Types

using OnDeltaDataCB = std::function< void(bool successful, uint256 const &hash)>
 A callback used to notify that the delta's data is ready or failed. More...
 

Public Member Functions

 LedgerDeltaAcquire (Application &app, InboundLedgers &inboundLedgers, uint256 const &ledgerHash, std::uint32_t ledgerSeq, std::unique_ptr< PeerSet > peerSet)
 Constructor. More...
 
 ~LedgerDeltaAcquire () override
 
void init (int numPeers)
 Start the LedgerDeltaAcquire task. More...
 
void processData (LedgerInfo const &info, std::map< std::uint32_t, std::shared_ptr< STTx const >> &&orderedTxns)
 Process the data extracted from a peer's reply. More...
 
std::shared_ptr< Ledger const > tryBuild (std::shared_ptr< Ledger const > const &parent)
 Try to build the ledger if not already. More...
 
void addDataCallback (InboundLedger::Reason reason, OnDeltaDataCB &&cb)
 Add a reason and a callback to the LedgerDeltaAcquire subtask. More...
 
virtual void cancel ()
 Cancel the task by marking it as failed if the task is not done. More...
 
shared_from_this (T... args)
 
weak_from_this (T... args)
 

Protected Types

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

Protected Member Functions

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

Protected Attributes

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

Private Member Functions

void onTimer (bool progress, ScopedLockType &peerSetLock) override
 Hook called from invokeOnTimer(). More...
 
std::weak_ptr< TimeoutCounterpmDowncast () override
 Return a weak pointer to this. More...
 
void trigger (std::size_t limit, ScopedLockType &sl)
 Trigger another round. More...
 
void onLedgerBuilt (ScopedLockType &sl, std::optional< InboundLedger::Reason > reason={})
 Process a newly built ledger, such as store it. More...
 
void notify (ScopedLockType &sl)
 Call the OnDeltaDataCB callbacks. More...
 
void invokeOnTimer ()
 Calls onTimer() if in the right state. More...
 

Static Private Member Functions

static auto & getCounter () noexcept
 

Private Attributes

InboundLedgersinboundLedgers_
 
const std::uint32_t ledgerSeq_
 
std::unique_ptr< PeerSetpeerSet_
 
std::shared_ptr< Ledger const > replayTemp_ = {}
 
std::shared_ptr< Ledger const > fullLedger_ = {}
 
std::map< std::uint32_t, std::shared_ptr< STTx const > > orderedTxns_
 
std::vector< OnDeltaDataCBdataReadyCallbacks_
 
std::set< InboundLedger::Reasonreasons_
 
std::uint32_t noFeaturePeerCount = 0
 
bool fallBack_ = false
 
boost::asio::basic_waitable_timer< std::chrono::steady_clocktimer_
 

Friends

class LedgerReplayTask
 
class test::LedgerReplayClient
 

Detailed Description

Manage the retrieval of a ledger delta (header and transactions) from the network.

Before asking peers, always check if the local node has the ledger.

Definition at line 44 of file LedgerDeltaAcquire.h.

Member Typedef Documentation

◆ OnDeltaDataCB

using ripple::LedgerDeltaAcquire::OnDeltaDataCB = std::function<void(bool successful, uint256 const& hash)>

A callback used to notify that the delta's data is ready or failed.

Parameters
successfulif the ledger delta data was acquired successfully
hashhash of the ledger to build

Definition at line 56 of file LedgerDeltaAcquire.h.

◆ ScopedLockType

Definition at line 81 of file TimeoutCounter.h.

Constructor & Destructor Documentation

◆ LedgerDeltaAcquire()

ripple::LedgerDeltaAcquire::LedgerDeltaAcquire ( Application app,
InboundLedgers inboundLedgers,
uint256 const &  ledgerHash,
std::uint32_t  ledgerSeq,
std::unique_ptr< PeerSet peerSet 
)

Constructor.

Parameters
appApplication reference
inboundLedgersInboundLedgers reference
ledgerHashhash of the ledger
ledgerSeqsequence number of the ledger
peerSetmanage a set of peers that we will ask for the ledger

Definition at line 31 of file LedgerDeltaAcquire.cpp.

◆ ~LedgerDeltaAcquire()

ripple::LedgerDeltaAcquire::~LedgerDeltaAcquire ( )
override

Definition at line 52 of file LedgerDeltaAcquire.cpp.

Member Function Documentation

◆ init()

void ripple::LedgerDeltaAcquire::init ( int  numPeers)

Start the LedgerDeltaAcquire task.

Parameters
numPeersnumber of peers to try initially

Definition at line 58 of file LedgerDeltaAcquire.cpp.

◆ processData()

void ripple::LedgerDeltaAcquire::processData ( LedgerInfo const &  info,
std::map< std::uint32_t, std::shared_ptr< STTx const >> &&  orderedTxns 
)

Process the data extracted from a peer's reply.

Parameters
infoinfo (header) of the ledger
orderedTxnsset of Txns of the ledger
Note
info and Txns must have been verified against the ledger hash

Definition at line 139 of file LedgerDeltaAcquire.cpp.

◆ tryBuild()

std::shared_ptr< Ledger const > ripple::LedgerDeltaAcquire::tryBuild ( std::shared_ptr< Ledger const > const &  parent)

Try to build the ledger if not already.

Parameters
parentparent ledger
Returns
the ledger if built, nullptr otherwise (e.g. waiting for peers' replies of the ledger info (header) and Txns.)
Note
may throw runtime_error if the replay failed due to data error

Definition at line 192 of file LedgerDeltaAcquire.cpp.

◆ addDataCallback()

void ripple::LedgerDeltaAcquire::addDataCallback ( InboundLedger::Reason  reason,
OnDeltaDataCB &&  cb 
)

Add a reason and a callback to the LedgerDeltaAcquire subtask.

The reason is used to process the ledger once it is replayed. The callback is called when the delta's data is ready or failed

Note
the callback will be called once and only once unless this object is destructed before the call.

Definition at line 170 of file LedgerDeltaAcquire.cpp.

◆ onTimer()

void ripple::LedgerDeltaAcquire::onTimer ( bool  progress,
ScopedLockType  
)
overrideprivatevirtual

Hook called from invokeOnTimer().

Implements ripple::TimeoutCounter.

Definition at line 117 of file LedgerDeltaAcquire.cpp.

◆ pmDowncast()

std::weak_ptr< TimeoutCounter > ripple::LedgerDeltaAcquire::pmDowncast ( )
overrideprivatevirtual

Return a weak pointer to this.

Implements ripple::TimeoutCounter.

Definition at line 133 of file LedgerDeltaAcquire.cpp.

◆ trigger()

void ripple::LedgerDeltaAcquire::trigger ( std::size_t  limit,
ScopedLockType sl 
)
private

Trigger another round.

Parameters
limitnumber of new peers to send the request
sllock. this function must be called with the lock

Definition at line 69 of file LedgerDeltaAcquire.cpp.

◆ onLedgerBuilt()

void ripple::LedgerDeltaAcquire::onLedgerBuilt ( ScopedLockType sl,
std::optional< InboundLedger::Reason reason = {} 
)
private

Process a newly built ledger, such as store it.

Parameters
sllock. this function must be called with the lock
reasonspecific new reason if any
Note
this function should be called (1) when the ledger is built the first time, and (2) when a LedgerReplayTask with a new reason is added.

Definition at line 224 of file LedgerDeltaAcquire.cpp.

◆ notify()

void ripple::LedgerDeltaAcquire::notify ( ScopedLockType sl)
private

Call the OnDeltaDataCB callbacks.

Parameters
sllock. this function must be called with the lock

Definition at line 263 of file LedgerDeltaAcquire.cpp.

◆ cancel()

void ripple::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 118 of file TimeoutCounter.cpp.

◆ setTimer()

void ripple::TimeoutCounter::setTimer ( ScopedLockType sl)
protectedinherited

Schedule a call to queueJob() after mTimerInterval.

Definition at line 50 of file TimeoutCounter.cpp.

◆ queueJob()

void ripple::TimeoutCounter::queueJob ( ScopedLockType sl)
protectedinherited

Queue a job to call invokeOnTimer().

Definition at line 69 of file TimeoutCounter.cpp.

◆ isDone()

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

Definition at line 116 of file TimeoutCounter.h.

◆ invokeOnTimer()

void ripple::TimeoutCounter::invokeOnTimer ( )
privateinherited

Calls onTimer() if in the right state.

Only called by queueJob().

Definition at line 93 of file TimeoutCounter.cpp.

◆ getCounter()

static auto& ripple::CountedObject< LedgerDeltaAcquire >::getCounter
staticprivatenoexceptinherited

Definition at line 128 of file CountedObject.h.

Friends And Related Function Documentation

◆ LedgerReplayTask

friend class LedgerReplayTask
friend

Definition at line 160 of file LedgerDeltaAcquire.h.

◆ test::LedgerReplayClient

friend class test::LedgerReplayClient
friend

Definition at line 161 of file LedgerDeltaAcquire.h.

Member Data Documentation

◆ inboundLedgers_

InboundLedgers& ripple::LedgerDeltaAcquire::inboundLedgers_
private

Definition at line 149 of file LedgerDeltaAcquire.h.

◆ ledgerSeq_

const std::uint32_t ripple::LedgerDeltaAcquire::ledgerSeq_
private

Definition at line 150 of file LedgerDeltaAcquire.h.

◆ peerSet_

std::unique_ptr<PeerSet> ripple::LedgerDeltaAcquire::peerSet_
private

Definition at line 151 of file LedgerDeltaAcquire.h.

◆ replayTemp_

std::shared_ptr<Ledger const> ripple::LedgerDeltaAcquire::replayTemp_ = {}
private

Definition at line 152 of file LedgerDeltaAcquire.h.

◆ fullLedger_

std::shared_ptr<Ledger const> ripple::LedgerDeltaAcquire::fullLedger_ = {}
private

Definition at line 153 of file LedgerDeltaAcquire.h.

◆ orderedTxns_

std::map<std::uint32_t, std::shared_ptr<STTx const> > ripple::LedgerDeltaAcquire::orderedTxns_
private

Definition at line 154 of file LedgerDeltaAcquire.h.

◆ dataReadyCallbacks_

std::vector<OnDeltaDataCB> ripple::LedgerDeltaAcquire::dataReadyCallbacks_
private

Definition at line 155 of file LedgerDeltaAcquire.h.

◆ reasons_

std::set<InboundLedger::Reason> ripple::LedgerDeltaAcquire::reasons_
private

Definition at line 156 of file LedgerDeltaAcquire.h.

◆ noFeaturePeerCount

std::uint32_t ripple::LedgerDeltaAcquire::noFeaturePeerCount = 0
private

Definition at line 157 of file LedgerDeltaAcquire.h.

◆ fallBack_

bool ripple::LedgerDeltaAcquire::fallBack_ = false
private

Definition at line 158 of file LedgerDeltaAcquire.h.

◆ app_

Application& ripple::TimeoutCounter::app_
protectedinherited

Definition at line 123 of file TimeoutCounter.h.

◆ journal_

beast::Journal ripple::TimeoutCounter::journal_
protectedinherited

Definition at line 124 of file TimeoutCounter.h.

◆ mtx_

std::recursive_mutex ripple::TimeoutCounter::mtx_
mutableprotectedinherited

Definition at line 125 of file TimeoutCounter.h.

◆ hash_

const uint256 ripple::TimeoutCounter::hash_
protectedinherited

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

Definition at line 129 of file TimeoutCounter.h.

◆ timeouts_

int ripple::TimeoutCounter::timeouts_
protectedinherited

Definition at line 130 of file TimeoutCounter.h.

◆ complete_

bool ripple::TimeoutCounter::complete_
protectedinherited

Definition at line 131 of file TimeoutCounter.h.

◆ failed_

bool ripple::TimeoutCounter::failed_
protectedinherited

Definition at line 132 of file TimeoutCounter.h.

◆ progress_

bool ripple::TimeoutCounter::progress_
protectedinherited

Whether forward progress has been made.

Definition at line 134 of file TimeoutCounter.h.

◆ timerInterval_

std::chrono::milliseconds ripple::TimeoutCounter::timerInterval_
protectedinherited

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

Definition at line 136 of file TimeoutCounter.h.

◆ queueJobParameter_

QueueJobParameter ripple::TimeoutCounter::queueJobParameter_
protectedinherited

Definition at line 138 of file TimeoutCounter.h.

◆ timer_

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

Definition at line 147 of file TimeoutCounter.h.