Calculate program file directories:

* Determine location of database files in Config
* Inject database directory or file path in PeerFinder and Validators
* PeerFinder and Validators will share the same sqlite file
This commit is contained in:
Nik Bougalis
2014-02-28 09:19:37 -08:00
committed by Vinnie Falco
parent e055dc1513
commit 28c7827f14
9 changed files with 84 additions and 32 deletions

View File

@@ -39,6 +39,7 @@ public:
static Manager* New (
Stoppable& parent,
SiteFiles::Manager& siteFiles,
File const& pathToDbFileOrDirectory,
Callback& callback,
clock_type& clock,
Journal journal);

View File

@@ -30,6 +30,7 @@ class ManagerImp
public:
ServiceQueue m_queue;
SiteFiles::Manager& m_siteFiles;
File m_databaseFile;
clock_type& m_clock;
Journal m_journal;
StoreSqdb m_store;
@@ -43,12 +44,14 @@ public:
ManagerImp (
Stoppable& stoppable,
SiteFiles::Manager& siteFiles,
File const& pathToDbFileOrDirectory,
Callback& callback,
clock_type& clock,
Journal journal)
: Manager (stoppable)
, Thread ("PeerFinder")
, m_siteFiles (siteFiles)
, m_databaseFile (pathToDbFileOrDirectory)
, m_clock (clock)
, m_journal (journal)
, m_store (journal)
@@ -56,6 +59,8 @@ public:
, m_logic (clock, callback, m_store, m_checker, journal)
, m_secondsTimer (this)
{
if (m_databaseFile.isDirectory ())
m_databaseFile = m_databaseFile.getChildFile("peerfinder.sqlite");
}
~ManagerImp ()
@@ -262,15 +267,12 @@ public:
{
m_journal.debug << "Initializing";
File const file (File::getSpecialLocation (
File::userDocumentsDirectory).getChildFile ("PeerFinder.sqlite"));
Error error (m_store.open (file));
Error error (m_store.open (m_databaseFile));
if (error)
{
m_journal.fatal <<
"Failed to open '" << file.getFullPathName() << "'";
"Failed to open '" << m_databaseFile.getFullPathName() << "'";
}
if (! error)
@@ -311,11 +313,13 @@ Manager::Manager (Stoppable& parent)
Manager* Manager::New (
Stoppable& parent,
SiteFiles::Manager& siteFiles,
File const& databaseFile,
Callback& callback,
clock_type& clock,
Journal journal)
{
return new ManagerImp (parent, siteFiles, callback, clock, journal);
return new ManagerImp (parent, siteFiles, databaseFile,
callback, clock, journal);
}
}

View File

@@ -36,9 +36,13 @@ protected:
public:
/** Create a new Manager object.
@param parent The parent Stoppable.
@param pathToDbFileOrDirectory The directory where our database is stored
@param journal Where to send log output.
*/
static Manager* New (Stoppable& stoppableParent, Journal journal);
static Manager* New (
Stoppable& stoppableParent,
File const& pathToDbFileOrDirectory,
Journal journal);
/** Destroy the object.
Any pending source fetch operations are aborted. This will block

View File

@@ -134,6 +134,7 @@ class ManagerImp
{
public:
Journal m_journal;
File m_databaseFile;
StoreSqdb m_store;
Logic m_logic;
DeadlineTimer m_checkTimer;
@@ -149,10 +150,14 @@ public:
//
bool m_checkSources;
ManagerImp (Stoppable& parent, Journal journal)
ManagerImp (
Stoppable& parent,
File const& pathToDbFileOrDirectory,
Journal journal)
: Stoppable ("Validators::Manager", parent)
, Thread ("Validators")
, m_journal (journal)
, m_databaseFile (pathToDbFileOrDirectory)
, m_store (m_journal)
, m_logic (m_store, m_journal)
, m_checkTimer (this)
@@ -164,6 +169,11 @@ public:
"Validators constructed (debug)";
m_journal.info <<
"Validators constructed (info)";
if (m_databaseFile.isDirectory ())
m_databaseFile = m_databaseFile.getChildFile("validators.sqlite");
}
~ManagerImp ()
@@ -306,11 +316,8 @@ public:
void init ()
{
File const file (File::getSpecialLocation (
File::userDocumentsDirectory).getChildFile ("validators.sqlite"));
Error error (m_store.open (m_databaseFile));
Error error (m_store.open (file));
if (! error)
{
m_logic.load ();
@@ -375,9 +382,12 @@ Manager::Manager ()
{
}
Validators::Manager* Validators::Manager::New (Stoppable& parent, Journal journal)
Validators::Manager* Validators::Manager::New (
Stoppable& parent,
File const& pathToDbFileOrDirectory,
Journal journal)
{
return new Validators::ManagerImp (parent, journal);
return new Validators::ManagerImp (parent, pathToDbFileOrDirectory, journal);
}
}

View File

@@ -288,7 +288,9 @@ public:
, m_txQueue (TxQueue::New ())
, m_validators (add (Validators::Manager::New (
*this, LogPartition::getJournal <ValidatorsLog> ())))
*this,
getConfig ().getModuleDatabasePath (),
LogPartition::getJournal <ValidatorsLog> ())))
, mFeatures (IFeatures::New (2 * 7 * 24 * 60 * 60, 200)) // two weeks, 200/256
@@ -685,8 +687,8 @@ public:
//
// if (!getConfig ().RUN_STANDALONE)
m_peers.reset (add (Peers::New (m_mainIoPool, *m_resourceManager,
*m_siteFiles, *m_resolver, m_mainIoPool,
m_peerSSLContext->get ())));
*m_siteFiles, getConfig ().getModuleDatabasePath (),
*m_resolver, m_mainIoPool, m_peerSSLContext->get ())));
// SSL context used for WebSocket connections.
if (getConfig ().WEBSOCKET_SECURE)

View File

@@ -239,6 +239,12 @@ void Config::setup (const std::string& strConf, bool bQuiet)
if (ec)
throw std::runtime_error (boost::str (boost::format ("Can not create %s") % DATA_DIR));
// Create the new unified database
m_moduleDbPath = getDatabaseDir();
if (m_moduleDbPath.isDirectory ())
m_moduleDbPath = m_moduleDbPath.getChildFile("rippled.sqlite");
}
void Config::load ()
@@ -759,6 +765,12 @@ Config::Role Config::getAdminRole (Json::Value const& params, beast::IP::Endpoin
return role;
}
//------------------------------------------------------------------------------
File const& Config::getModuleDatabasePath ()
{
return m_moduleDbPath;
}
//
//
//------------------------------------------------------------------------------

View File

@@ -282,7 +282,20 @@ public:
private:
std::string m_rpcIP;
int m_rpcPort; // VFALCO TODO This should be a short.
private:
/** The folder where new module databases should be located */
File m_moduleDbPath;
public:
//--------------------------------------------------------------------------
/** Returns the location were databases should be located
The location may be a file, in which case databases should be placed in
the file, or it may be a directory, in which cases databases should be
stored in a file named after the module (e.g. "peerfinder.sqlite") that
is inside that directory.
*/
File const& getModuleDatabasePath ();
//--------------------------------------------------------------------------

View File

@@ -66,12 +66,14 @@ protected:
public:
typedef std::vector <Peer::pointer> PeerSequence;
static Peers* New (Stoppable& parent,
static Peers* New (
Stoppable& parent,
Resource::Manager& resourceManager,
SiteFiles::Manager& siteFiles,
Resolver& resolver,
boost::asio::io_service& io_service,
boost::asio::ssl::context& context);
SiteFiles::Manager& siteFiles,
File const& pathToDbFileOrDirectory,
Resolver& resolver,
boost::asio::io_service& io_service,
boost::asio::ssl::context& context);
virtual ~Peers () = 0;

View File

@@ -142,10 +142,11 @@ public:
PeersImp (Stoppable& parent,
Resource::Manager& resourceManager,
SiteFiles::Manager& siteFiles,
Resolver& resolver,
boost::asio::io_service& io_service,
boost::asio::ssl::context& ssl_context)
SiteFiles::Manager& siteFiles,
File const& pathToDbFileOrDirectory,
Resolver& resolver,
boost::asio::io_service& io_service,
boost::asio::ssl::context& ssl_context)
: Peers (parent)
, m_child_count (1)
, m_journal (LogPartition::getJournal <PeersLog> ())
@@ -153,6 +154,7 @@ public:
, m_peerFinder (add (PeerFinder::Manager::New (
*this,
siteFiles,
pathToDbFileOrDirectory,
*this,
get_seconds_clock (),
LogPartition::getJournal <PeerFinderLog> ())))
@@ -600,15 +602,17 @@ Peers::~Peers ()
{
}
Peers* Peers::New (Stoppable& parent,
Peers* Peers::New (
Stoppable& parent,
Resource::Manager& resourceManager,
SiteFiles::Manager& siteFiles,
Resolver& resolver,
boost::asio::io_service& io_service,
boost::asio::ssl::context& ssl_context)
SiteFiles::Manager& siteFiles,
File const& pathToDbFileOrDirectory,
Resolver& resolver,
boost::asio::io_service& io_service,
boost::asio::ssl::context& ssl_context)
{
return new PeersImp (parent, resourceManager, siteFiles,
resolver, io_service, ssl_context);
pathToDbFileOrDirectory, resolver, io_service, ssl_context);
}
}