rippled
Loading...
Searching...
No Matches
JobTypes.h
1//------------------------------------------------------------------------------
2/*
3 This file is part of rippled: https://github.com/ripple/rippled
4 Copyright (c) 2012, 2013 Ripple Labs Inc.
5
6 Permission to use, copy, modify, and/or distribute this software for any
7 purpose with or without fee is hereby granted, provided that the above
8 copyright notice and this permission notice appear in all copies.
9
10 THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11 WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12 MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13 ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17*/
18//==============================================================================
19
20#ifndef RIPPLE_CORE_JOBTYPES_H_INCLUDED
21#define RIPPLE_CORE_JOBTYPES_H_INCLUDED
22
23#include <xrpld/core/Job.h>
24#include <xrpld/core/JobTypeInfo.h>
25
26#include <map>
27#include <string>
28
29namespace ripple {
30
32{
33public:
35 using const_iterator = Map::const_iterator;
36
37private:
39 : m_unknown(
41 "invalid",
42 0,
43 std::chrono::milliseconds{0},
44 std::chrono::milliseconds{0})
45 {
46 using namespace std::chrono_literals;
47 int maxLimit = std::numeric_limits<int>::max();
48
49 auto add = [this](
50 JobType jt,
52 int limit,
54 std::chrono::milliseconds peakLatency) {
55 XRPL_ASSERT(
56 m_map.find(jt) == m_map.end(),
57 "ripple::JobTypes::JobTypes::add : unique job type input");
58
59 [[maybe_unused]] auto const inserted =
60 m_map
61 .emplace(
65 jt, name, limit, avgLatency, peakLatency))
66 .second;
67
68 XRPL_ASSERT(
69 inserted == true,
70 "ripple::JobTypes::JobTypes::add : input is inserted");
71 };
72
73 // clang-format off
74 // avg peak
75 // JobType name limit latency latency
76 add(jtPACK, "makeFetchPack", 1, 0ms, 0ms);
77 add(jtPUBOLDLEDGER, "publishAcqLedger", 2, 10000ms, 15000ms);
78 add(jtVALIDATION_ut, "untrustedValidation", maxLimit, 2000ms, 5000ms);
79 add(jtMANIFEST, "manifest", maxLimit, 2000ms, 5000ms);
80 add(jtTRANSACTION_l, "localTransaction", maxLimit, 100ms, 500ms);
81 add(jtREPLAY_REQ, "ledgerReplayRequest", 10, 250ms, 1000ms);
82 add(jtLEDGER_REQ, "ledgerRequest", 3, 0ms, 0ms);
83 add(jtPROPOSAL_ut, "untrustedProposal", maxLimit, 500ms, 1250ms);
84 add(jtREPLAY_TASK, "ledgerReplayTask", maxLimit, 0ms, 0ms);
85 add(jtLEDGER_DATA, "ledgerData", 3, 0ms, 0ms);
86 add(jtCLIENT, "clientCommand", maxLimit, 2000ms, 5000ms);
87 add(jtCLIENT_SUBSCRIBE, "clientSubscribe", maxLimit, 2000ms, 5000ms);
88 add(jtCLIENT_FEE_CHANGE, "clientFeeChange", maxLimit, 2000ms, 5000ms);
89 add(jtCLIENT_CONSENSUS, "clientConsensus", maxLimit, 2000ms, 5000ms);
90 add(jtCLIENT_ACCT_HIST, "clientAccountHistory", maxLimit, 2000ms, 5000ms);
91 add(jtCLIENT_RPC, "clientRPC", maxLimit, 2000ms, 5000ms);
92 add(jtCLIENT_WEBSOCKET, "clientWebsocket", maxLimit, 2000ms, 5000ms);
93 add(jtRPC, "RPC", maxLimit, 0ms, 0ms);
94 add(jtUPDATE_PF, "updatePaths", 1, 0ms, 0ms);
95 add(jtTRANSACTION, "transaction", maxLimit, 250ms, 1000ms);
96 add(jtBATCH, "batch", maxLimit, 250ms, 1000ms);
97 add(jtADVANCE, "advanceLedger", maxLimit, 0ms, 0ms);
98 add(jtPUBLEDGER, "publishNewLedger", maxLimit, 3000ms, 4500ms);
99 add(jtTXN_DATA, "fetchTxnData", 5, 0ms, 0ms);
100 add(jtWAL, "writeAhead", maxLimit, 1000ms, 2500ms);
101 add(jtVALIDATION_t, "trustedValidation", maxLimit, 500ms, 1500ms);
102 add(jtWRITE, "writeObjects", maxLimit, 1750ms, 2500ms);
103 add(jtACCEPT, "acceptLedger", maxLimit, 0ms, 0ms);
104 add(jtPROPOSAL_t, "trustedProposal", maxLimit, 100ms, 500ms);
105 add(jtSWEEP, "sweep", 1, 0ms, 0ms);
106 add(jtNETOP_CLUSTER, "clusterReport", 1, 9999ms, 9999ms);
107 add(jtNETOP_TIMER, "heartbeat", 1, 999ms, 999ms);
108 add(jtADMIN, "administration", maxLimit, 0ms, 0ms);
109 add(jtMISSING_TXN, "handleHaveTransactions", 1200, 0ms, 0ms);
110 add(jtREQUESTED_TXN, "doTransactions", 1200, 0ms, 0ms);
111
112 add(jtPEER, "peerCommand", 0, 200ms, 2500ms);
113 add(jtDISK, "diskAccess", 0, 500ms, 1000ms);
114 add(jtTXN_PROC, "processTransaction", 0, 0ms, 0ms);
115 add(jtOB_SETUP, "orderBookSetup", 0, 0ms, 0ms);
116 add(jtPATH_FIND, "pathFind", 0, 0ms, 0ms);
117 add(jtHO_READ, "nodeRead", 0, 0ms, 0ms);
118 add(jtHO_WRITE, "nodeWrite", 0, 0ms, 0ms);
119 add(jtGENERIC, "generic", 0, 0ms, 0ms);
120 add(jtNS_SYNC_READ, "SyncReadNode", 0, 0ms, 0ms);
121 add(jtNS_ASYNC_READ, "AsyncReadNode", 0, 0ms, 0ms);
122 add(jtNS_WRITE, "WriteNode", 0, 0ms, 0ms);
123 // clang-format on
124 }
125
126public:
127 static JobTypes const&
129 {
130 static JobTypes const types;
131 return types;
132 }
133
134 static std::string const&
136 {
137 return instance().get(jt).name();
138 }
139
140 JobTypeInfo const&
141 get(JobType jt) const
142 {
143 Map::const_iterator const iter(m_map.find(jt));
144 XRPL_ASSERT(iter != m_map.end(), "ripple::JobTypes::get : valid input");
145
146 if (iter != m_map.end())
147 return iter->second;
148
149 return m_unknown;
150 }
151
152 JobTypeInfo const&
154 {
155 return m_unknown;
156 }
157
158 Map::size_type
159 size() const
160 {
161 return m_map.size();
162 }
163
165 begin() const
166 {
167 return m_map.cbegin();
168 }
169
171 cbegin() const
172 {
173 return m_map.cbegin();
174 }
175
177 end() const
178 {
179 return m_map.cend();
180 }
181
183 cend() const
184 {
185 return m_map.cend();
186 }
187
190};
191
192} // namespace ripple
193
194#endif
T cbegin(T... args)
Holds all the 'static' information about a job, which does not change.
Definition: JobTypeInfo.h:29
std::string const & name() const
Definition: JobTypeInfo.h:70
const_iterator cend() const
Definition: JobTypes.h:183
const_iterator end() const
Definition: JobTypes.h:177
const_iterator begin() const
Definition: JobTypes.h:165
static std::string const & name(JobType jt)
Definition: JobTypes.h:135
JobTypeInfo m_unknown
Definition: JobTypes.h:188
JobTypeInfo const & get(JobType jt) const
Definition: JobTypes.h:141
Map::const_iterator const_iterator
Definition: JobTypes.h:35
Map::size_type size() const
Definition: JobTypes.h:159
JobTypeInfo const & getInvalid() const
Definition: JobTypes.h:153
static JobTypes const & instance()
Definition: JobTypes.h:128
const_iterator cbegin() const
Definition: JobTypes.h:171
T emplace(T... args)
T end(T... args)
T find(T... args)
T forward_as_tuple(T... args)
T max(T... args)
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition: algorithm.h:26
JobType
Definition: Job.h:35
@ jtWAL
Definition: Job.h:70
@ jtCLIENT_RPC
Definition: Job.h:50
@ jtNETOP_CLUSTER
Definition: Job.h:75
@ jtLEDGER_DATA
Definition: Job.h:66
@ jtLEDGER_REQ
Definition: Job.h:59
@ jtRPC
Definition: Job.h:52
@ jtPROPOSAL_ut
Definition: Job.h:60
@ jtINVALID
Definition: Job.h:37
@ jtHO_WRITE
Definition: Job.h:86
@ jtCLIENT_FEE_CHANGE
Definition: Job.h:47
@ jtREPLAY_REQ
Definition: Job.h:58
@ jtTRANSACTION
Definition: Job.h:62
@ jtPEER
Definition: Job.h:80
@ jtREQUESTED_TXN
Definition: Job.h:64
@ jtPATH_FIND
Definition: Job.h:84
@ jtTXN_PROC
Definition: Job.h:82
@ jtMISSING_TXN
Definition: Job.h:63
@ jtUPDATE_PF
Definition: Job.h:56
@ jtCLIENT_CONSENSUS
Definition: Job.h:48
@ jtREPLAY_TASK
Definition: Job.h:61
@ jtADMIN
Definition: Job.h:77
@ jtACCEPT
Definition: Job.h:73
@ jtHO_READ
Definition: Job.h:85
@ jtBATCH
Definition: Job.h:65
@ jtPUBLEDGER
Definition: Job.h:68
@ jtGENERIC
Definition: Job.h:87
@ jtCLIENT_ACCT_HIST
Definition: Job.h:49
@ jtPUBOLDLEDGER
Definition: Job.h:44
@ jtVALIDATION_t
Definition: Job.h:71
@ jtNS_WRITE
Definition: Job.h:92
@ jtMANIFEST
Definition: Job.h:55
@ jtSWEEP
Definition: Job.h:53
@ jtNS_SYNC_READ
Definition: Job.h:90
@ jtTXN_DATA
Definition: Job.h:69
@ jtNS_ASYNC_READ
Definition: Job.h:91
@ jtADVANCE
Definition: Job.h:67
@ jtOB_SETUP
Definition: Job.h:83
@ jtNETOP_TIMER
Definition: Job.h:76
@ jtCLIENT
Definition: Job.h:45
@ jtPACK
Definition: Job.h:43
@ jtTRANSACTION_l
Definition: Job.h:57
@ jtVALIDATION_ut
Definition: Job.h:54
@ jtCLIENT_SUBSCRIBE
Definition: Job.h:46
@ jtWRITE
Definition: Job.h:72
@ jtCLIENT_WEBSOCKET
Definition: Job.h:51
@ jtDISK
Definition: Job.h:81
@ jtPROPOSAL_t
Definition: Job.h:74
STL namespace.
T piecewise_construct
T size(T... args)