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 LoadManager;
68 class ManifestCache;
69 class ValidatorKeys;
70 class NetworkOPs;
71 class OpenLedger;
72 class OrderBookDB;
73 class Overlay;
74 class PathRequests;
75 class PendingSaves;
76 class PgPool;
77 class PublicKey;
78 class SecretKey;
79 class AccountIDCache;
80 class STLedgerEntry;
81 class TimeKeeper;
82 class TransactionMaster;
83 class TxQ;
84 
85 class ValidatorList;
86 class ValidatorSite;
87 class Cluster;
88 
89 class DatabaseCon;
90 class SHAMapStore;
91 
92 class ReportingETL;
93 
95 
96 template <class Adaptor>
100 
102 {
103 public:
104  /* VFALCO NOTE
105 
106  The master mutex protects:
107 
108  - The open ledger
109  - Server global state
110  * What the last closed ledger is
111  * State of the consensus engine
112 
113  other things
114  */
116  virtual MutexType&
117  getMasterMutex() = 0;
118 
119 public:
120  Application();
121 
122  virtual ~Application() = default;
123 
124  virtual bool
125  setup() = 0;
126  virtual void
127  doStart(bool withTimers) = 0;
128  virtual void
129  run() = 0;
130  virtual bool
131  isShutdown() = 0;
132  virtual void
133  signalStop() = 0;
134  virtual bool
135  checkSigs() const = 0;
136  virtual void
137  checkSigs(bool) = 0;
138 
139  //
140  // ---
141  //
142 
143  virtual Logs&
144  logs() = 0;
145  virtual Config&
146  config() = 0;
147 
148  virtual boost::asio::io_service&
149  getIOService() = 0;
150 
151  virtual CollectorManager&
152  getCollectorManager() = 0;
153  virtual Family&
154  getNodeFamily() = 0;
155  virtual Family*
156  getShardFamily() = 0;
157  virtual TimeKeeper&
158  timeKeeper() = 0;
159  virtual JobQueue&
160  getJobQueue() = 0;
161  virtual NodeCache&
162  getTempNodeCache() = 0;
163  virtual CachedSLEs&
164  cachedSLEs() = 0;
165  virtual AmendmentTable&
166  getAmendmentTable() = 0;
167  virtual HashRouter&
168  getHashRouter() = 0;
169  virtual LoadFeeTrack&
170  getFeeTrack() = 0;
171  virtual LoadManager&
172  getLoadManager() = 0;
173  virtual Overlay&
174  overlay() = 0;
175  virtual TxQ&
176  getTxQ() = 0;
177  virtual ValidatorList&
178  validators() = 0;
179  virtual ValidatorSite&
180  validatorSites() = 0;
181  virtual ManifestCache&
182  validatorManifests() = 0;
183  virtual ManifestCache&
184  publisherManifests() = 0;
185  virtual Cluster&
186  cluster() = 0;
187  virtual PeerReservationTable&
188  peerReservations() = 0;
189  virtual RCLValidations&
190  getValidations() = 0;
191  virtual NodeStore::Database&
192  getNodeStore() = 0;
193  virtual NodeStore::DatabaseShard*
194  getShardStore() = 0;
195  virtual RPC::ShardArchiveHandler*
196  getShardArchiveHandler(bool tryRecovery = false) = 0;
197  virtual InboundLedgers&
198  getInboundLedgers() = 0;
199  virtual InboundTransactions&
201 
204 
205  virtual LedgerMaster&
206  getLedgerMaster() = 0;
207  virtual NetworkOPs&
208  getOPs() = 0;
209  virtual OrderBookDB&
210  getOrderBookDB() = 0;
211  virtual TransactionMaster&
212  getMasterTransaction() = 0;
213  virtual perf::PerfLog&
214  getPerfLog() = 0;
215 
216  virtual std::pair<PublicKey, SecretKey> const&
217  nodeIdentity() = 0;
218 
219  virtual PublicKey const&
220  getValidationPublicKey() const = 0;
221 
222  virtual Resource::Manager&
223  getResourceManager() = 0;
224  virtual PathRequests&
225  getPathRequests() = 0;
226  virtual SHAMapStore&
227  getSHAMapStore() = 0;
228  virtual PendingSaves&
229  pendingSaves() = 0;
230  virtual AccountIDCache const&
231  accountIDCache() const = 0;
232  virtual OpenLedger&
233  openLedger() = 0;
234  virtual OpenLedger const&
235  openLedger() const = 0;
236  virtual DatabaseCon&
237  getTxnDB() = 0;
238  virtual DatabaseCon&
239  getLedgerDB() = 0;
240 
242  getIOLatency() = 0;
243 
244  virtual ReportingETL&
245  getReportingETL() = 0;
246 
247  virtual bool
248  serverOkay(std::string& reason) = 0;
249 
250 #ifdef RIPPLED_REPORTING
251  virtual std::shared_ptr<PgPool> const&
252  getPgPool() = 0;
253 #endif
254 
255  virtual beast::Journal
256  journal(std::string const& name) = 0;
257 
258  /* Returns the number of file descriptors the application needs */
259  virtual int
260  fdRequired() const = 0;
261 
263  virtual DatabaseCon&
264  getWalletDB() = 0;
265 
268  virtual LedgerIndex
270 };
271 
276  std::unique_ptr<TimeKeeper> timeKeeper);
277 
278 } // namespace ripple
279 
280 #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:88
ripple::RCLValidationsAdaptor
Generic validations adaptor class for RCL.
Definition: RCLValidations.h:205
ripple::Application
Definition: Application.h:101
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:43
ripple::Application::cluster
virtual Cluster & cluster()=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.
std::shared_ptr
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:72
ripple::Application::getAmendmentTable
virtual AmendmentTable & getAmendmentTable()=0
ripple::Application::isShutdown
virtual bool isShutdown()=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:37
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:46
ripple::PendingSaves
Keeps track of which ledgers haven't been fully saved.
Definition: PendingSaves.h:36
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:52
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:55
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:77
ripple::Application::getLedgerMaster
virtual LedgerMaster & getLedgerMaster()=0
ripple::PublicKey
A public key.
Definition: PublicKey.h:59
ripple::Config
Definition: Config.h:67
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::Application::doStart
virtual void doStart(bool withTimers)=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
ripple::Application::getLedgerDB
virtual DatabaseCon & getLedgerDB()=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:34
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:2278
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:209
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:52
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:39
ripple::Validations
Maintains current and recent ledger validations.
Definition: Application.h:97
mutex
ripple::Application::signalStop
virtual void signalStop()=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::AmendmentTable
The amendment table stores the list of enabled and potential amendments.
Definition: AmendmentTable.h:34
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:2285
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::Application::getTxnDB
virtual DatabaseCon & getTxnDB()=0
ripple::InboundTransactions
Manages the acquisition and lifetime of transaction sets.
Definition: InboundTransactions.h:36
ripple::Application::getMasterTransaction
virtual TransactionMaster & getMasterTransaction()=0