rippled
LedgerMaster.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_APP_LEDGER_LEDGERMASTER_H_INCLUDED
21 #define RIPPLE_APP_LEDGER_LEDGERMASTER_H_INCLUDED
22 
23 #include <ripple/app/main/Application.h>
24 #include <ripple/app/ledger/AbstractFetchPackContainer.h>
25 #include <ripple/app/ledger/InboundLedgers.h>
26 #include <ripple/app/ledger/Ledger.h>
27 #include <ripple/app/ledger/LedgerCleaner.h>
28 #include <ripple/app/ledger/LedgerHistory.h>
29 #include <ripple/app/ledger/LedgerHolder.h>
30 #include <ripple/app/ledger/LedgerReplay.h>
31 #include <ripple/app/misc/CanonicalTXSet.h>
32 #include <ripple/basics/chrono.h>
33 #include <ripple/basics/RangeSet.h>
34 #include <ripple/basics/StringUtilities.h>
35 #include <ripple/beast/insight/Collector.h>
36 #include <ripple/beast/utility/PropertyStream.h>
37 #include <ripple/core/Stoppable.h>
38 #include <ripple/protocol/messages.h>
39 #include <ripple/protocol/Protocol.h>
40 #include <ripple/protocol/RippleLedgerHash.h>
41 #include <ripple/protocol/STValidation.h>
42 #include <boost/optional.hpp>
43 
44 #include <mutex>
45 
46 namespace ripple {
47 
48 class Peer;
49 class Transaction;
50 
51 
52 
53 // Tracks the current ledger and any ledgers in the process of closing
54 // Tracks ledger history
55 // Tracks held transactions
56 
57 // VFALCO TODO Rename to Ledgers
58 // It sounds like this holds all the ledgers...
59 //
61  : public Stoppable
63 {
64 public:
65  explicit
67  Stoppable& parent,
68  beast::insight::Collector::ptr const& collector,
69  beast::Journal journal);
70 
71  virtual ~LedgerMaster () = default;
72 
75 
76  bool isCompatible (
77  ReadView const&,
79  char const* reason);
80 
82 
83  // The current ledger is the ledger we believe new transactions should go in
86 
87  // The finalized ledger is the last closed/accepted ledger
90  {
91  return mClosedLedger.get();
92  }
93 
94  // The validated ledger is the last fully validated ledger
97  {
98  return mValidLedger.get();
99  }
100 
101  // The Rules are in the last fully validated ledger if there is one.
103 
104  // This is the last ledger we published to clients and can lag the validated
105  // ledger
108 
111  bool isCaughtUp(std::string& reason);
112 
114 
116 
117  void setFullLedger (
118  std::shared_ptr<Ledger const> const& ledger,
119  bool isSynchronous, bool isCurrent);
120 
125  bool canBeCurrent (std::shared_ptr<Ledger const> const& ledger);
126 
127  void switchLCL (std::shared_ptr<Ledger const> const& lastClosed);
128 
129  void failedSave(std::uint32_t seq, uint256 const& hash);
130 
132 
138  void applyHeldTransactions ();
139 
147  pruneHeldTransactions(AccountID const& account,
148  std::uint32_t const seq);
149 
153 
155  boost::optional<LedgerHash> walkHashBySeq (std::uint32_t index);
156 
164  boost::optional<LedgerHash> walkHashBySeq (
165  std::uint32_t index,
166  std::shared_ptr<ReadView const> const& referenceLedger);
167 
170 
172  getLedgerByHash (uint256 const& hash);
173 
174  void setLedgerRangePresent (
175  std::uint32_t minV, std::uint32_t maxV);
176 
177  boost::optional<LedgerHash> getLedgerHash(
178  std::uint32_t desiredSeq,
179  std::shared_ptr<ReadView const> const& knownGoodLedger);
180 
181  boost::optional <NetClock::time_point> getCloseTimeBySeq (
182  LedgerIndex ledgerIndex);
183 
184  boost::optional <NetClock::time_point> getCloseTimeByHash (
185  LedgerHash const& ledgerHash, LedgerIndex ledgerIndex);
186 
188  void fixMismatch (ReadView const& ledger);
189 
190  bool haveLedger (std::uint32_t seq);
191  void clearLedger (std::uint32_t seq);
192  bool getValidatedRange (
193  std::uint32_t& minVal, std::uint32_t& maxVal);
194  bool getFullValidatedRange (
195  std::uint32_t& minVal, std::uint32_t& maxVal);
196 
197  void tune (int size, std::chrono::seconds age);
198  void sweep ();
199  float getCacheHitRate ();
200 
201  void checkAccept (std::shared_ptr<Ledger const> const& ledger);
202  void checkAccept (uint256 const& hash, std::uint32_t seq);
203  void
205  std::shared_ptr<Ledger const> const& ledger,
206  uint256 const& consensusHash,
207  Json::Value consensus);
208 
210  void setBuildingLedger (LedgerIndex index);
211 
212  void tryAdvance ();
213  bool newPathRequest (); // Returns true if path request successfully placed.
214  bool isNewPathRequest ();
215  bool newOrderBookDB (); // Returns true if able to fulfill request.
216 
217  bool fixIndex (
218  LedgerIndex ledgerIndex, LedgerHash const& ledgerHash);
219  void doLedgerCleaner(Json::Value const& parameters);
220 
222 
223  void clearPriorLedgers (LedgerIndex seq);
224 
226 
227  // ledger replay
230 
231  // Fetch Packs
232  void gotFetchPack (
233  bool progress,
234  std::uint32_t seq);
235 
236  void addFetchPack (
237  uint256 const& hash,
238  std::shared_ptr<Blob>& data);
239 
240  boost::optional<Blob>
241  getFetchPack (uint256 const& hash) override;
242 
243  void makeFetchPack (
244  std::weak_ptr<Peer> const& wPeer,
246  uint256 haveLedgerHash,
247  UptimeClock::time_point uptime);
248 
250 
252  bool
254  {
255  return !mValidLedger.empty();
256  }
257 
258 private:
259  void setValidLedger(
261  void setPubLedger(
263 
264  void tryFill(
265  Job& job,
267 
268  void getFetchPack(
269  LedgerIndex missing, InboundLedger::Reason reason);
270 
271  boost::optional<LedgerHash> getLedgerHashForHistory(
272  LedgerIndex index, InboundLedger::Reason reason);
273 
275  void advanceThread();
276  void fetchForHistory(
277  std::uint32_t missing,
278  bool& progress,
279  InboundLedger::Reason reason,
281  // Try to publish ledgers, acquire missing ledgers. Always called with
282  // m_mutex locked. The passed lock is a reminder to callers.
284 
287 
288  void updatePaths(Job& job);
289 
290  // Returns true if work started. Always called with m_mutex locked.
291  // The passed lock is a reminder to callers.
292  bool newPFWork(const char *name, std::unique_lock<std::recursive_mutex>&);
293 
296 
298 
299  // The ledger that most recently closed.
301 
302  // The highest-sequence ledger we have fully accepted.
304 
305  // The last ledger we have published.
307 
308  // The last ledger we did pathfinding against.
310 
311  // The last ledger we handled fetching history
313 
314  // The last ledger we handled fetching for a shard
316 
317  // Fully validated ledger, whether or not we have the ledger resident.
319 
321 
323 
324  // A set of transactions to replay during the next close
326 
329 
331 
332  // Publish thread is running.
333  bool mAdvanceThread {false};
334 
335  // Publish thread has work to do.
336  bool mAdvanceWork {false};
338 
339  int mPathFindThread {0}; // Pathfinder jobs dispatched
340  bool mPathFindNewRequest {false};
341 
342  std::atomic_flag mGotFetchPackThread = ATOMIC_FLAG_INIT; // GotFetchPack jobs dispatched
343 
349 
350  // The server is in standalone mode
351  bool const standalone_;
352 
353  // How many ledgers before the current ledger do we allow peers to request?
355 
356  // How much history do we want to keep
358 
360 
362 
364 
365  // Try to keep a validator from switching from test to live network
366  // without first wiping the database.
368 
369 private:
370  struct Stats
371  {
372  template <class Handler>
373  Stats (Handler const& handler, beast::insight::Collector::ptr const& collector)
374  : hook (collector->make_hook (handler))
375  , validatedLedgerAge (collector->make_gauge ("LedgerMaster", "Validated_Ledger_Age"))
376  , publishedLedgerAge (collector->make_gauge ("LedgerMaster", "Published_Ledger_Age"))
377  { }
378 
382  };
383 
385 
386 private:
388  {
389  std::lock_guard lock (m_mutex);
392  }
393 
394 
395 
396 
397 
398 };
399 
400 } // ripple
401 
402 #endif
ripple::LedgerMaster::getValidatedRange
bool getValidatedRange(std::uint32_t &minVal, std::uint32_t &maxVal)
Definition: LedgerMaster.cpp:619
ripple::LedgerMaster::mPubLedger
std::shared_ptr< Ledger const > mPubLedger
Definition: LedgerMaster.h:306
ripple::Application
Definition: Application.h:85
ripple::LedgerMaster::mClosedLedger
LedgerHolder mClosedLedger
Definition: LedgerMaster.h:300
ripple::LedgerMaster::getPublishedLedger
std::shared_ptr< ReadView const > getPublishedLedger()
Definition: LedgerMaster.cpp:1524
ripple::LedgerMaster::fetch_packs_
TaggedCache< uint256, Blob > fetch_packs_
Definition: LedgerMaster.h:361
ripple::LedgerMaster::makeFetchPack
void makeFetchPack(std::weak_ptr< Peer > const &wPeer, std::shared_ptr< protocol::TMGetObjectByHash > const &request, uint256 haveLedgerHash, UptimeClock::time_point uptime)
Definition: LedgerMaster.cpp:2014
ripple::LedgerMaster::clearLedgerCachePrior
void clearLedgerCachePrior(LedgerIndex seq)
Definition: LedgerMaster.cpp:1736
std::string
STL class.
std::shared_ptr< Collector >
ripple::TaggedCache
Map/cache combination.
Definition: TaggedCache.h:55
ripple::LedgerMaster::sweep
void sweep()
Definition: LedgerMaster.cpp:1709
ripple::LedgerMaster::mBuildingLedgerSeq
std::atomic< LedgerIndex > mBuildingLedgerSeq
Definition: LedgerMaster.h:348
ripple::LedgerMaster::app_
Application & app_
Definition: LedgerMaster.h:294
ripple::LedgerMaster::Stats::Stats
Stats(Handler const &handler, beast::insight::Collector::ptr const &collector)
Definition: LedgerMaster.h:373
ripple::LedgerMaster::advanceThread
void advanceThread()
Definition: LedgerMaster.cpp:1167
ripple::LedgerMaster::pruneHeldTransactions
std::vector< std::shared_ptr< STTx const > > pruneHeldTransactions(AccountID const &account, std::uint32_t const seq)
Get all the transactions held for a particular account.
Definition: LedgerMaster.cpp:557
ripple::LedgerMaster::mLedgerHistory
LedgerHistory mLedgerHistory
Definition: LedgerMaster.h:320
ripple::LedgerMaster::getLedgerHashForHistory
boost::optional< LedgerHash > getLedgerHashForHistory(LedgerIndex index, InboundLedger::Reason reason)
Definition: LedgerMaster.cpp:1188
ripple::LedgerMaster::mHeldTransactions
CanonicalTXSet mHeldTransactions
Definition: LedgerMaster.h:322
std::pair
beast::PropertyStream::Source
Subclasses can be called to write to a stream and have children.
Definition: PropertyStream.h:274
ripple::LedgerMaster
Definition: LedgerMaster.h:60
ripple::LedgerMaster::getValidLedgerIndex
LedgerIndex getValidLedgerIndex()
Definition: LedgerMaster.cpp:223
std::vector
STL class.
ripple::LedgerMaster::mHistLedger
std::shared_ptr< Ledger const > mHistLedger
Definition: LedgerMaster.h:312
ripple::LedgerMaster::Stats::hook
beast::insight::Hook hook
Definition: LedgerMaster.h:379
ripple::LedgerMaster::getPublishedLedgerAge
std::chrono::seconds getPublishedLedgerAge()
Definition: LedgerMaster.cpp:257
ripple::LedgerMaster::releaseReplay
std::unique_ptr< LedgerReplay > releaseReplay()
Definition: LedgerMaster.cpp:1748
std::chrono::seconds
ripple::LedgerMaster::getValidatedRules
Rules getValidatedRules()
Definition: LedgerMaster.cpp:1509
ripple::LedgerMaster::mCompleteLock
std::recursive_mutex mCompleteLock
Definition: LedgerMaster.h:327
ripple::LedgerMaster::applyHeldTransactions
void applyHeldTransactions()
Apply held transactions to the open ledger This is normally called as we close the ledger.
Definition: LedgerMaster.cpp:529
ripple::LedgerMaster::switchLCL
void switchLCL(std::shared_ptr< Ledger const > const &lastClosed)
Definition: LedgerMaster.cpp:485
std::recursive_mutex
STL class.
ripple::LedgerMaster::newPFWork
bool newPFWork(const char *name, std::unique_lock< std::recursive_mutex > &)
A thread needs to be dispatched to handle pathfinding work of some kind.
Definition: LedgerMaster.cpp:1479
std::lock_guard
STL class.
ripple::LedgerMaster::getLedgerByHash
std::shared_ptr< Ledger const > getLedgerByHash(uint256 const &hash)
Definition: LedgerMaster.cpp:1677
ripple::LedgerMaster::isNewPathRequest
bool isNewPathRequest()
Definition: LedgerMaster.cpp:1457
ripple::stopwatch
Stopwatch & stopwatch()
Returns an instance of a wall clock.
Definition: chrono.h:87
ripple::LedgerMaster::getCloseTimeByHash
boost::optional< NetClock::time_point > getCloseTimeByHash(LedgerHash const &ledgerHash, LedgerIndex ledgerIndex)
Definition: LedgerMaster.cpp:1546
ripple::LedgerMaster::getEarliestFetch
std::uint32_t getEarliestFetch()
Definition: LedgerMaster.cpp:661
ripple::LedgerHistory
Retains historical ledgers.
Definition: LedgerHistory.h:34
ripple::LedgerMaster::setFullLedger
void setFullLedger(std::shared_ptr< Ledger const > const &ledger, bool isSynchronous, bool isCurrent)
Definition: LedgerMaster.cpp:868
ripple::LedgerMaster::tune
void tune(int size, std::chrono::seconds age)
Definition: LedgerMaster.cpp:1703
std::atomic_flag
ripple::LedgerMaster::fixMismatch
void fixMismatch(ReadView const &ledger)
Definition: LedgerMaster.cpp:813
ripple::LedgerMaster::fetch_depth_
const std::uint32_t fetch_depth_
Definition: LedgerMaster.h:354
ripple::CanonicalTXSet
Holds transactions which were deferred to the next pass of consensus.
Definition: CanonicalTXSet.h:36
ripple::LedgerMaster::getCompleteLedgers
std::string getCompleteLedgers()
Definition: LedgerMaster.cpp:1531
ripple::LedgerMaster::ledger_fetch_size_
const std::uint32_t ledger_fetch_size_
Definition: LedgerMaster.h:359
ripple::LedgerMaster::Stats::validatedLedgerAge
beast::insight::Gauge validatedLedgerAge
Definition: LedgerMaster.h:380
ripple::uint256
base_uint< 256 > uint256
Definition: base_uint.h:436
ripple::LedgerMaster::peekMutex
std::recursive_mutex & peekMutex()
Definition: LedgerMaster.cpp:1496
ripple::LedgerMaster::mGotFetchPackThread
std::atomic_flag mGotFetchPackThread
Definition: LedgerMaster.h:342
ripple::base_uint< 256 >
ripple::LedgerMaster::mCompleteLedgers
RangeSet< std::uint32_t > mCompleteLedgers
Definition: LedgerMaster.h:328
ripple::LedgerMaster::getPropertySource
beast::PropertyStream::Source & getPropertySource()
Definition: LedgerMaster.cpp:1722
ripple::LedgerMaster::LedgerMaster
LedgerMaster(Application &app, Stopwatch &stopwatch, Stoppable &parent, beast::insight::Collector::ptr const &collector, beast::Journal journal)
Definition: LedgerMaster.cpp:196
ripple::Stoppable
Provides an interface for starting and stopping.
Definition: Stoppable.h:200
ripple::LedgerMaster::mFillInProgress
int mFillInProgress
Definition: LedgerMaster.h:337
ripple::LedgerMaster::replayData
std::unique_ptr< LedgerReplay > replayData
Definition: LedgerMaster.h:325
ripple::LedgerMaster::gotFetchPack
void gotFetchPack(bool progress, std::uint32_t seq)
Definition: LedgerMaster.cpp:1997
ripple::LedgerMaster::fetchForHistory
void fetchForHistory(std::uint32_t missing, bool &progress, InboundLedger::Reason reason, std::unique_lock< std::recursive_mutex > &)
Definition: LedgerMaster.cpp:1754
ripple::LedgerMaster::failedSave
void failedSave(std::uint32_t seq, uint256 const &hash)
Definition: LedgerMaster.cpp:929
ripple::LedgerHolder::empty
bool empty()
Definition: LedgerHolder.h:59
ripple::LedgerMaster::getFetchPack
boost::optional< Blob > getFetchPack(uint256 const &hash) override
Retrieves partial ledger data of the coresponding hash from peers.
Definition: LedgerMaster.cpp:1983
ripple::LedgerMaster::getFullValidatedRange
bool getFullValidatedRange(std::uint32_t &minVal, std::uint32_t &maxVal)
Definition: LedgerMaster.cpp:594
ripple::LedgerMaster::fixIndex
bool fixIndex(LedgerIndex ledgerIndex, LedgerHash const &ledgerHash)
Definition: LedgerMaster.cpp:511
ripple::isCurrent
bool isCurrent(ValidationParms const &p, NetClock::time_point now, NetClock::time_point signTime, NetClock::time_point seenTime)
Whether a validation is still current.
Definition: Validations.h:145
std::unique_lock
STL class.
ripple::LedgerMaster::canBeCurrent
bool canBeCurrent(std::shared_ptr< Ledger const > const &ledger)
Check the sequence number and parent close time of a ledger against our clock and last validated ledg...
Definition: LedgerMaster.cpp:421
ripple::AbstractFetchPackContainer
An interface facilitating retrieval of fetch packs without an application or ledgermaster object.
Definition: AbstractFetchPackContainer.h:32
ripple::LedgerMaster::haveLedger
bool haveLedger(std::uint32_t seq)
Definition: LedgerMaster.cpp:579
ripple::LedgerMaster::getValidatedLedger
std::shared_ptr< Ledger const > getValidatedLedger()
Definition: LedgerMaster.h:96
beast::Journal::Stream
Provide a light-weight way to check active() before string formatting.
Definition: Journal.h:179
ripple::LedgerMaster::isCompatible
bool isCompatible(ReadView const &, beast::Journal::Stream, char const *reason)
Definition: LedgerMaster.cpp:229
std::chrono::time_point
ripple::LedgerMaster::getLedgerBySeq
std::shared_ptr< Ledger const > getLedgerBySeq(std::uint32_t index)
Definition: LedgerMaster.cpp:1641
ripple::LedgerMaster::newPathRequest
bool newPathRequest()
Definition: LedgerMaster.cpp:1449
ripple::Job
Definition: Job.h:83
beast::Journal
A generic endpoint for log messages.
Definition: Journal.h:60
std::uint32_t
ripple::LedgerMaster::mLedgerCleaner
std::unique_ptr< detail::LedgerCleaner > mLedgerCleaner
Definition: LedgerMaster.h:330
ripple::LedgerMaster::addHeldTransaction
void addHeldTransaction(std::shared_ptr< Transaction > const &trans)
Definition: LedgerMaster.cpp:410
ripple::LedgerMaster::setValidLedger
void setValidLedger(std::shared_ptr< Ledger const > const &l)
Definition: LedgerMaster.cpp:319
std::atomic< std::uint32_t >
ripple::LedgerMaster::mPathFindNewRequest
bool mPathFindNewRequest
Definition: LedgerMaster.h:340
ripple::LedgerHolder::get
std::shared_ptr< Ledger const > get()
Definition: LedgerHolder.h:53
ripple::LedgerMaster::getCurrentLedger
std::shared_ptr< ReadView const > getCurrentLedger()
Definition: LedgerMaster.cpp:1503
ripple::LedgerMaster::newOrderBookDB
bool newOrderBookDB()
Definition: LedgerMaster.cpp:1468
ripple::LedgerMaster::getNeededValidations
std::size_t getNeededValidations()
Determines how many validations are needed to fully validate a ledger.
Definition: LedgerMaster.cpp:994
beast::abstract_clock< std::chrono::steady_clock >
ripple::LedgerMaster::mAdvanceThread
bool mAdvanceThread
Definition: LedgerMaster.h:333
ripple::LedgerMaster::getLedgerHash
boost::optional< LedgerHash > getLedgerHash(std::uint32_t desiredSeq, std::shared_ptr< ReadView const > const &knownGoodLedger)
Definition: LedgerMaster.cpp:1335
ripple::LedgerMaster::checkAccept
void checkAccept(std::shared_ptr< Ledger const > const &ledger)
Definition: LedgerMaster.cpp:1000
beast::insight::Gauge
A metric for measuring an integral value.
Definition: Gauge.h:39
std::weak_ptr
STL class.
ripple::LedgerMaster::max_ledger_difference_
const LedgerIndex max_ledger_difference_
Definition: LedgerMaster.h:367
ripple::LedgerMaster::getFetchPackCacheSize
std::size_t getFetchPackCacheSize() const
Definition: LedgerMaster.cpp:2157
ripple::LedgerMaster::doLedgerCleaner
void doLedgerCleaner(Json::Value const &parameters)
Definition: LedgerMaster.cpp:1690
ripple::LedgerMaster::mPathLedger
std::shared_ptr< Ledger const > mPathLedger
Definition: LedgerMaster.h:309
ripple::LedgerMaster::haveValidated
bool haveValidated()
Whether we have ever fully validated a ledger.
Definition: LedgerMaster.h:253
ripple::LedgerMaster::getValidatedLedgerAge
std::chrono::seconds getValidatedLedgerAge()
Definition: LedgerMaster.cpp:276
ripple::LedgerMaster::getClosedLedger
std::shared_ptr< Ledger const > getClosedLedger()
Definition: LedgerMaster.h:89
ripple::LedgerMaster::mAdvanceWork
bool mAdvanceWork
Definition: LedgerMaster.h:336
ripple::ReadView
A view into a ledger.
Definition: ReadView.h:186
ripple
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition: RCLCensorshipDetector.h:29
ripple::LedgerMaster::Stats::publishedLedgerAge
beast::insight::Gauge publishedLedgerAge
Definition: LedgerMaster.h:381
ripple::LedgerMaster::mPubLedgerClose
std::atomic< std::uint32_t > mPubLedgerClose
Definition: LedgerMaster.h:344
ripple::LedgerMaster::ledger_history_
const std::uint32_t ledger_history_
Definition: LedgerMaster.h:357
ripple::LedgerMaster::mPubLedgerSeq
std::atomic< LedgerIndex > mPubLedgerSeq
Definition: LedgerMaster.h:345
ripple::LedgerMaster::~LedgerMaster
virtual ~LedgerMaster()=default
ripple::LedgerMaster::getBuildingLedger
LedgerIndex getBuildingLedger()
Definition: LedgerMaster.cpp:566
ripple::LedgerMaster::clearLedger
void clearLedger(std::uint32_t seq)
Definition: LedgerMaster.cpp:586
ripple::LedgerMaster::m_journal
beast::Journal m_journal
Definition: LedgerMaster.h:295
ripple::LedgerMaster::getCloseTimeBySeq
boost::optional< NetClock::time_point > getCloseTimeBySeq(LedgerIndex ledgerIndex)
Definition: LedgerMaster.cpp:1538
ripple::LedgerMaster::mValidLedgerSeq
std::atomic< LedgerIndex > mValidLedgerSeq
Definition: LedgerMaster.h:347
ripple::LedgerMaster::getCurrentLedgerIndex
LedgerIndex getCurrentLedgerIndex()
Definition: LedgerMaster.cpp:217
ripple::LedgerHolder
Hold a ledger in a thread-safe way.
Definition: LedgerHolder.h:38
ripple::LedgerMaster::takeReplay
void takeReplay(std::unique_ptr< LedgerReplay > replay)
Definition: LedgerMaster.cpp:1742
ripple::LedgerMaster::mLastValidLedger
std::pair< uint256, LedgerIndex > mLastValidLedger
Definition: LedgerMaster.h:318
ripple::Rules
Rules controlling protocol behavior.
Definition: ReadView.h:126
ripple::LedgerMaster::m_stats
Stats m_stats
Definition: LedgerMaster.h:384
mutex
ripple::LedgerMaster::mShardLedger
std::shared_ptr< Ledger const > mShardLedger
Definition: LedgerMaster.h:315
ripple::LedgerMaster::updatePaths
void updatePaths(Job &job)
Definition: LedgerMaster.cpp:1368
std::size_t
ripple::LedgerMaster::storeLedger
bool storeLedger(std::shared_ptr< Ledger const > ledger)
Definition: LedgerMaster.cpp:517
ripple::InboundLedger::Reason
Reason
Definition: InboundLedger.h:47
ripple::RangeSet
boost::icl::interval_set< T, std::less, ClosedInterval< T > > RangeSet
A set of closed intervals over the domain T.
Definition: RangeSet.h:70
ripple::LedgerMaster::setLedgerRangePresent
void setLedgerRangePresent(std::uint32_t minV, std::uint32_t maxV)
Definition: LedgerMaster.cpp:1696
ripple::LedgerMaster::consensusBuilt
void consensusBuilt(std::shared_ptr< Ledger const > const &ledger, uint256 const &consensusHash, Json::Value consensus)
Report that the consensus process built a particular ledger.
Definition: LedgerMaster.cpp:1065
ripple::LedgerMaster::mValidLedger
LedgerHolder mValidLedger
Definition: LedgerMaster.h:303
ripple::LedgerMaster::fetch_seq_
std::uint32_t fetch_seq_
Definition: LedgerMaster.h:363
ripple::LedgerMaster::getHashBySeq
uint256 getHashBySeq(std::uint32_t index)
Get a ledger's hash by sequence number using the cache.
Definition: LedgerMaster.cpp:1567
ripple::LedgerMaster::findNewLedgersToPublish
std::vector< std::shared_ptr< Ledger const > > findNewLedgersToPublish(std::unique_lock< std::recursive_mutex > &)
Definition: LedgerMaster.cpp:1210
ripple::LedgerMaster::isCaughtUp
bool isCaughtUp(std::string &reason)
Definition: LedgerMaster.cpp:295
std::unique_ptr
STL class.
ripple::LedgerMaster::mPathFindThread
int mPathFindThread
Definition: LedgerMaster.h:339
ripple::LedgerMaster::mValidLedgerSign
std::atomic< std::uint32_t > mValidLedgerSign
Definition: LedgerMaster.h:346
ripple::LedgerMaster::setBuildingLedger
void setBuildingLedger(LedgerIndex index)
Definition: LedgerMaster.cpp:573
ripple::LedgerMaster::walkHashBySeq
boost::optional< LedgerHash > walkHashBySeq(std::uint32_t index)
Walk to a ledger's hash using the skip list.
Definition: LedgerMaster.cpp:1578
ripple::LedgerMaster::doAdvance
void doAdvance(std::unique_lock< std::recursive_mutex > &)
Definition: LedgerMaster.cpp:1875
ripple::LedgerMaster::tryAdvance
void tryAdvance()
Definition: LedgerMaster.cpp:1317
ripple::LedgerMaster::clearPriorLedgers
void clearPriorLedgers(LedgerIndex seq)
Definition: LedgerMaster.cpp:1728
ripple::LedgerMaster::setPubLedger
void setPubLedger(std::shared_ptr< Ledger const > const &l)
Definition: LedgerMaster.cpp:401
beast::insight::Hook
A reference to a handler for performing polled collection.
Definition: Hook.h:31
ripple::LedgerMaster::tryFill
void tryFill(Job &job, std::shared_ptr< Ledger const > ledger)
Definition: LedgerMaster.cpp:675
ripple::LedgerMaster::addFetchPack
void addFetchPack(uint256 const &hash, std::shared_ptr< Blob > &data)
Definition: LedgerMaster.cpp:1975
ripple::LedgerMaster::getCacheHitRate
float getCacheHitRate()
Definition: LedgerMaster.cpp:1716
Json::Value
Represents a JSON value.
Definition: json_value.h:141
beast::insight::Gauge::set
void set(value_type value) const
Set the value on the gauge.
Definition: Gauge.h:68
ripple::LedgerMaster::m_mutex
std::recursive_mutex m_mutex
Definition: LedgerMaster.h:297
ripple::LedgerMaster::Stats
Definition: LedgerMaster.h:370
ripple::LedgerMaster::collect_metrics
void collect_metrics()
Definition: LedgerMaster.h:387
ripple::LedgerMaster::standalone_
const bool standalone_
Definition: LedgerMaster.h:351