rippled
Public Types | Public Member Functions | Protected Types | Protected Member Functions | Protected Attributes | Private Types | Private Member Functions | Static Private Member Functions | Private Attributes | List of all members
ripple::InboundLedger Class Referencefinal
Inheritance diagram for ripple::InboundLedger:
Inheritance graph
[legend]
Collaboration diagram for ripple::InboundLedger:
Collaboration graph
[legend]

Public Types

enum  Reason { Reason::HISTORY, Reason::SHARD, Reason::GENERIC, Reason::CONSENSUS }
 
using clock_type = beast::abstract_clock< 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 ()
 
void update (std::uint32_t seq)
 
bool isComplete () const
 Returns true if we got all the data. More...
 
bool isFailed () const
 Returns false if we failed to get the data. More...
 
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. More...
 
Json::Value getJson (int)
 Return a Json::objectValue. More...
 
void runData ()
 Process pending TMLedgerData Query the a random sample of the 'best' peers. More...
 
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. 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 Types

enum  TriggerReason { TriggerReason::added, TriggerReason::reply, TriggerReason::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. More...
 
std::vector< neededHash_tgetNeededHashes ()
 
void addPeers ()
 Add more peers to the set, if possible. More...
 
void tryDB (NodeStore::Database &srcDB)
 
void done ()
 
void onTimer (bool progress, ScopedLockType &peerSetLock) override
 Called with a lock by the PeerSet when the timer expires. More...
 
std::size_t getPeerCount () const
 
std::weak_ptr< TimeoutCounterpmDowncast () override
 Return a weak pointer to this. More...
 
int processData (std::shared_ptr< Peer > peer, protocol::TMLedgerData &data)
 Process one TMLedgerData Returns the number of useful nodes. More...
 
bool takeHeader (std::string const &data)
 Take ledger header data Call with a lock. More...
 
void receiveNode (protocol::TMLedgerData &packet, SHAMapAddNode &)
 Process node data received from a peer Call with a lock. More...
 
bool takeTxRootNode (Slice const &data, SHAMapAddNode &)
 Process AS root node received from a peer Call with a lock. More...
 
bool takeAsRootNode (Slice const &data, SHAMapAddNode &)
 Process AS root node received from a peer Call with a lock. More...
 
std::vector< uint256neededTxHashes (int max, SHAMapSyncFilter *filter) const
 
std::vector< uint256neededStateHashes (int max, SHAMapSyncFilter *filter) const
 
void invokeOnTimer ()
 Calls onTimer() if in the right state. More...
 

Static Private Member Functions

static auto & getCounter () noexcept
 

Private Attributes

clock_typem_clock
 
clock_type::time_point mLastAction
 
std::shared_ptr< LedgermLedger
 
bool mHaveHeader
 
bool mHaveState
 
bool mHaveTransactions
 
bool mSignaled
 
bool mByHash
 
std::uint32_t mSeq
 
const Reason mReason
 
std::set< uint256mRecentNodes
 
SHAMapAddNode mStats
 
std::mutex mReceivedDataLock
 
std::vector< std::pair< std::weak_ptr< Peer >, std::shared_ptr< protocol::TMLedgerData > > > mReceivedData
 
bool mReceiveDispatched
 
std::unique_ptr< PeerSetmPeerSet
 
boost::asio::basic_waitable_timer< std::chrono::steady_clocktimer_
 

Detailed Description

Definition at line 35 of file InboundLedger.h.

Member Typedef Documentation

◆ clock_type

Definition at line 40 of file InboundLedger.h.

◆ neededHash_t

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

Definition at line 101 of file InboundLedger.h.

◆ ScopedLockType

Definition at line 81 of file TimeoutCounter.h.

Member Enumeration Documentation

◆ Reason

Enumerator
HISTORY 
SHARD 
GENERIC 
CONSENSUS 

Definition at line 43 of file InboundLedger.h.

◆ TriggerReason

Enumerator
added 
reply 
timeout 

Definition at line 123 of file InboundLedger.h.

Constructor & Destructor Documentation

◆ InboundLedger()

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

Definition at line 77 of file InboundLedger.cpp.

◆ ~InboundLedger()

ripple::InboundLedger::~InboundLedger ( )

Definition at line 216 of file InboundLedger.cpp.

Member Function Documentation

◆ update()

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

Definition at line 183 of file InboundLedger.cpp.

◆ isComplete()

bool ripple::InboundLedger::isComplete ( ) const

Returns true if we got all the data.

Definition at line 66 of file InboundLedger.h.

◆ isFailed()

bool ripple::InboundLedger::isFailed ( ) const

Returns false if we failed to get the data.

Definition at line 73 of file InboundLedger.h.

◆ getLedger()

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

Definition at line 79 of file InboundLedger.h.

◆ getSeq()

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

Definition at line 85 of file InboundLedger.h.

◆ checkLocal()

bool ripple::InboundLedger::checkLocal ( )

Definition at line 196 of file InboundLedger.cpp.

◆ init()

void ripple::InboundLedger::init ( ScopedLockType collectionLock)

Definition at line 106 of file InboundLedger.cpp.

◆ gotData()

bool ripple::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 1105 of file InboundLedger.cpp.

◆ getJson()

Json::Value ripple::InboundLedger::getJson ( int  )

Return a Json::objectValue.

Definition at line 1359 of file InboundLedger.cpp.

◆ runData()

void ripple::InboundLedger::runData ( )

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

Definition at line 1312 of file InboundLedger.cpp.

◆ touch()

void ripple::InboundLedger::touch ( )

Definition at line 111 of file InboundLedger.h.

◆ getLastAction()

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

Definition at line 117 of file InboundLedger.h.

◆ filterNodes()

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

Definition at line 834 of file InboundLedger.cpp.

◆ trigger()

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

Request more nodes, perhaps from a specific peer.

Definition at line 557 of file InboundLedger.cpp.

◆ getNeededHashes()

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

Definition at line 1065 of file InboundLedger.cpp.

◆ addPeers()

void ripple::InboundLedger::addPeers ( )
private

Add more peers to the set, if possible.

Definition at line 483 of file InboundLedger.cpp.

◆ tryDB()

void ripple::InboundLedger::tryDB ( NodeStore::Database srcDB)
private

Definition at line 307 of file InboundLedger.cpp.

◆ done()

void ripple::InboundLedger::done ( )
private

Definition at line 503 of file InboundLedger.cpp.

◆ onTimer()

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

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

Implements ripple::TimeoutCounter.

Definition at line 432 of file InboundLedger.cpp.

◆ getPeerCount()

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

Definition at line 174 of file InboundLedger.cpp.

◆ pmDowncast()

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

Return a weak pointer to this.

Implements ripple::TimeoutCounter.

Definition at line 497 of file InboundLedger.cpp.

◆ processData()

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

Process one TMLedgerData Returns the number of useful nodes.

Definition at line 1132 of file InboundLedger.cpp.

◆ takeHeader()

bool ripple::InboundLedger::takeHeader ( std::string const &  data)
private

Take ledger header data Call with a lock.

Definition at line 880 of file InboundLedger.cpp.

◆ receiveNode()

void ripple::InboundLedger::receiveNode ( protocol::TMLedgerData &  packet,
SHAMapAddNode san 
)
private

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

Definition at line 928 of file InboundLedger.cpp.

◆ takeTxRootNode()

bool ripple::InboundLedger::takeTxRootNode ( Slice const &  data,
SHAMapAddNode san 
)
private

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

Definition at line 1043 of file InboundLedger.cpp.

◆ takeAsRootNode()

bool ripple::InboundLedger::takeAsRootNode ( Slice const &  data,
SHAMapAddNode san 
)
private

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

Definition at line 1018 of file InboundLedger.cpp.

◆ neededTxHashes()

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

Definition at line 262 of file InboundLedger.cpp.

◆ neededStateHashes()

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

Definition at line 268 of file InboundLedger.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< InboundLedger >::getCounter
staticprivatenoexceptinherited

Definition at line 128 of file CountedObject.h.

Member Data Documentation

◆ m_clock

clock_type& ripple::InboundLedger::m_clock
private

Definition at line 175 of file InboundLedger.h.

◆ mLastAction

clock_type::time_point ripple::InboundLedger::mLastAction
private

Definition at line 176 of file InboundLedger.h.

◆ mLedger

std::shared_ptr<Ledger> ripple::InboundLedger::mLedger
private

Definition at line 178 of file InboundLedger.h.

◆ mHaveHeader

bool ripple::InboundLedger::mHaveHeader
private

Definition at line 179 of file InboundLedger.h.

◆ mHaveState

bool ripple::InboundLedger::mHaveState
private

Definition at line 180 of file InboundLedger.h.

◆ mHaveTransactions

bool ripple::InboundLedger::mHaveTransactions
private

Definition at line 181 of file InboundLedger.h.

◆ mSignaled

bool ripple::InboundLedger::mSignaled
private

Definition at line 182 of file InboundLedger.h.

◆ mByHash

bool ripple::InboundLedger::mByHash
private

Definition at line 183 of file InboundLedger.h.

◆ mSeq

std::uint32_t ripple::InboundLedger::mSeq
private

Definition at line 184 of file InboundLedger.h.

◆ mReason

const Reason ripple::InboundLedger::mReason
private

Definition at line 185 of file InboundLedger.h.

◆ mRecentNodes

std::set<uint256> ripple::InboundLedger::mRecentNodes
private

Definition at line 187 of file InboundLedger.h.

◆ mStats

SHAMapAddNode ripple::InboundLedger::mStats
private

Definition at line 189 of file InboundLedger.h.

◆ mReceivedDataLock

std::mutex ripple::InboundLedger::mReceivedDataLock
private

Definition at line 192 of file InboundLedger.h.

◆ mReceivedData

std::vector< std::pair<std::weak_ptr<Peer>, std::shared_ptr<protocol::TMLedgerData> > > ripple::InboundLedger::mReceivedData
private

Definition at line 195 of file InboundLedger.h.

◆ mReceiveDispatched

bool ripple::InboundLedger::mReceiveDispatched
private

Definition at line 196 of file InboundLedger.h.

◆ mPeerSet

std::unique_ptr<PeerSet> ripple::InboundLedger::mPeerSet
private

Definition at line 197 of file InboundLedger.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.