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;