xrpld
Toggle main menu visibility
Loading...
Searching...
No Matches
xrpld
app
ledger
detail
SkipListAcquire.h
1
#pragma once
2
3
#include <xrpld/app/ledger/detail/TimeoutCounter.h>
4
#include <xrpld/app/main/Application.h>
5
6
#include <xrpl/basics/CountedObject.h>
7
#include <xrpl/basics/base_uint.h>
8
#include <xrpl/ledger/Ledger.h>
9
#include <xrpl/shamap/SHAMapItem.h>
10
11
#include <
cstddef
>
12
#include <
cstdint
>
13
#include <
functional
>
14
#include <
memory
>
15
#include <
utility
>
16
#include <
vector
>
17
18
namespace
xrpl
{
19
class
InboundLedgers
;
20
class
PeerSet
;
21
namespace
test
{
22
class
LedgerReplayClient
;
23
}
// namespace test
24
29
class
SkipListAcquire
final :
public
TimeoutCounter
,
30
public
std::enable_shared_from_this
<SkipListAcquire>,
31
public
CountedObject
<SkipListAcquire>
32
{
33
public
:
39
using
OnSkipListDataCB
=
std::function
<void(
bool
successful,
UInt256
const
& hash)>;
40
41
struct
SkipListData
42
{
43
std::uint32_t
const
ledgerSeq
;
44
std::vector<xrpl::UInt256>
const
skipList
;
45
46
SkipListData
(
std::uint32_t
const
ledgerSeq
,
std::vector<xrpl::UInt256>
skipList
)
47
:
ledgerSeq
(
ledgerSeq
),
skipList
(
std
::move(
skipList
))
48
{
49
}
50
};
51
59
SkipListAcquire
(
60
Application
& app,
61
InboundLedgers
& inboundLedgers,
62
UInt256
const
& ledgerHash,
63
std::unique_ptr<PeerSet>
peerSet);
64
65
~SkipListAcquire
()
override
;
66
71
void
72
init
(
int
numPeers);
73
80
void
81
processData
(
std::uint32_t
ledgerSeq, boost::intrusive_ptr<SHAMapItem const>
const
& item);
82
88
void
89
addDataCallback
(
OnSkipListDataCB
&& cb);
90
91
std::shared_ptr<SkipListData const>
92
getData
()
const
;
93
94
private
:
95
void
96
onTimer
(
bool
progress,
ScopedLockType
& peerSetLock)
override
;
97
98
std::weak_ptr<TimeoutCounter>
99
pmDowncast
()
override
;
100
106
void
107
trigger
(
std::size_t
limit,
ScopedLockType
& sl);
108
114
void
115
retrieveSkipList
(
std::shared_ptr<Ledger const>
const
& ledger,
ScopedLockType
& sl);
116
123
void
124
onSkipListAcquired
(
125
std::vector<UInt256>
const
& skipList,
126
std::uint32_t
ledgerSeq,
127
ScopedLockType
& sl);
128
133
void
134
notify
(
ScopedLockType
& sl);
135
136
InboundLedgers
&
inboundLedgers_
;
137
std::unique_ptr<PeerSet>
peerSet_
;
138
std::vector<OnSkipListDataCB>
dataReadyCallbacks_
;
139
std::shared_ptr<SkipListData const>
data_
;
140
std::uint32_t
noFeaturePeerCount_
= 0;
141
bool
fallBack_
=
false
;
142
143
friend
class
test::LedgerReplayClient
;
144
};
145
146
}
// namespace xrpl
xrpl::Application
Definition
Application.h:94
xrpl::CountedObject< SkipListAcquire >::CountedObject
CountedObject() noexcept
Definition
CountedObject.h:119
xrpl::InboundLedgers
Manages the lifetime of inbound ledgers.
Definition
InboundLedgers.h:29
xrpl::PeerSet
Supports data retrieval by managing a set of peers.
Definition
PeerSet.h:30
xrpl::SkipListAcquire::addDataCallback
void addDataCallback(OnSkipListDataCB &&cb)
Add a callback that will be called when the skipList is ready or failed.
Definition
SkipListAcquire.cpp:166
xrpl::SkipListAcquire::noFeaturePeerCount_
std::uint32_t noFeaturePeerCount_
Definition
SkipListAcquire.h:140
xrpl::SkipListAcquire::pmDowncast
std::weak_ptr< TimeoutCounter > pmDowncast() override
Return a weak pointer to this.
Definition
SkipListAcquire.cpp:131
xrpl::SkipListAcquire::peerSet_
std::unique_ptr< PeerSet > peerSet_
Definition
SkipListAcquire.h:137
xrpl::SkipListAcquire::data_
std::shared_ptr< SkipListData const > data_
Definition
SkipListAcquire.h:139
xrpl::SkipListAcquire::trigger
void trigger(std::size_t limit, ScopedLockType &sl)
Trigger another round.
Definition
SkipListAcquire.cpp:69
xrpl::SkipListAcquire::notify
void notify(ScopedLockType &sl)
Call the OnSkipListDataCB callbacks.
Definition
SkipListAcquire.cpp:216
xrpl::SkipListAcquire::OnSkipListDataCB
std::function< void(bool successful, UInt256 const &hash)> OnSkipListDataCB
A callback used to notify that the SkipList is ready or failed.
Definition
SkipListAcquire.h:39
xrpl::SkipListAcquire::dataReadyCallbacks_
std::vector< OnSkipListDataCB > dataReadyCallbacks_
Definition
SkipListAcquire.h:138
xrpl::SkipListAcquire::getData
std::shared_ptr< SkipListData const > getData() const
Definition
SkipListAcquire.cpp:178
xrpl::SkipListAcquire::onTimer
void onTimer(bool progress, ScopedLockType &peerSetLock) override
Hook called from invokeOnTimer().
Definition
SkipListAcquire.cpp:115
xrpl::SkipListAcquire::inboundLedgers_
InboundLedgers & inboundLedgers_
Definition
SkipListAcquire.h:136
xrpl::SkipListAcquire::onSkipListAcquired
void onSkipListAcquired(std::vector< UInt256 > const &skipList, std::uint32_t ledgerSeq, ScopedLockType &sl)
Process the skip list.
Definition
SkipListAcquire.cpp:204
xrpl::SkipListAcquire::~SkipListAcquire
~SkipListAcquire() override
Definition
SkipListAcquire.cpp:52
xrpl::SkipListAcquire::SkipListAcquire
SkipListAcquire(Application &app, InboundLedgers &inboundLedgers, UInt256 const &ledgerHash, std::unique_ptr< PeerSet > peerSet)
Constructor.
Definition
SkipListAcquire.cpp:33
xrpl::SkipListAcquire::fallBack_
bool fallBack_
Definition
SkipListAcquire.h:141
xrpl::SkipListAcquire::retrieveSkipList
void retrieveSkipList(std::shared_ptr< Ledger const > const &ledger, ScopedLockType &sl)
Retrieve the skip list from the ledger.
Definition
SkipListAcquire.cpp:185
xrpl::SkipListAcquire::processData
void processData(std::uint32_t ledgerSeq, boost::intrusive_ptr< SHAMapItem const > const &item)
Process the data extracted from a peer's reply.
Definition
SkipListAcquire.cpp:137
xrpl::SkipListAcquire::init
void init(int numPeers)
Start the SkipListAcquire task.
Definition
SkipListAcquire.cpp:58
xrpl::TimeoutCounter::ScopedLockType
std::unique_lock< std::recursive_mutex > ScopedLockType
Definition
TimeoutCounter.h:71
xrpl::TimeoutCounter::TimeoutCounter
TimeoutCounter(Application &app, UInt256 const &targetHash, std::chrono::milliseconds timeoutInterval, QueueJobParameter &&jobParameter, beast::Journal journal)
Definition
TimeoutCounter.cpp:21
xrpl::test::LedgerReplayClient
Ledger replay client side.
Definition
LedgerReplay_test.cpp:542
cstddef
cstdint
std::enable_shared_from_this
std::function
functional
std::uint32_t
memory
std
STL namespace.
xrpl::test
Definition
STLedgerEntry.h:21
xrpl
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition
algorithm.h:5
xrpl::UInt256
BaseUInt< 256 > UInt256
Definition
base_uint.h:580
std::shared_ptr
std::size_t
xrpl::SkipListAcquire::SkipListData::SkipListData
SkipListData(std::uint32_t const ledgerSeq, std::vector< xrpl::UInt256 > skipList)
Definition
SkipListAcquire.h:46
xrpl::SkipListAcquire::SkipListData::ledgerSeq
std::uint32_t const ledgerSeq
Definition
SkipListAcquire.h:43
xrpl::SkipListAcquire::SkipListData::skipList
std::vector< xrpl::UInt256 > const skipList
Definition
SkipListAcquire.h:44
std::unique_ptr
utility
vector
std::weak_ptr
Generated by
1.17.0