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/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
14namespace 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)
21enum JobType {
22 // Special type indicating an invalid job - will go away soon.
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
73 JtGeneric, // Used just to measure time
74
75 // Node store monitoring
79};
80
81class Job : public CountedObject<Job>
82{
83public:
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]] clock_type::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
132private:
138 clock_type::time_point queueTime_;
139};
140
142
143} // 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:135
void doJob()
Definition Job.cpp:46
clock_type::time_point queueTime_
Definition Job.h:138
std::shared_ptr< LoadEvent > loadEvent_
Definition Job.h:136
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:84
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:137
bool operator<=(Job const &j) const
Definition Job.cpp:96
JobType type_
Definition Job.h:133
std::uint64_t jobIndex_
Definition Job.h:134
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:21
@ JtNsWrite
Definition Job.h:78
@ JtPack
Definition Job.h:29
@ JtWrite
Definition Job.h:58
@ JtNsAsyncRead
Definition Job.h:77
@ JtGeneric
Definition Job.h:73
@ JtClientSubscribe
Definition Job.h:32
@ JtPuboldledger
Definition Job.h:30
@ JtDisk
Definition Job.h:67
@ JtNsSyncRead
Definition Job.h:76
@ JtClient
Definition Job.h:31
@ JtInvalid
Definition Job.h:23
@ JtNetopTimer
Definition Job.h:62
@ JtClientWebsocket
Definition Job.h:37
@ JtClientAcctHist
Definition Job.h:35
@ JtWal
Definition Job.h:56
@ JtLedgerReq
Definition Job.h:45
@ JtLedgerData
Definition Job.h:52
@ JtValidationUt
Definition Job.h:40
@ JtTransactionL
Definition Job.h:43
@ JtTransaction
Definition Job.h:48
@ JtProposalUt
Definition Job.h:46
@ JtRpc
Definition Job.h:38
@ JtBatch
Definition Job.h:51
@ JtHoWrite
Definition Job.h:72
@ JtPubledger
Definition Job.h:54
@ JtObSetup
Definition Job.h:69
@ JtReplayReq
Definition Job.h:44
@ JtTxnProc
Definition Job.h:68
@ JtRequestedTxn
Definition Job.h:50
@ JtClientConsensus
Definition Job.h:34
@ JtAccept
Definition Job.h:59
@ JtTxnData
Definition Job.h:55
@ JtNetopCluster
Definition Job.h:61
@ JtReplayTask
Definition Job.h:47
@ JtAdvance
Definition Job.h:53
@ JtPathFind
Definition Job.h:70
@ JtAdmin
Definition Job.h:63
@ JtClientRpc
Definition Job.h:36
@ JtValidationT
Definition Job.h:57
@ JtMissingTxn
Definition Job.h:49
@ JtManifest
Definition Job.h:41
@ JtSweep
Definition Job.h:39
@ JtClientFeeChange
Definition Job.h:33
@ JtHoRead
Definition Job.h:71
@ JtProposalT
Definition Job.h:60
@ JtPeer
Definition Job.h:66
@ JtUpdatePf
Definition Job.h:42
ClosureCounter< void > JobCounter
Definition Job.h:141