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