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