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#include <map>
26#include <string>
27#include <type_traits>
28#include <unordered_map>
29
30namespace ripple {
31
33{
34public:
36 using const_iterator = Map::const_iterator;
37
38private:
40 : m_unknown(
42 "invalid",
43 0,
44 std::chrono::milliseconds{0},
45 std::chrono::milliseconds{0})
46 {
47 using namespace std::chrono_literals;
48 int maxLimit = std::numeric_limits<int>::max();
49
50 auto add = [this](
51 JobType jt,
53 int limit,
55 std::chrono::milliseconds peakLatency) {
56 XRPL_ASSERT(
57 m_map.find(jt) == m_map.end(),
58 "ripple::JobTypes::JobTypes::add : unique job type input");
59
60 [[maybe_unused]] auto const inserted =
61 m_map
62 .emplace(
63 std::piecewise_construct,
66 jt, name, limit, avgLatency, peakLatency))
67 .second;
68
69 XRPL_ASSERT(
70 inserted == true,
71 "ripple::JobTypes::JobTypes::add : input is inserted");
72 };
73
74 // clang-format off
75 // avg peak
76 // JobType name limit latency latency
77 add(jtPACK, "makeFetchPack", 1, 0ms, 0ms);
78 add(jtPUBOLDLEDGER, "publishAcqLedger", 2, 10000ms, 15000ms);
79 add(jtVALIDATION_ut, "untrustedValidation", maxLimit, 2000ms, 5000ms);
80 add(jtMANIFEST, "manifest", maxLimit, 2000ms, 5000ms);
81 add(jtTRANSACTION_l, "localTransaction", maxLimit, 100ms, 500ms);
82 add(jtREPLAY_REQ, "ledgerReplayRequest", 10, 250ms, 1000ms);
83 add(jtLEDGER_REQ, "ledgerRequest", 3, 0ms, 0ms);
84 add(jtPROPOSAL_ut, "untrustedProposal", maxLimit, 500ms, 1250ms);
85 add(jtREPLAY_TASK, "ledgerReplayTask", maxLimit, 0ms, 0ms);
86 add(jtLEDGER_DATA, "ledgerData", 3, 0ms, 0ms);
87 add(jtCLIENT, "clientCommand", maxLimit, 2000ms, 5000ms);
88 add(jtCLIENT_SUBSCRIBE, "clientSubscribe", maxLimit, 2000ms, 5000ms);
89 add(jtCLIENT_FEE_CHANGE, "clientFeeChange", maxLimit, 2000ms, 5000ms);
90 add(jtCLIENT_CONSENSUS, "clientConsensus", maxLimit, 2000ms, 5000ms);
91 add(jtCLIENT_ACCT_HIST, "clientAccountHistory", maxLimit, 2000ms, 5000ms);
92 add(jtCLIENT_RPC, "clientRPC", maxLimit, 2000ms, 5000ms);
93 add(jtCLIENT_WEBSOCKET, "clientWebsocket", maxLimit, 2000ms, 5000ms);
94 add(jtRPC, "RPC", maxLimit, 0ms, 0ms);
95 add(jtUPDATE_PF, "updatePaths", 1, 0ms, 0ms);
96 add(jtTRANSACTION, "transaction", maxLimit, 250ms, 1000ms);
97 add(jtBATCH, "batch", maxLimit, 250ms, 1000ms);
98 add(jtADVANCE, "advanceLedger", maxLimit, 0ms, 0ms);
99 add(jtPUBLEDGER, "publishNewLedger", maxLimit, 3000ms, 4500ms);
100 add(jtTXN_DATA, "fetchTxnData", 5, 0ms, 0ms);
101 add(jtWAL, "writeAhead", maxLimit, 1000ms, 2500ms);
102 add(jtVALIDATION_t, "trustedValidation", maxLimit, 500ms, 1500ms);
103 add(jtWRITE, "writeObjects", maxLimit, 1750ms, 2500ms);
104 add(jtACCEPT, "acceptLedger", maxLimit, 0ms, 0ms);
105 add(jtPROPOSAL_t, "trustedProposal", maxLimit, 100ms, 500ms);
106 add(jtSWEEP, "sweep", 1, 0ms, 0ms);
107 add(jtNETOP_CLUSTER, "clusterReport", 1, 9999ms, 9999ms);
108 add(jtNETOP_TIMER, "heartbeat", 1, 999ms, 999ms);
109 add(jtADMIN, "administration", maxLimit, 0ms, 0ms);
110 add(jtMISSING_TXN, "handleHaveTransactions", 1200, 0ms, 0ms);
111 add(jtREQUESTED_TXN, "doTransactions", 1200, 0ms, 0ms);
112
113 add(jtPEER, "peerCommand", 0, 200ms, 2500ms);
114 add(jtDISK, "diskAccess", 0, 500ms, 1000ms);
115 add(jtTXN_PROC, "processTransaction", 0, 0ms, 0ms);
116 add(jtOB_SETUP, "orderBookSetup", 0, 0ms, 0ms);
117 add(jtPATH_FIND, "pathFind", 0, 0ms, 0ms);
118 add(jtHO_READ, "nodeRead", 0, 0ms, 0ms);
119 add(jtHO_WRITE, "nodeWrite", 0, 0ms, 0ms);
120 add(jtGENERIC, "generic", 0, 0ms, 0ms);
121 add(jtNS_SYNC_READ, "SyncReadNode", 0, 0ms, 0ms);
122 add(jtNS_ASYNC_READ, "AsyncReadNode", 0, 0ms, 0ms);
123 add(jtNS_WRITE, "WriteNode", 0, 0ms, 0ms);
124 // clang-format on
125 }
126
127public:
128 static JobTypes const&
130 {
131 static JobTypes const types;
132 return types;
133 }
134
135 static std::string const&
137 {
138 return instance().get(jt).name();
139 }
140
141 JobTypeInfo const&
142 get(JobType jt) const
143 {
144 Map::const_iterator const iter(m_map.find(jt));
145 XRPL_ASSERT(iter != m_map.end(), "ripple::JobTypes::get : valid input");
146
147 if (iter != m_map.end())
148 return iter->second;
149
150 return m_unknown;
151 }
152
153 JobTypeInfo const&
155 {
156 return m_unknown;
157 }
158
159 Map::size_type
160 size() const
161 {
162 return m_map.size();
163 }
164
166 begin() const
167 {
168 return m_map.cbegin();
169 }
170
172 cbegin() const
173 {
174 return m_map.cbegin();
175 }
176
178 end() const
179 {
180 return m_map.cend();
181 }
182
184 cend() const
185 {
186 return m_map.cend();
187 }
188
191};
192
193} // namespace ripple
194
195#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:184
const_iterator end() const
Definition: JobTypes.h:178
const_iterator begin() const
Definition: JobTypes.h:166
static std::string const & name(JobType jt)
Definition: JobTypes.h:136
JobTypeInfo m_unknown
Definition: JobTypes.h:189
JobTypeInfo const & get(JobType jt) const
Definition: JobTypes.h:142
Map::const_iterator const_iterator
Definition: JobTypes.h:36
Map::size_type size() const
Definition: JobTypes.h:160
JobTypeInfo const & getInvalid() const
Definition: JobTypes.h:154
static JobTypes const & instance()
Definition: JobTypes.h:129
const_iterator cbegin() const
Definition: JobTypes.h:172
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 size(T... args)