summaryrefslogtreecommitdiff
path: root/cpp/src/IceStorm/Instance.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/IceStorm/Instance.cpp')
-rw-r--r--cpp/src/IceStorm/Instance.cpp55
1 files changed, 50 insertions, 5 deletions
diff --git a/cpp/src/IceStorm/Instance.cpp b/cpp/src/IceStorm/Instance.cpp
index ede677c70d3..1b4fd57ac17 100644
--- a/cpp/src/IceStorm/Instance.cpp
+++ b/cpp/src/IceStorm/Instance.cpp
@@ -22,6 +22,12 @@
using namespace std;
using namespace IceStorm;
using namespace IceStormElection;
+using namespace IceStormInternal;
+
+namespace IceStormInternal
+{
+extern IceDB::IceContext dbContext;
+}
void
TopicReaper::add(const string& name)
@@ -39,6 +45,50 @@ TopicReaper::consumeReapedTopics()
return reaped;
}
+PersistentInstance::PersistentInstance(
+ const string& instanceName,
+ const string& name,
+ const Ice::CommunicatorPtr& communicator,
+ const Ice::ObjectAdapterPtr& publishAdapter,
+ const Ice::ObjectAdapterPtr& topicAdapter,
+ const Ice::ObjectAdapterPtr& nodeAdapter,
+ const NodePrx& nodeProxy) :
+ Instance(instanceName, name, communicator, publishAdapter, topicAdapter, nodeAdapter, nodeProxy),
+ _dbLock(communicator->getProperties()->getPropertyWithDefault(name + ".LMDB.Path", name) + "/icedb.lock"),
+ _dbEnv(communicator->getProperties()->getPropertyWithDefault(name + ".LMDB.Path", name), 2,
+ IceDB::getMapSize(communicator->getProperties()->getPropertyAsInt(name + ".LMDB.MapSize")))
+{
+ try
+ {
+ dbContext.communicator = communicator;
+ dbContext.encoding.minor = 1;
+ dbContext.encoding.major = 1;
+
+ IceDB::ReadWriteTxn txn(_dbEnv);
+
+ _lluMap = LLUMap(txn, "llu", dbContext, MDB_CREATE);
+ _subscriberMap = SubscriberMap(txn, "subscribers", dbContext, MDB_CREATE, compareSubscriberRecordKey);
+
+ txn.commit();
+ }
+ catch(...)
+ {
+ shutdown();
+ destroy();
+
+ throw;
+ }
+}
+
+void
+PersistentInstance::destroy()
+{
+ _dbEnv.close();
+ dbContext.communicator = 0;
+
+ Instance::destroy();
+}
+
Instance::Instance(
const string& instanceName,
const string& name,
@@ -124,11 +174,6 @@ Instance::Instance(
__setNoDelete(false);
}
-Instance::~Instance()
-{
- //cout << "~Instance" << endl;
-}
-
void
Instance::setNode(const NodeIPtr& node)
{