diff options
Diffstat (limited to 'cpp/src/IceStorm/Instance.cpp')
-rw-r--r-- | cpp/src/IceStorm/Instance.cpp | 55 |
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) { |