xrpld
Toggle main menu visibility
Loading...
Searching...
No Matches
xrpld
app
ledger
LedgerReplayer.h
1
#pragma once
2
3
#include <xrpld/app/ledger/InboundLedger.h>
4
#include <xrpld/app/ledger/LedgerReplayTask.h>
5
#include <xrpld/app/main/Application.h>
6
#include <xrpld/overlay/PeerSet.h>
7
8
#include <xrpl/basics/base_uint.h>
9
#include <xrpl/beast/utility/Journal.h>
10
#include <xrpl/protocol/LedgerHeader.h>
11
#include <xrpl/protocol/STTx.h>
12
#include <xrpl/shamap/SHAMapItem.h>
13
14
#include <
cstddef
>
15
#include <
cstdint
>
16
#include <
map
>
17
#include <
memory
>
18
#include <
mutex
>
19
#include <
vector
>
20
21
namespace
xrpl
{
22
23
namespace
test
{
24
class
LedgerReplayClient
;
25
}
// namespace test
26
27
namespace
ledger_replay_parameters
{
28
// timeout value for LedgerReplayTask
29
constexpr
auto
kTaskTimeout
=
std::chrono::milliseconds
{500};
30
31
// for LedgerReplayTask to calculate max allowed timeouts
32
// = max( kTaskMaxTimeoutsMinimum,
33
// (# of ledger to replay) * kTaskMaxTimeoutsMultiplier)
34
constexpr
std::uint32_t
kTaskMaxTimeoutsMultiplier
= 2;
35
constexpr
std::uint32_t
kTaskMaxTimeoutsMinimum
= 10;
36
37
// timeout value for subtasks: LedgerDeltaAcquire and SkipListAcquire
38
constexpr
auto
kSubTaskTimeout
=
std::chrono::milliseconds
{250};
39
// max of allowed subtask timeouts
40
constexpr
std::uint32_t
kSubTaskMaxTimeouts
= 10;
41
42
// max number of peers that do not support the ledger replay feature
43
// returned by the PeerSet before switch to fallback
44
constexpr
auto
kMaxNoFeaturePeerCount
= 2;
45
// subtask timeout value after fallback
46
constexpr
auto
kSubTaskFallbackTimeout
=
std::chrono::milliseconds
{1000};
47
48
// for LedgerReplayer to limit the number of LedgerReplayTask
49
constexpr
std::uint32_t
kMaxTasks
= 10;
50
51
// for LedgerReplayer to limit the number of ledgers to replay in one task
52
constexpr
std::uint32_t
kMaxTaskSize
= 256;
53
54
// to limit the number of LedgerReplay related jobs in JobQueue
55
constexpr
std::uint32_t
kMaxQueuedTasks
= 100;
56
}
// namespace ledger_replay_parameters
57
61
class
LedgerReplayer
final
62
{
63
public
:
64
LedgerReplayer
(
65
Application
& app,
66
InboundLedgers
& inboundLedgers,
67
std::unique_ptr<PeerSetBuilder>
peerSetBuilder);
68
69
~LedgerReplayer
();
70
78
void
79
replay
(
InboundLedger::Reason
r,
UInt256
const
& finishLedgerHash,
std::uint32_t
totalNumLedgers);
80
84
void
85
createDeltas
(
std::shared_ptr<LedgerReplayTask>
task);
86
93
void
94
gotSkipList
(
LedgerHeader
const
& info, boost::intrusive_ptr<SHAMapItem const>
const
& data);
95
102
void
103
gotReplayDelta
(
104
LedgerHeader
const
& info,
105
std::map
<
std::uint32_t
,
std::shared_ptr<STTx const>
>&& txns);
106
110
void
111
sweep
();
112
113
void
114
stop
();
115
116
std::size_t
117
tasksSize
()
const
118
{
119
std::scoped_lock
const
lock(
mtx_
);
120
return
tasks_
.size();
121
}
122
123
std::size_t
124
deltasSize
()
const
125
{
126
std::scoped_lock
const
lock(
mtx_
);
127
return
deltas_
.size();
128
}
129
130
std::size_t
131
skipListsSize
()
const
132
{
133
std::scoped_lock
const
lock(
mtx_
);
134
return
skipLists_
.size();
135
}
136
137
private
:
138
mutable
std::mutex
mtx_
;
139
std::vector<std::shared_ptr<LedgerReplayTask>
>
tasks_
;
140
HashMap<UInt256, std::weak_ptr<LedgerDeltaAcquire>
>
deltas_
;
141
HashMap<UInt256, std::weak_ptr<SkipListAcquire>
>
skipLists_
;
142
143
Application
&
app_
;
144
InboundLedgers
&
inboundLedgers_
;
145
std::unique_ptr<PeerSetBuilder>
peerSetBuilder_
;
146
beast::Journal
j_
;
147
148
friend
class
test::LedgerReplayClient
;
149
};
150
151
}
// namespace xrpl
beast::Journal
A generic endpoint for log messages.
Definition
Journal.h:44
xrpl::Application
Definition
Application.h:94
xrpl::InboundLedger::Reason
Reason
Definition
InboundLedger.h:41
xrpl::InboundLedgers
Manages the lifetime of inbound ledgers.
Definition
InboundLedgers.h:29
xrpl::LedgerReplayer::j_
beast::Journal j_
Definition
LedgerReplayer.h:146
xrpl::LedgerReplayer::replay
void replay(InboundLedger::Reason r, UInt256 const &finishLedgerHash, std::uint32_t totalNumLedgers)
Replay a range of ledgers.
Definition
LedgerReplayer.cpp:47
xrpl::LedgerReplayer::~LedgerReplayer
~LedgerReplayer()
Definition
LedgerReplayer.cpp:40
xrpl::LedgerReplayer::inboundLedgers_
InboundLedgers & inboundLedgers_
Definition
LedgerReplayer.h:144
xrpl::LedgerReplayer::gotReplayDelta
void gotReplayDelta(LedgerHeader const &info, std::map< std::uint32_t, std::shared_ptr< STTx const > > &&txns)
Process a ledger delta (extracted from a TMReplayDeltaResponse message).
Definition
LedgerReplayer.cpp:189
xrpl::LedgerReplayer::skipListsSize
std::size_t skipListsSize() const
Definition
LedgerReplayer.h:131
xrpl::LedgerReplayer::stop
void stop()
Definition
LedgerReplayer.cpp:259
xrpl::LedgerReplayer::tasksSize
std::size_t tasksSize() const
Definition
LedgerReplayer.h:117
xrpl::LedgerReplayer::gotSkipList
void gotSkipList(LedgerHeader const &info, boost::intrusive_ptr< SHAMapItem const > const &data)
Process a skip list (extracted from a TMProofPathResponse message).
Definition
LedgerReplayer.cpp:166
xrpl::LedgerReplayer::deltas_
HashMap< UInt256, std::weak_ptr< LedgerDeltaAcquire > > deltas_
Definition
LedgerReplayer.h:140
xrpl::LedgerReplayer::app_
Application & app_
Definition
LedgerReplayer.h:143
xrpl::LedgerReplayer::mtx_
std::mutex mtx_
Definition
LedgerReplayer.h:138
xrpl::LedgerReplayer::peerSetBuilder_
std::unique_ptr< PeerSetBuilder > peerSetBuilder_
Definition
LedgerReplayer.h:145
xrpl::LedgerReplayer::tasks_
std::vector< std::shared_ptr< LedgerReplayTask > > tasks_
Definition
LedgerReplayer.h:139
xrpl::LedgerReplayer::sweep
void sweep()
Remove completed tasks.
Definition
LedgerReplayer.cpp:212
xrpl::LedgerReplayer::createDeltas
void createDeltas(std::shared_ptr< LedgerReplayTask > task)
Create LedgerDeltaAcquire subtasks for the LedgerReplayTask task.
Definition
LedgerReplayer.cpp:109
xrpl::LedgerReplayer::skipLists_
HashMap< UInt256, std::weak_ptr< SkipListAcquire > > skipLists_
Definition
LedgerReplayer.h:141
xrpl::LedgerReplayer::LedgerReplayer
LedgerReplayer(Application &app, InboundLedgers &inboundLedgers, std::unique_ptr< PeerSetBuilder > peerSetBuilder)
Definition
LedgerReplayer.cpp:29
xrpl::LedgerReplayer::deltasSize
std::size_t deltasSize() const
Definition
LedgerReplayer.h:124
xrpl::test::LedgerReplayClient
Ledger replay client side.
Definition
LedgerReplay_test.cpp:542
cstddef
cstdint
std::chrono::milliseconds
std::uint32_t
map
memory
mutex
xrpl::ledger_replay_parameters
Definition
LedgerReplayer.h:27
xrpl::ledger_replay_parameters::kSubTaskFallbackTimeout
constexpr auto kSubTaskFallbackTimeout
Definition
LedgerReplayer.h:46
xrpl::ledger_replay_parameters::kMaxTasks
constexpr std::uint32_t kMaxTasks
Definition
LedgerReplayer.h:49
xrpl::ledger_replay_parameters::kTaskTimeout
constexpr auto kTaskTimeout
Definition
LedgerReplayer.h:29
xrpl::ledger_replay_parameters::kMaxNoFeaturePeerCount
constexpr auto kMaxNoFeaturePeerCount
Definition
LedgerReplayer.h:44
xrpl::ledger_replay_parameters::kTaskMaxTimeoutsMultiplier
constexpr std::uint32_t kTaskMaxTimeoutsMultiplier
Definition
LedgerReplayer.h:34
xrpl::ledger_replay_parameters::kSubTaskMaxTimeouts
constexpr std::uint32_t kSubTaskMaxTimeouts
Definition
LedgerReplayer.h:40
xrpl::ledger_replay_parameters::kSubTaskTimeout
constexpr auto kSubTaskTimeout
Definition
LedgerReplayer.h:38
xrpl::ledger_replay_parameters::kMaxTaskSize
constexpr std::uint32_t kMaxTaskSize
Definition
LedgerReplayer.h:52
xrpl::ledger_replay_parameters::kMaxQueuedTasks
constexpr std::uint32_t kMaxQueuedTasks
Definition
LedgerReplayer.h:55
xrpl::ledger_replay_parameters::kTaskMaxTimeoutsMinimum
constexpr std::uint32_t kTaskMaxTimeoutsMinimum
Definition
LedgerReplayer.h:35
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
xrpl::HashMap
std::unordered_map< Key, Value, Hash, Pred, Allocator > HashMap
Definition
UnorderedContainers.h:36
std::scoped_lock
std::shared_ptr
std::size_t
xrpl::LedgerHeader
Information about the notional ledger backing the view.
Definition
LedgerHeader.h:19
std::unique_ptr
vector
Generated by
1.17.0