diff --git a/Builds/VisualStudio2012/RippleD.vcxproj b/Builds/VisualStudio2012/RippleD.vcxproj index edc2dd367..2e59fb83b 100644 --- a/Builds/VisualStudio2012/RippleD.vcxproj +++ b/Builds/VisualStudio2012/RippleD.vcxproj @@ -31,7 +31,7 @@ true true - + true true true @@ -1343,7 +1343,7 @@ - + diff --git a/Builds/VisualStudio2012/RippleD.vcxproj.filters b/Builds/VisualStudio2012/RippleD.vcxproj.filters index 374dc3ef2..7d9942303 100644 --- a/Builds/VisualStudio2012/RippleD.vcxproj.filters +++ b/Builds/VisualStudio2012/RippleD.vcxproj.filters @@ -855,10 +855,10 @@ [1] Ripple\ripple_app\node - + [1] Ripple\ripple_app\node - + [1] Ripple\ripple_app\node @@ -1605,10 +1605,10 @@ [1] Ripple\ripple_app\_data - + [1] Ripple\ripple_app\node - + [1] Ripple\ripple_app\node diff --git a/modules/ripple_app/node/ripple_HSBELevelDB.h b/modules/ripple_app/node/ripple_HSBELevelDB.h index 8623ac58d..7abf10f99 100644 --- a/modules/ripple_app/node/ripple_HSBELevelDB.h +++ b/modules/ripple_app/node/ripple_HSBELevelDB.h @@ -1,7 +1,7 @@ #ifndef HSBELEVELDB_H #define HSBELEVELDB_H -class HSBELevelDB : public HashStoreBE +class HSBELevelDB : public NodeStore::Backend { public: HSBELevelDB(std::string const& path); diff --git a/modules/ripple_app/node/ripple_HSBESqlite.h b/modules/ripple_app/node/ripple_HSBESqlite.h index 267f993ef..cd0945700 100644 --- a/modules/ripple_app/node/ripple_HSBESqlite.h +++ b/modules/ripple_app/node/ripple_HSBESqlite.h @@ -1,7 +1,7 @@ #ifndef HSBESQLITE_H #define HSBESQLITE_H -class HSBESQLite : public HashStoreBE +class HSBESQLite : public NodeStore::Backend { public: HSBESQLite(std::string const& path); diff --git a/modules/ripple_app/node/ripple_HashStoreBE.h b/modules/ripple_app/node/ripple_HashStoreBE.h index 7f46598bb..4f74278e4 100644 --- a/modules/ripple_app/node/ripple_HashStoreBE.h +++ b/modules/ripple_app/node/ripple_HashStoreBE.h @@ -1,31 +1,10 @@ +//------------------------------------------------------------------------------ +/* + Copyright (c) 2011-2013, OpenCoin, Inc. +*/ +//============================================================================== + #ifndef RIPPLE_HASHSTOREBE_H #define RIPPLE_HASHSTOREBE_H -/** Back end for storing objects indexed by 256-bit hash -*/ -class HashStoreBE -{ -public: - typedef boost::shared_ptr pointer; - - HashStoreBE() { ; } - virtual ~HashStoreBE() { ; } - - virtual std::string getBackEndName() = 0; - virtual std::string getDataBaseName() = 0; - - // Store/retrieve a single object - // These functions must be thread safe - virtual bool store(NodeObject::ref) = 0; - virtual NodeObject::pointer retrieve(uint256 const &hash) = 0; - - // Store a group of objects - // This function will only be called from a single thread - virtual bool bulkStore(const std::vector< NodeObject::pointer >&) = 0; - - // Visit every object in the database - // This function will only be called during an import operation - virtual void visitAll(FUNCTION_TYPE) = 0; -}; - #endif diff --git a/modules/ripple_app/node/ripple_NodeObject.h b/modules/ripple_app/node/ripple_NodeObject.h index 2a5444864..b889666f4 100644 --- a/modules/ripple_app/node/ripple_NodeObject.h +++ b/modules/ripple_app/node/ripple_NodeObject.h @@ -4,10 +4,10 @@ */ //============================================================================== -#ifndef RIPPLE_HASHEDOBJECT_H -#define RIPPLE_HASHEDOBJECT_H +#ifndef RIPPLE_NODEOBJECT_H_INCLUDED +#define RIPPLE_NODEOBJECT_H_INCLUDED -/** The types of hashed objects. +/** The types of node objects. */ enum NodeObjectType { @@ -29,11 +29,7 @@ enum NodeObjectType @note No checking is performed to make sure the hash matches the data. @see SHAMap */ -// VFALCO TODO consider making the instance a private member of SHAMap -// since its the primary user. -// -class NodeObject - : public CountedObject +class NodeObject : public CountedObject { public: static char const* getCountedObjectName () { return "NodeObject"; } @@ -85,4 +81,3 @@ private: }; #endif -// vim:ts=4 diff --git a/modules/ripple_app/node/ripple_HashedObjectStore.cpp b/modules/ripple_app/node/ripple_NodeStore.cpp similarity index 93% rename from modules/ripple_app/node/ripple_HashedObjectStore.cpp rename to modules/ripple_app/node/ripple_NodeStore.cpp index 8772db405..e8aa1f90a 100644 --- a/modules/ripple_app/node/ripple_HashedObjectStore.cpp +++ b/modules/ripple_app/node/ripple_NodeStore.cpp @@ -4,8 +4,8 @@ */ //============================================================================== -HashedObjectStore::HashedObjectStore (int cacheSize, int cacheAge) : - mCache ("HashedObjectStore", cacheSize, cacheAge), mNegativeCache ("HashedObjectNegativeCache", 0, 120), +NodeStore::NodeStore (int cacheSize, int cacheAge) : + mCache ("NodeStore", cacheSize, cacheAge), mNegativeCache ("HashedObjectNegativeCache", 0, 120), mWriteGeneration (0), mWriteLoad (0), mWritePending (false), mLevelDB (false), mEphemeralDB (false) { mWriteSet.reserve (128); @@ -24,13 +24,13 @@ HashedObjectStore::HashedObjectStore (int cacheSize, int cacheAge) : mEphemeralDB = true; } -void HashedObjectStore::tune (int size, int age) +void NodeStore::tune (int size, int age) { mCache.setTargetSize (size); mCache.setTargetAge (age); } -void HashedObjectStore::waitWrite () +void NodeStore::waitWrite () { boost::mutex::scoped_lock sl (mWriteMutex); int gen = mWriteGeneration; @@ -39,14 +39,14 @@ void HashedObjectStore::waitWrite () mWriteCondition.wait (sl); } -int HashedObjectStore::getWriteLoad () +int NodeStore::getWriteLoad () { boost::mutex::scoped_lock sl (mWriteMutex); return std::max (mWriteLoad, static_cast (mWriteSet.size ())); } // low-level retrieve -NodeObject::pointer HashedObjectStore::LLRetrieve (uint256 const& hash, leveldb::DB* db) +NodeObject::pointer NodeStore::LLRetrieve (uint256 const& hash, leveldb::DB* db) { std::string sData; @@ -68,7 +68,7 @@ NodeObject::pointer HashedObjectStore::LLRetrieve (uint256 const& hash, leveldb: } // low-level write single -void HashedObjectStore::LLWrite (boost::shared_ptr ptr, leveldb::DB* db) +void NodeStore::LLWrite (boost::shared_ptr ptr, leveldb::DB* db) { NodeObject& obj = *ptr; Blob rawData (9 + obj.getData ().size ()); @@ -91,7 +91,7 @@ void HashedObjectStore::LLWrite (boost::shared_ptr ptr, leveldb::DB* } // low-level write set -void HashedObjectStore::LLWrite (const std::vector< boost::shared_ptr >& set, leveldb::DB* db) +void NodeStore::LLWrite (const std::vector< boost::shared_ptr >& set, leveldb::DB* db) { leveldb::WriteBatch batch; @@ -119,7 +119,7 @@ void HashedObjectStore::LLWrite (const std::vector< boost::shared_ptr importDB (new SqliteDatabase (file.c_str ())); diff --git a/modules/ripple_app/node/ripple_HashedObjectStore.h b/modules/ripple_app/node/ripple_NodeStore.h similarity index 57% rename from modules/ripple_app/node/ripple_HashedObjectStore.h rename to modules/ripple_app/node/ripple_NodeStore.h index d27816ba7..ae232d7f3 100644 --- a/modules/ripple_app/node/ripple_HashedObjectStore.h +++ b/modules/ripple_app/node/ripple_NodeStore.h @@ -4,16 +4,63 @@ */ //============================================================================== -#ifndef RIPPLE_HASHEDOBJECTSTORE_H -#define RIPPLE_HASHEDOBJECTSTORE_H +#ifndef RIPPLE_NODESTORE_H_INCLUDED +#define RIPPLE_NODESTORE_H_INCLUDED -/** Persistency layer for hashed objects. +/** Persistency layer for NodeObject */ // VFALCO TODO Move all definitions to the .cpp -class HashedObjectStore : LeakChecked +class NodeStore : LeakChecked { public: - HashedObjectStore (int cacheSize, int cacheAge); + /** Back end used for the store. + */ + class Backend + { + public: + // VFALCO TODO Remove this, the backend should not be a shared + // object it should be ScopedPointer owned. + // + typedef boost::shared_ptr pointer; + + Backend() { ; } + virtual ~Backend() { ; } + + virtual std::string getDataBaseName() = 0; + + // Store/retrieve a single object + // These functions must be thread safe + virtual bool store(NodeObject::ref) = 0; + virtual NodeObject::pointer retrieve(uint256 const &hash) = 0; + + // Store a group of objects + // This function will only be called from a single thread + virtual bool bulkStore(const std::vector< NodeObject::pointer >&) = 0; + + // Visit every object in the database + // This function will only be called during an import operation + virtual void visitAll(FUNCTION_TYPE) = 0; + }; + +public: + /** Factory to produce backends. + */ + class BackendFactory + { + public: + virtual ~BackendFactory () { } + + /** Retrieve the name of this factory. + */ + virtual String getName () const = 0; + + /** Create an instance of this factory's backend. + */ + virtual Backend* createInstance (HashMap const& keyValueParameters); + }; + +public: + NodeStore (int cacheSize, int cacheAge); bool isLevelDB () { @@ -85,4 +132,3 @@ private: }; #endif -// vim:ts=4 diff --git a/modules/ripple_app/ripple_app.cpp b/modules/ripple_app/ripple_app.cpp index 5e3f5fb45..a23b5b9e8 100644 --- a/modules/ripple_app/ripple_app.cpp +++ b/modules/ripple_app/ripple_app.cpp @@ -95,7 +95,7 @@ namespace ripple #include "src/cpp/ripple/ripple_DBInit.h" #include "node/ripple_NodeObject.h" -#include "node/ripple_HashedObjectStore.h" +#include "node/ripple_NodeStore.h" #include "node/ripple_HashStoreBE.h" #include "node/ripple_HSBELevelDB.h" #include "node/ripple_HSBESqlite.h" @@ -236,7 +236,7 @@ static const uint64 tenTo17m1 = tenTo17 - 1; #include "basics/ripple_RPCServerHandler.cpp" #include "node/ripple_NodeObject.cpp" -#include "node/ripple_HashedObjectStore.cpp" +#include "node/ripple_NodeStore.cpp" #include "node/ripple_HSBELevelDB.cpp" #include "node/ripple_HSBESqlite.cpp" diff --git a/src/cpp/ripple/ripple_Application.cpp b/src/cpp/ripple/ripple_Application.cpp index 363e4e64e..c4795e8ee 100644 --- a/src/cpp/ripple/ripple_Application.cpp +++ b/src/cpp/ripple/ripple_Application.cpp @@ -63,7 +63,7 @@ public: return mTempNodeCache; } - HashedObjectStore& getHashedObjectStore () + NodeStore& getHashedObjectStore () { return mHashedObjectStore; } @@ -223,7 +223,7 @@ private: NetworkOPs mNetOps; RPCServerHandler m_rpcServerHandler; NodeCache mTempNodeCache; - HashedObjectStore mHashedObjectStore; + NodeStore mHashedObjectStore; SLECache mSLECache; SNTPClient mSNTPClient; JobQueue mJobQueue; diff --git a/src/cpp/ripple/ripple_IApplication.h b/src/cpp/ripple/ripple_IApplication.h index d75d430b1..741453719 100644 --- a/src/cpp/ripple/ripple_IApplication.h +++ b/src/cpp/ripple/ripple_IApplication.h @@ -17,7 +17,7 @@ class IProofOfWorkFactory; class UniqueNodeList; class IValidations; -class HashedObjectStore; +class NodeStore; class JobQueue; class InboundLedgers; class LedgerMaster; @@ -68,7 +68,7 @@ public: virtual UniqueNodeList& getUNL () = 0; virtual IValidations& getValidations () = 0; - virtual HashedObjectStore& getHashedObjectStore () = 0; + virtual NodeStore& getHashedObjectStore () = 0; virtual JobQueue& getJobQueue () = 0; virtual InboundLedgers& getInboundLedgers () = 0; virtual LedgerMaster& getLedgerMaster () = 0;