xrpld
Toggle main menu visibility
Loading...
Searching...
No Matches
include
xrpl
core
Job.h
1
#pragma once
2
3
#include <xrpl/basics/CountedObject.h>
4
#include <xrpl/core/ClosureCounter.h>
5
#include <xrpl/core/LoadEvent.h>
6
#include <xrpl/core/LoadMonitor.h>
7
8
#include <
chrono
>
9
#include <
cstdint
>
10
#include <
functional
>
11
#include <
memory
>
12
#include <
string
>
13
14
namespace
xrpl
{
15
16
// Note that this queue should only be used for CPU-bound jobs
17
// It is primarily intended for signature checking
18
19
// Protocol-wide
20
// NOLINTNEXTLINE(cppcoreguidelines-use-enum-class)
21
enum
JobType
{
22
// Special type indicating an invalid job - will go away soon.
23
JtInvalid
= -1,
24
25
// Job types - the position in this enum indicates the job priority with
26
// earlier jobs having lower priority than later jobs. If you wish to
27
// insert a job at a specific priority, simply add it at the right location.
28
29
JtPack
,
// Make a fetch pack for a peer
30
JtPuboldledger
,
// An old ledger has been accepted
31
JtClient
,
// A placeholder for the priority of all jtCLIENT jobs
32
JtClientSubscribe
,
// A websocket subscription by a client
33
JtClientFeeChange
,
// Subscription for fee change by a client
34
JtClientConsensus
,
// Subscription for consensus state change by a client
35
JtClientAcctHist
,
// Subscription for account history by a client
36
JtClientRpc
,
// Client RPC request
37
JtClientWebsocket
,
// Client websocket request
38
JtRpc
,
// A websocket command from the client
39
JtSweep
,
// Sweep for stale structures
40
JtValidationUt
,
// A validation from an untrusted source
41
JtManifest
,
// A validator's manifest
42
JtUpdatePf
,
// Update pathfinding requests
43
JtTransactionL
,
// A local transaction
44
JtReplayReq
,
// Peer request a ledger delta or a skip list
45
JtLedgerReq
,
// Peer request ledger/txnset data
46
JtProposalUt
,
// A proposal from an untrusted source
47
JtReplayTask
,
// A Ledger replay task/subtask
48
JtTransaction
,
// A transaction received from the network
49
JtMissingTxn
,
// Request missing transactions
50
JtRequestedTxn
,
// Reply with requested transactions
51
JtBatch
,
// Apply batched transactions
52
JtLedgerData
,
// Received data for a ledger we're acquiring
53
JtAdvance
,
// Advance validated/acquired ledgers
54
JtPubledger
,
// Publish a fully-accepted ledger
55
JtTxnData
,
// Fetch a proposed set
56
JtWal
,
// Write-ahead logging
57
JtValidationT
,
// A validation from a trusted source
58
JtWrite
,
// Write out hashed objects
59
JtAccept
,
// Accept a consensus ledger
60
JtProposalT
,
// A proposal from a trusted source
61
JtNetopCluster
,
// NetworkOPs cluster peer report
62
JtNetopTimer
,
// NetworkOPs net timer processing
63
JtAdmin
,
// An administrative operation
64
65
// Special job types which are not dispatched by the job pool
66
JtPeer
,
67
JtDisk
,
68
JtTxnProc
,
69
JtObSetup
,
70
JtPathFind
,
71
JtHoRead
,
72
JtHoWrite
,
73
JtGeneric
,
// Used just to measure time
74
75
// Node store monitoring
76
JtNsSyncRead
,
77
JtNsAsyncRead
,
78
JtNsWrite
,
79
};
80
81
class
Job
:
public
CountedObject
<Job>
82
{
83
public
:
84
using
ClockType
=
std::chrono::steady_clock
;
85
93
// VFALCO NOTE I'd prefer not to have a default constructed object.
94
// What is the semantic meaning of a Job with no associated
95
// function? Having the invariant "all Job objects refer to
96
// a job" would reduce the number of states.
97
//
98
Job
();
99
100
Job
(
JobType
type,
std::uint64_t
index);
101
102
// VFALCO TODO try to remove the dependency on LoadMonitor.
103
Job
(
JobType
type,
104
std::string
const
& name,
105
std::uint64_t
index,
106
LoadMonitor
& lm,
107
std::function
<
void
()>
const
& job);
108
109
[[nodiscard]]
JobType
110
getType
()
const
;
111
115
[[nodiscard]] ClockType::time_point
const
&
116
queueTime
()
const
;
117
118
void
119
doJob
();
120
121
// These comparison operators make the jobs sort in priority order
122
// in the job set
123
bool
124
operator<
(
Job
const
& j)
const
;
125
bool
126
operator>
(
Job
const
& j)
const
;
127
bool
128
operator<=
(
Job
const
& j)
const
;
129
bool
130
operator>=
(
Job
const
& j)
const
;
131
132
private
:
133
JobType
type_
;
134
std::uint64_t
jobIndex_
;
135
std::function
<void()>
job_
;
136
std::shared_ptr<LoadEvent>
loadEvent_
;
137
std::string
name_
;
138
ClockType::time_point
queueTime_
;
139
};
140
141
using
JobCounter
=
ClosureCounter<void>
;
142
143
}
// namespace xrpl
std::string
chrono
xrpl::ClosureCounter
The role of a ClosureCounter is to assist in shutdown by letting callers wait for the completion of c...
Definition
ClosureCounter.h:38
xrpl::CountedObject< Job >::CountedObject
CountedObject() noexcept
Definition
CountedObject.h:119
xrpl::Job::getType
JobType getType() const
Definition
Job.cpp:34
xrpl::Job::job_
std::function< void()> job_
Definition
Job.h:135
xrpl::Job::ClockType
std::chrono::steady_clock ClockType
Definition
Job.h:84
xrpl::Job::doJob
void doJob()
Definition
Job.cpp:46
xrpl::Job::loadEvent_
std::shared_ptr< LoadEvent > loadEvent_
Definition
Job.h:136
xrpl::Job::operator>=
bool operator>=(Job const &j) const
Definition
Job.cpp:72
xrpl::Job::queueTime
ClockType::time_point const & queueTime() const
Returns the time when the job was queued.
Definition
Job.cpp:40
xrpl::Job::operator<
bool operator<(Job const &j) const
Definition
Job.cpp:84
xrpl::Job::Job
Job()
Default constructor.
Definition
Job.cpp:14
xrpl::Job::name_
std::string name_
Definition
Job.h:137
xrpl::Job::operator<=
bool operator<=(Job const &j) const
Definition
Job.cpp:96
xrpl::Job::type_
JobType type_
Definition
Job.h:133
xrpl::Job::queueTime_
ClockType::time_point queueTime_
Definition
Job.h:138
xrpl::Job::jobIndex_
std::uint64_t jobIndex_
Definition
Job.h:134
xrpl::Job::operator>
bool operator>(Job const &j) const
Definition
Job.cpp:60
xrpl::LoadMonitor
Definition
LoadMonitor.h:19
cstdint
std::function
functional
std::uint64_t
memory
xrpl
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition
algorithm.h:5
xrpl::JobType
JobType
Definition
Job.h:21
xrpl::JtNsWrite
@ JtNsWrite
Definition
Job.h:78
xrpl::JtPack
@ JtPack
Definition
Job.h:29
xrpl::JtWrite
@ JtWrite
Definition
Job.h:58
xrpl::JtNsAsyncRead
@ JtNsAsyncRead
Definition
Job.h:77
xrpl::JtGeneric
@ JtGeneric
Definition
Job.h:73
xrpl::JtClientSubscribe
@ JtClientSubscribe
Definition
Job.h:32
xrpl::JtPuboldledger
@ JtPuboldledger
Definition
Job.h:30
xrpl::JtDisk
@ JtDisk
Definition
Job.h:67
xrpl::JtNsSyncRead
@ JtNsSyncRead
Definition
Job.h:76
xrpl::JtClient
@ JtClient
Definition
Job.h:31
xrpl::JtInvalid
@ JtInvalid
Definition
Job.h:23
xrpl::JtNetopTimer
@ JtNetopTimer
Definition
Job.h:62
xrpl::JtClientWebsocket
@ JtClientWebsocket
Definition
Job.h:37
xrpl::JtClientAcctHist
@ JtClientAcctHist
Definition
Job.h:35
xrpl::JtWal
@ JtWal
Definition
Job.h:56
xrpl::JtLedgerReq
@ JtLedgerReq
Definition
Job.h:45
xrpl::JtLedgerData
@ JtLedgerData
Definition
Job.h:52
xrpl::JtValidationUt
@ JtValidationUt
Definition
Job.h:40
xrpl::JtTransactionL
@ JtTransactionL
Definition
Job.h:43
xrpl::JtTransaction
@ JtTransaction
Definition
Job.h:48
xrpl::JtProposalUt
@ JtProposalUt
Definition
Job.h:46
xrpl::JtRpc
@ JtRpc
Definition
Job.h:38
xrpl::JtBatch
@ JtBatch
Definition
Job.h:51
xrpl::JtHoWrite
@ JtHoWrite
Definition
Job.h:72
xrpl::JtPubledger
@ JtPubledger
Definition
Job.h:54
xrpl::JtObSetup
@ JtObSetup
Definition
Job.h:69
xrpl::JtReplayReq
@ JtReplayReq
Definition
Job.h:44
xrpl::JtTxnProc
@ JtTxnProc
Definition
Job.h:68
xrpl::JtRequestedTxn
@ JtRequestedTxn
Definition
Job.h:50
xrpl::JtClientConsensus
@ JtClientConsensus
Definition
Job.h:34
xrpl::JtAccept
@ JtAccept
Definition
Job.h:59
xrpl::JtTxnData
@ JtTxnData
Definition
Job.h:55
xrpl::JtNetopCluster
@ JtNetopCluster
Definition
Job.h:61
xrpl::JtReplayTask
@ JtReplayTask
Definition
Job.h:47
xrpl::JtAdvance
@ JtAdvance
Definition
Job.h:53
xrpl::JtPathFind
@ JtPathFind
Definition
Job.h:70
xrpl::JtAdmin
@ JtAdmin
Definition
Job.h:63
xrpl::JtClientRpc
@ JtClientRpc
Definition
Job.h:36
xrpl::JtValidationT
@ JtValidationT
Definition
Job.h:57
xrpl::JtMissingTxn
@ JtMissingTxn
Definition
Job.h:49
xrpl::JtManifest
@ JtManifest
Definition
Job.h:41
xrpl::JtSweep
@ JtSweep
Definition
Job.h:39
xrpl::JtClientFeeChange
@ JtClientFeeChange
Definition
Job.h:33
xrpl::JtHoRead
@ JtHoRead
Definition
Job.h:71
xrpl::JtProposalT
@ JtProposalT
Definition
Job.h:60
xrpl::JtPeer
@ JtPeer
Definition
Job.h:66
xrpl::JtUpdatePf
@ JtUpdatePf
Definition
Job.h:42
xrpl::JobCounter
ClosureCounter< void > JobCounter
Definition
Job.h:141
std::shared_ptr
std::chrono::steady_clock
string
Generated by
1.17.0