rippled
Application.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_MAIN_APPLICATION_H_INCLUDED
21 #define RIPPLE_APP_MAIN_APPLICATION_H_INCLUDED
22 
23 #include <ripple/basics/TaggedCache.h>
24 #include <ripple/beast/utility/PropertyStream.h>
25 #include <ripple/core/Config.h>
26 #include <ripple/overlay/PeerReservationTable.h>
27 #include <ripple/protocol/Protocol.h>
28 #include <ripple/shamap/FullBelowCache.h>
29 #include <ripple/shamap/TreeNodeCache.h>
30 #include <boost/asio.hpp>
31 #include <memory>
32 #include <mutex>
33 
34 namespace ripple {
35 
36 namespace unl {
37 class Manager;
38 }
39 namespace Resource {
40 class Manager;
41 }
42 namespace NodeStore {
43 class Database;
44 class DatabaseShard;
45 } // namespace NodeStore
46 namespace perf {
47 class PerfLog;
48 }
49 namespace RPC {
51 }
52 
53 // VFALCO TODO Fix forward declares required for header dependency loops
54 class AmendmentTable;
55 class CachedSLEs;
56 class CollectorManager;
57 class Family;
58 class HashRouter;
59 class Logs;
60 class LoadFeeTrack;
61 class JobQueue;
62 class InboundLedgers;
64 class AcceptedLedger;
65 class Ledger;
66 class LedgerMaster;
67 class LedgerCleaner;
68 class LedgerReplayer;
69 class LoadManager;
70 class ManifestCache;
71 class ValidatorKeys;
72 class NetworkOPs;
73 class OpenLedger;
74 class OrderBookDB;
75 class Overlay;
76 class PathRequests;
77 class PendingSaves;
78 class PublicKey;
79 class SecretKey;
80 class AccountIDCache;
81 class STLedgerEntry;
82 class TimeKeeper;
83 class TransactionMaster;
84 class TxQ;
85 
86 class ValidatorList;
87 class ValidatorSite;
88 class Cluster;
89 
91 class DatabaseCon;
92 class SHAMapStore;
93 
94 class ReportingETL;
95 
97 
98 template <class Adaptor>
102 
104 {
105 public:
106  /* VFALCO NOTE
107 
108  The master mutex protects:
109 
110  - The open ledger
111  - Server global state
112  * What the last closed ledger is
113  * State of the consensus engine
114 
115  other things
116  */
118  virtual MutexType&
119  getMasterMutex() = 0;
120 
121 public:
122  Application();
123 
124  virtual ~Application() = default;
125 
126  virtual bool
127  setup() = 0;
128  virtual void
129  start(bool withTimers) = 0;
130  virtual void
131  run() = 0;
132  virtual void
133  signalStop() = 0;
134  virtual bool
135  checkSigs() const = 0;
136  virtual void
137  checkSigs(bool) = 0;
138  virtual bool
139  isStopping() const = 0;
140 
141  //
142  // ---
143  //
144 
145  virtual Logs&
146  logs() = 0;
147  virtual Config&
148  config() = 0;
149 
150  virtual boost::asio::io_service&
151  getIOService() = 0;
152 
153  virtual CollectorManager&
154  getCollectorManager() = 0;
155  virtual Family&
156  getNodeFamily() = 0;
157  virtual Family*
158  getShardFamily() = 0;
159  virtual TimeKeeper&
160  timeKeeper() = 0;
161  virtual JobQueue&
162  getJobQueue() = 0;
163  virtual NodeCache&
164  getTempNodeCache() = 0;
165  virtual CachedSLEs&
166  cachedSLEs() = 0;
167  virtual AmendmentTable&
168  getAmendmentTable() = 0;
169  virtual HashRouter&
170  getHashRouter() = 0;
171  virtual LoadFeeTrack&
172  getFeeTrack() = 0;
173  virtual LoadManager&
174  getLoadManager() = 0;
175  virtual Overlay&
176  overlay() = 0;
177  virtual TxQ&
178  getTxQ() = 0;
179  virtual ValidatorList&
180  validators() = 0;
181  virtual ValidatorSite&
182  validatorSites() = 0;
183  virtual ManifestCache&
184  validatorManifests() = 0;
185  virtual ManifestCache&
186  publisherManifests() = 0;
187  virtual Cluster&
188  cluster() = 0;
189  virtual PeerReservationTable&
190  peerReservations() = 0;
191  virtual RCLValidations&
192  getValidations() = 0;
193  virtual NodeStore::Database&
194  getNodeStore() = 0;
195  virtual NodeStore::DatabaseShard*
196  getShardStore() = 0;
197  virtual RPC::ShardArchiveHandler*
198  getShardArchiveHandler(bool tryRecovery = false) = 0;
199  virtual InboundLedgers&
200  getInboundLedgers() = 0;
201  virtual InboundTransactions&
203 
206 
207  virtual LedgerMaster&
208  getLedgerMaster() = 0;
209  virtual LedgerCleaner&
210  getLedgerCleaner() = 0;
211  virtual LedgerReplayer&
212  getLedgerReplayer() = 0;
213  virtual NetworkOPs&
214  getOPs() = 0;
215  virtual OrderBookDB&
216  getOrderBookDB() = 0;
217  virtual TransactionMaster&
218  getMasterTransaction() = 0;
219  virtual perf::PerfLog&
220  getPerfLog() = 0;
221 
222  virtual std::pair<PublicKey, SecretKey> const&
223  nodeIdentity() = 0;
224 
225  virtual PublicKey const&
226  getValidationPublicKey() const = 0;
227 
228  virtual Resource::Manager&
229  getResourceManager() = 0;
230  virtual PathRequests&
231  getPathRequests() = 0;
232  virtual SHAMapStore&
233  getSHAMapStore() = 0;
234  virtual PendingSaves&
235  pendingSaves() = 0;
236  virtual AccountIDCache const&
237  accountIDCache() const = 0;
238  virtual OpenLedger&
239  openLedger() = 0;
240  virtual OpenLedger const&
241  openLedger() const = 0;
242  virtual RelationalDBInterface&
244 
246  getIOLatency() = 0;
247 
248  virtual ReportingETL&
249  getReportingETL() = 0;
250 
251  virtual bool
252  serverOkay(std::string& reason) = 0;
253 
254  virtual beast::Journal
255  journal(std::string const& name) = 0;
256 
257  /* Returns the number of file descriptors the application needs */
258  virtual int
259  fdRequired() const = 0;
260 
262  virtual DatabaseCon&
263  getWalletDB() = 0;
264 
267  virtual LedgerIndex
269 };
270 
275  std::unique_ptr<TimeKeeper> timeKeeper);
276 
277 } // namespace ripple
278 
279 #endif
beast::PropertyStream::Source::name
std::string const & name() const
Returns the name of this source.
Definition: beast_PropertyStream.cpp:190
ripple::NetworkOPs
Provides server functionality for clients.
Definition: NetworkOPs.h:86
ripple::RCLValidationsAdaptor
Generic validations adaptor class for RCL.
Definition: RCLValidations.h:205
ripple::Application
Definition: Application.h:103
ripple::Application::checkSigs
virtual bool checkSigs() const =0
ripple::Application::getNodeFamily
virtual Family & getNodeFamily()=0
ripple::Application::getOrderBookDB
virtual OrderBookDB & getOrderBookDB()=0
ripple::AcceptedLedger
A ledger that has become irrevocable.
Definition: AcceptedLedger.h:44
ripple::Application::getTempNodeCache
virtual NodeCache & getTempNodeCache()=0
ripple::LoadManager
Manages load sources.
Definition: LoadManager.h:45
ripple::Application::cluster
virtual Cluster & cluster()=0
ripple::Application::start
virtual void start(bool withTimers)=0
ripple::Application::getAcceptedLedgerCache
virtual TaggedCache< uint256, AcceptedLedger > & getAcceptedLedgerCache()=0
ripple::STLedgerEntry
Definition: STLedgerEntry.h:30
ripple::NodeStore::Database
Persistency layer for NodeObject.
Definition: Database.h:52
std::string
STL class.
ripple::TaggedCache< SHAMapHash, Blob >
ripple::Logs
Manages partitions for logging.
Definition: Log.h:48
ripple::TransactionMaster
Definition: TransactionMaster.h:36
ripple::ValidatorSite
Definition: ValidatorSite.h:69
std::pair
ripple::Application::validatorSites
virtual ValidatorSite & validatorSites()=0
beast::PropertyStream::Source
Subclasses can be called to write to a stream and have children.
Definition: PropertyStream.h:342
ripple::LedgerMaster
Definition: LedgerMaster.h:70
ripple::Application::getAmendmentTable
virtual AmendmentTable & getAmendmentTable()=0
ripple::Application::getRelationalDBInterface
virtual RelationalDBInterface & getRelationalDBInterface()=0
ripple::Application::peerReservations
virtual PeerReservationTable & peerReservations()=0
ripple::CollectorManager
Provides the beast::insight::Collector service.
Definition: CollectorManager.h:29
std::chrono::milliseconds
ripple::SHAMapStore
class to create database, launch online delete thread, and related SQLite database
Definition: SHAMapStore.h:36
std::recursive_mutex
STL class.
ripple::Application::getShardStore
virtual NodeStore::DatabaseShard * getShardStore()=0
ripple::perf::PerfLog
Singleton class that maintains performance counters and optionally writes Json-formatted data to a di...
Definition: PerfLog.h:47
ripple::PendingSaves
Keeps track of which ledgers haven't been fully saved.
Definition: PendingSaves.h:36
ripple::Application::isStopping
virtual bool isStopping() const =0
ripple::RelationalDBInterface
Definition: RelationalDBInterface.h:48
ripple::Application::timeKeeper
virtual TimeKeeper & timeKeeper()=0
ripple::Application::getMasterMutex
virtual MutexType & getMasterMutex()=0
ripple::Application::openLedger
virtual OpenLedger & openLedger()=0
ripple::AccountIDCache
Caches the base58 representations of AccountIDs.
Definition: AccountID.h:118
ripple::Application::getOPs
virtual NetworkOPs & getOPs()=0
ripple::Application::cachedSLEs
virtual CachedSLEs & cachedSLEs()=0
ripple::Application::getWalletDB
virtual DatabaseCon & getWalletDB()=0
Retrieve the "wallet database".
ripple::ValidatorKeys
Validator keys and manifest as set in configuration file.
Definition: ValidatorKeys.h:36
ripple::Application::accountIDCache
virtual AccountIDCache const & accountIDCache() const =0
ripple::HashRouter
Routing table for objects identified by hash.
Definition: HashRouter.h:53
ripple::Application::getInboundLedgers
virtual InboundLedgers & getInboundLedgers()=0
ripple::Application::getFeeTrack
virtual LoadFeeTrack & getFeeTrack()=0
ripple::Application::getReportingETL
virtual ReportingETL & getReportingETL()=0
ripple::Application::serverOkay
virtual bool serverOkay(std::string &reason)=0
ripple::Application::~Application
virtual ~Application()=default
ripple::TxQ
Transaction Queue.
Definition: TxQ.h:56
ripple::Application::getIOLatency
virtual std::chrono::milliseconds getIOLatency()=0
ripple::Application::getLoadManager
virtual LoadManager & getLoadManager()=0
ripple::Application::getInboundTransactions
virtual InboundTransactions & getInboundTransactions()=0
ripple::Ledger
Holds a ledger.
Definition: Ledger.h:76
ripple::Application::getLedgerMaster
virtual LedgerMaster & getLedgerMaster()=0
ripple::PublicKey
A public key.
Definition: PublicKey.h:59
ripple::Config
Definition: Config.h:68
ripple::Application::pendingSaves
virtual PendingSaves & pendingSaves()=0
ripple::Cluster
Definition: Cluster.h:38
ripple::CachedSLEs
Caches SLEs by their digest.
Definition: CachedSLEs.h:32
ripple::ValidatorList
Definition: ValidatorList.h:172
ripple::Application::config
virtual Config & config()=0
ripple::Application::nodeIdentity
virtual std::pair< PublicKey, SecretKey > const & nodeIdentity()=0
ripple::NodeStore::DatabaseShard
A collection of historical shards.
Definition: DatabaseShard.h:37
ripple::Application::getTxQ
virtual TxQ & getTxQ()=0
ripple::LoadFeeTrack
Manages the current fee schedule.
Definition: LoadFeeTrack.h:43
ripple::Application::getJobQueue
virtual JobQueue & getJobQueue()=0
ripple::Application::logs
virtual Logs & logs()=0
ripple::ReportingETL
This class is responsible for continuously extracting data from a p2p node, and writing that data to ...
Definition: ReportingETL.h:70
ripple::Family
Definition: Family.h:32
beast::Journal
A generic endpoint for log messages.
Definition: Journal.h:58
ripple::Application::getValidations
virtual RCLValidations & getValidations()=0
std::uint32_t
ripple::SecretKey
A secret key.
Definition: SecretKey.h:36
ripple::TimeKeeper
Manages various times used by the server.
Definition: TimeKeeper.h:32
ripple::Application::getPathRequests
virtual PathRequests & getPathRequests()=0
ripple::Application::getValidationPublicKey
virtual PublicKey const & getValidationPublicKey() const =0
ripple::OrderBookDB
Definition: OrderBookDB.h:31
memory
ripple::InboundLedgers
Manages the lifetime of inbound ledgers.
Definition: InboundLedgers.h:33
ripple::OpenLedger
Represents the open ledger.
Definition: OpenLedger.h:49
ripple::Application::validators
virtual ValidatorList & validators()=0
ripple::Application::getIOService
virtual boost::asio::io_service & getIOService()=0
ripple::JobQueue
A pool of threads to perform work.
Definition: JobQueue.h:55
ripple::Application::Application
Application()
Definition: Application.cpp:2129
ripple::Resource::Manager
Tracks load and resource consumption.
Definition: ResourceManager.h:36
ripple::Application::getResourceManager
virtual Resource::Manager & getResourceManager()=0
ripple::PeerReservationTable
Definition: PeerReservationTable.h:79
ripple::ManifestCache
Remembers manifests with the highest sequence number.
Definition: Manifest.h:223
ripple::Application::getLedgerCleaner
virtual LedgerCleaner & getLedgerCleaner()=0
ripple
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition: RCLCensorshipDetector.h:29
ripple::Application::getNodeStore
virtual NodeStore::Database & getNodeStore()=0
ripple::Application::journal
virtual beast::Journal journal(std::string const &name)=0
ripple::Application::validatorManifests
virtual ManifestCache & validatorManifests()=0
ripple::Application::getShardFamily
virtual Family * getShardFamily()=0
ripple::Overlay
Manages the set of connected peers.
Definition: Overlay.h:51
ripple::DatabaseCon
Definition: DatabaseCon.h:81
ripple::Application::publisherManifests
virtual ManifestCache & publisherManifests()=0
ripple::Application::overlay
virtual Overlay & overlay()=0
ripple::RPC::ShardArchiveHandler
Handles the download and import of one or more shard archives.
Definition: ShardArchiveHandler.h:40
ripple::LedgerReplayer
Manages the lifetime of ledger replay tasks.
Definition: LedgerReplayer.h:72
ripple::Validations
Maintains current and recent ledger validations.
Definition: Application.h:99
mutex
ripple::Application::signalStop
virtual void signalStop()=0
ripple::Application::getLedgerReplayer
virtual LedgerReplayer & getLedgerReplayer()=0
ripple::PathRequests
Definition: PathRequests.h:33
ripple::Application::getSHAMapStore
virtual SHAMapStore & getSHAMapStore()=0
ripple::Application::getCollectorManager
virtual CollectorManager & getCollectorManager()=0
ripple::Application::getPerfLog
virtual perf::PerfLog & getPerfLog()=0
ripple::LedgerCleaner
Check the ledger/transaction databases to make sure they have continuity.
Definition: LedgerCleaner.h:32
ripple::AmendmentTable
The amendment table stores the list of enabled and potential amendments.
Definition: AmendmentTable.h:36
std::unique_ptr
STL class.
ripple::Application::setup
virtual bool setup()=0
ripple::Application::getHashRouter
virtual HashRouter & getHashRouter()=0
ripple::make_Application
std::unique_ptr< Application > make_Application(std::unique_ptr< Config > config, std::unique_ptr< Logs > logs, std::unique_ptr< TimeKeeper > timeKeeper)
Definition: Application.cpp:2136
ripple::Application::fdRequired
virtual int fdRequired() const =0
ripple::Application::run
virtual void run()=0
ripple::Application::getMaxDisallowedLedger
virtual LedgerIndex getMaxDisallowedLedger()=0
Ensure that a newly-started validator does not sign proposals older than the last ledger it persisted...
ripple::Application::getShardArchiveHandler
virtual RPC::ShardArchiveHandler * getShardArchiveHandler(bool tryRecovery=false)=0
ripple::InboundTransactions
Manages the acquisition and lifetime of transaction sets.
Definition: InboundTransactions.h:35
ripple::Application::getMasterTransaction
virtual TransactionMaster & getMasterTransaction()=0