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