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 LedgerMaster;
66 class LoadManager;
67 class ManifestCache;
68 class ValidatorKeys;
69 class NetworkOPs;
70 class OpenLedger;
71 class OrderBookDB;
72 class Overlay;
73 class PathRequests;
74 class PendingSaves;
75 class PublicKey;
76 class SecretKey;
77 class AccountIDCache;
78 class STLedgerEntry;
79 class TimeKeeper;
80 class TransactionMaster;
81 class TxQ;
82 
83 class ValidatorList;
84 class ValidatorSite;
85 class Cluster;
86 
87 class DatabaseCon;
88 class SHAMapStore;
89 
91 
92 template <class Adaptor>
96 
98 {
99 public:
100  /* VFALCO NOTE
101 
102  The master mutex protects:
103 
104  - The open ledger
105  - Server global state
106  * What the last closed ledger is
107  * State of the consensus engine
108 
109  other things
110  */
112  virtual MutexType&
113  getMasterMutex() = 0;
114 
115 public:
116  Application();
117 
118  virtual ~Application() = default;
119 
120  virtual bool
121  setup() = 0;
122  virtual void
123  doStart(bool withTimers) = 0;
124  virtual void
125  run() = 0;
126  virtual bool
127  isShutdown() = 0;
128  virtual void
129  signalStop() = 0;
130  virtual bool
131  checkSigs() const = 0;
132  virtual void
133  checkSigs(bool) = 0;
134 
135  //
136  // ---
137  //
138 
139  virtual Logs&
140  logs() = 0;
141  virtual Config&
142  config() = 0;
143 
144  virtual boost::asio::io_service&
145  getIOService() = 0;
146 
147  virtual CollectorManager&
148  getCollectorManager() = 0;
149  virtual Family&
150  getNodeFamily() = 0;
151  virtual Family*
152  getShardFamily() = 0;
153  virtual TimeKeeper&
154  timeKeeper() = 0;
155  virtual JobQueue&
156  getJobQueue() = 0;
157  virtual NodeCache&
158  getTempNodeCache() = 0;
159  virtual CachedSLEs&
160  cachedSLEs() = 0;
161  virtual AmendmentTable&
162  getAmendmentTable() = 0;
163  virtual HashRouter&
164  getHashRouter() = 0;
165  virtual LoadFeeTrack&
166  getFeeTrack() = 0;
167  virtual LoadManager&
168  getLoadManager() = 0;
169  virtual Overlay&
170  overlay() = 0;
171  virtual TxQ&
172  getTxQ() = 0;
173  virtual ValidatorList&
174  validators() = 0;
175  virtual ValidatorSite&
176  validatorSites() = 0;
177  virtual ManifestCache&
178  validatorManifests() = 0;
179  virtual ManifestCache&
180  publisherManifests() = 0;
181  virtual Cluster&
182  cluster() = 0;
183  virtual PeerReservationTable&
184  peerReservations() = 0;
185  virtual RCLValidations&
186  getValidations() = 0;
187  virtual NodeStore::Database&
188  getNodeStore() = 0;
189  virtual NodeStore::DatabaseShard*
190  getShardStore() = 0;
191  virtual RPC::ShardArchiveHandler*
192  getShardArchiveHandler(bool tryRecovery = false) = 0;
193  virtual InboundLedgers&
194  getInboundLedgers() = 0;
195  virtual InboundTransactions&
197 
200 
201  virtual LedgerMaster&
202  getLedgerMaster() = 0;
203  virtual NetworkOPs&
204  getOPs() = 0;
205  virtual OrderBookDB&
206  getOrderBookDB() = 0;
207  virtual TransactionMaster&
208  getMasterTransaction() = 0;
209  virtual perf::PerfLog&
210  getPerfLog() = 0;
211 
212  virtual std::pair<PublicKey, SecretKey> const&
213  nodeIdentity() = 0;
214 
215  virtual PublicKey const&
216  getValidationPublicKey() const = 0;
217 
218  virtual Resource::Manager&
219  getResourceManager() = 0;
220  virtual PathRequests&
221  getPathRequests() = 0;
222  virtual SHAMapStore&
223  getSHAMapStore() = 0;
224  virtual PendingSaves&
225  pendingSaves() = 0;
226  virtual AccountIDCache const&
227  accountIDCache() const = 0;
228  virtual OpenLedger&
229  openLedger() = 0;
230  virtual OpenLedger const&
231  openLedger() const = 0;
232  virtual DatabaseCon&
233  getTxnDB() = 0;
234  virtual DatabaseCon&
235  getLedgerDB() = 0;
236 
238  getIOLatency() = 0;
239 
240  virtual bool
241  serverOkay(std::string& reason) = 0;
242 
243  virtual beast::Journal
244  journal(std::string const& name) = 0;
245 
246  /* Returns the number of file descriptors the application needs */
247  virtual int
248  fdRequired() const = 0;
249 
251  virtual DatabaseCon&
252  getWalletDB() = 0;
253 
256  virtual LedgerIndex
258 };
259 
264  std::unique_ptr<TimeKeeper> timeKeeper);
265 
266 } // namespace ripple
267 
268 #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:97
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.
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:54
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::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::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:120
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::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:2188
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:93
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:2195
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