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:25
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)