xrpld
Toggle main menu visibility
Loading...
Searching...
No Matches
xrpld
app
ledger
detail
TimeoutCounter.h
1
#pragma once
2
3
#include <xrpld/app/main/Application.h>
4
5
#include <xrpl/basics/base_uint.h>
6
#include <xrpl/beast/utility/Journal.h>
7
#include <xrpl/core/Job.h>
8
9
#include <boost/asio/basic_waitable_timer.hpp>
10
11
#include <
chrono
>
12
#include <
cstdint
>
13
#include <
memory
>
14
#include <
mutex
>
15
#include <
optional
>
16
#include <
string
>
17
18
namespace
xrpl
{
19
54
class
TimeoutCounter
55
{
56
public
:
65
virtual
void
66
cancel
();
67
68
virtual
~TimeoutCounter
() =
default
;
69
70
protected
:
71
using
ScopedLockType
=
std::unique_lock<std::recursive_mutex>
;
72
73
struct
QueueJobParameter
74
{
75
JobType
jobType
;
76
std::string
jobName
;
77
std::optional<std::uint32_t>
jobLimit
;
78
};
79
80
TimeoutCounter
(
81
Application
& app,
82
UInt256
const
& targetHash,
83
std::chrono::milliseconds
timeoutInterval,
84
QueueJobParameter
&& jobParameter,
85
beast::Journal
journal);
86
90
void
91
setTimer
(
ScopedLockType
&);
92
96
void
97
queueJob
(
ScopedLockType
&);
98
102
virtual
void
103
onTimer
(
bool
progress,
ScopedLockType
&) = 0;
104
108
virtual
std::weak_ptr<TimeoutCounter>
109
pmDowncast
() = 0;
110
111
bool
112
isDone
()
const
113
{
114
return
complete_
||
failed_
;
115
}
116
117
// Used in this class for access to boost::asio::io_context and
118
// xrpl::Overlay. Used in subtypes for the kitchen sink.
119
Application
&
app_
;
120
beast::Journal
journal_
;
121
mutable
std::recursive_mutex
mtx_
;
122
127
UInt256
const
hash_
;
128
int
timeouts_
{0};
129
bool
complete_
{
false
};
130
bool
failed_
{
false
};
134
bool
progress_
{
false
};
138
std::chrono::milliseconds
timerInterval_
;
139
140
QueueJobParameter
queueJobParameter_
;
141
142
private
:
147
void
148
invokeOnTimer
();
149
150
boost::asio::basic_waitable_timer<std::chrono::steady_clock>
timer_
;
151
};
152
153
}
// namespace xrpl
std::string
chrono
beast::Journal
A generic endpoint for log messages.
Definition
Journal.h:44
xrpl::Application
Definition
Application.h:94
xrpl::TimeoutCounter::timer_
boost::asio::basic_waitable_timer< std::chrono::steady_clock > timer_
Definition
TimeoutCounter.h:150
xrpl::TimeoutCounter::mtx_
std::recursive_mutex mtx_
Definition
TimeoutCounter.h:121
xrpl::TimeoutCounter::pmDowncast
virtual std::weak_ptr< TimeoutCounter > pmDowncast()=0
Return a weak pointer to this.
xrpl::TimeoutCounter::onTimer
virtual void onTimer(bool progress, ScopedLockType &)=0
Hook called from invokeOnTimer().
xrpl::TimeoutCounter::isDone
bool isDone() const
Definition
TimeoutCounter.h:112
xrpl::TimeoutCounter::ScopedLockType
std::unique_lock< std::recursive_mutex > ScopedLockType
Definition
TimeoutCounter.h:71
xrpl::TimeoutCounter::hash_
UInt256 const hash_
The hash of the object (in practice, always a ledger) we are trying to fetch.
Definition
TimeoutCounter.h:127
xrpl::TimeoutCounter::queueJob
void queueJob(ScopedLockType &)
Queue a job to call invokeOnTimer().
Definition
TimeoutCounter.cpp:58
xrpl::TimeoutCounter::TimeoutCounter
TimeoutCounter(Application &app, UInt256 const &targetHash, std::chrono::milliseconds timeoutInterval, QueueJobParameter &&jobParameter, beast::Journal journal)
Definition
TimeoutCounter.cpp:21
xrpl::TimeoutCounter::progress_
bool progress_
Whether forward progress has been made.
Definition
TimeoutCounter.h:134
xrpl::TimeoutCounter::app_
Application & app_
Definition
TimeoutCounter.h:119
xrpl::TimeoutCounter::journal_
beast::Journal journal_
Definition
TimeoutCounter.h:120
xrpl::TimeoutCounter::~TimeoutCounter
virtual ~TimeoutCounter()=default
xrpl::TimeoutCounter::complete_
bool complete_
Definition
TimeoutCounter.h:129
xrpl::TimeoutCounter::queueJobParameter_
QueueJobParameter queueJobParameter_
Definition
TimeoutCounter.h:140
xrpl::TimeoutCounter::failed_
bool failed_
Definition
TimeoutCounter.h:130
xrpl::TimeoutCounter::invokeOnTimer
void invokeOnTimer()
Calls onTimer() if in the right state.
Definition
TimeoutCounter.cpp:80
xrpl::TimeoutCounter::setTimer
void setTimer(ScopedLockType &)
Schedule a call to queueJob() after timerInterval_.
Definition
TimeoutCounter.cpp:40
xrpl::TimeoutCounter::timerInterval_
std::chrono::milliseconds timerInterval_
The minimum time to wait between calls to execute().
Definition
TimeoutCounter.h:138
xrpl::TimeoutCounter::timeouts_
int timeouts_
Definition
TimeoutCounter.h:128
xrpl::TimeoutCounter::cancel
virtual void cancel()
Cancel the task by marking it as failed if the task is not done.
Definition
TimeoutCounter.cpp:105
cstdint
std::chrono::milliseconds
memory
mutex
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::JobType
JobType
Definition
Job.h:21
optional
std::recursive_mutex
string
xrpl::TimeoutCounter::QueueJobParameter
Definition
TimeoutCounter.h:74
xrpl::TimeoutCounter::QueueJobParameter::jobName
std::string jobName
Definition
TimeoutCounter.h:76
xrpl::TimeoutCounter::QueueJobParameter::jobLimit
std::optional< std::uint32_t > jobLimit
Definition
TimeoutCounter.h:77
xrpl::TimeoutCounter::QueueJobParameter::jobType
JobType jobType
Definition
TimeoutCounter.h:75
std::unique_lock
std::weak_ptr
Generated by
1.17.0