summaryrefslogtreecommitdiff
path: root/cpp/src/IceStorm/TopicManagerI.cpp
diff options
context:
space:
mode:
authorMatthew Newhook <matthew@zeroc.com>2015-03-06 16:35:35 -0330
committerMatthew Newhook <matthew@zeroc.com>2015-03-06 16:35:35 -0330
commitc363f10fd9b8232e78641aa83133a647b1e5ae20 (patch)
tree31e330ec41e3a23d4e92d920289905d8008295c6 /cpp/src/IceStorm/TopicManagerI.cpp
parentAdded missing BerkeleyDB patch. (diff)
downloadice-c363f10fd9b8232e78641aa83133a647b1e5ae20.tar.bz2
ice-c363f10fd9b8232e78641aa83133a647b1e5ae20.tar.xz
ice-c363f10fd9b8232e78641aa83133a647b1e5ae20.zip
ICE-6352 - IceStorm: Topic creation very slow with Ice 3.6?
Diffstat (limited to 'cpp/src/IceStorm/TopicManagerI.cpp')
-rw-r--r--cpp/src/IceStorm/TopicManagerI.cpp46
1 files changed, 19 insertions, 27 deletions
diff --git a/cpp/src/IceStorm/TopicManagerI.cpp b/cpp/src/IceStorm/TopicManagerI.cpp
index 8bfbdc08dbd..b99a73c6eed 100644
--- a/cpp/src/IceStorm/TopicManagerI.cpp
+++ b/cpp/src/IceStorm/TopicManagerI.cpp
@@ -8,7 +8,6 @@
// **********************************************************************
#include <IceUtil/DisableWarnings.h>
-#include <Freeze/Freeze.h>
#include <IceStorm/TopicManagerI.h>
#include <IceStorm/TopicI.h>
#include <IceStorm/TraceLevels.h>
@@ -294,7 +293,8 @@ nameToIdentity(const InstancePtr& instance, const string& name)
}
TopicManagerImpl::TopicManagerImpl(const InstancePtr& instance) :
- _instance(instance)
+ _instance(instance),
+ _connection(Freeze::createConnection(instance->communicator(), instance->serviceName()))
{
try
{
@@ -321,14 +321,14 @@ TopicManagerImpl::TopicManagerImpl(const InstancePtr& instance) :
_sync = _instance->nodeAdapter()->addWithUUID(_syncImpl);
}
- ConnectionPtr connection = Freeze::createConnection(_instance->communicator(), _instance->serviceName());
+
// Ensure that the llu counter is present in the log.
LogUpdate empty = {0, 0};
- putLLU(connection, empty);
+ putLLU(_connection, empty);
// Recreate each of the topics.
- SubscriberMap subscriberMap(connection, subscriberDbName);
+ SubscriberMap subscriberMap(_connection, subscriberDbName);
SubscriberMap::const_iterator p = subscriberMap.begin();
while(p != subscriberMap.end())
{
@@ -387,8 +387,7 @@ TopicManagerImpl::create(const string& name)
{
try
{
- ConnectionPtr connection = Freeze::createConnection(_instance->communicator(), _instance->serviceName());
- TransactionHolder txn(connection);
+ TransactionHolder txn(_connection);
SubscriberRecordKey key;
key.topic = id;
@@ -396,12 +395,12 @@ TopicManagerImpl::create(const string& name)
rec.link = false;
rec.cost = 0;
- SubscriberMap subscriberMap(connection, subscriberDbName);
+ SubscriberMap subscriberMap(_connection, subscriberDbName);
subscriberMap.put(SubscriberMap::value_type(key, rec));
- llu = getLLU(connection);
+ llu = getLLU(_connection);
llu.iteration++;
- putLLU(connection, llu);
+ putLLU(_connection, llu);
txn.commit();
break;
@@ -490,12 +489,11 @@ TopicManagerImpl::observerInit(const LogUpdate& llu, const TopicContentSeq& cont
{
try
{
- ConnectionPtr connection = Freeze::createConnection(_instance->communicator(), _instance->serviceName());
- TransactionHolder txn(connection);
+ TransactionHolder txn(_connection);
- putLLU(connection, llu);
+ putLLU(_connection, llu);
- SubscriberMap subscriberMap(connection, subscriberDbName);
+ SubscriberMap subscriberMap(_connection, subscriberDbName);
subscriberMap.clear();
for(TopicContentSeq::const_iterator p = content.begin(); p != content.end(); ++p)
@@ -593,8 +591,7 @@ TopicManagerImpl::observerCreateTopic(const LogUpdate& llu, const string& name)
{
try
{
- ConnectionPtr connection = Freeze::createConnection(_instance->communicator(), _instance->serviceName());
- TransactionHolder txn(connection);
+ TransactionHolder txn(_connection);
SubscriberRecordKey key;
key.topic = id;
@@ -602,14 +599,14 @@ TopicManagerImpl::observerCreateTopic(const LogUpdate& llu, const string& name)
rec.link = false;
rec.cost = 0;
- SubscriberMap subscriberMap(connection, subscriberDbName);
+ SubscriberMap subscriberMap(_connection, subscriberDbName);
if(subscriberMap.find(key) != subscriberMap.end())
{
throw ObserverInconsistencyException("topic exists: " + name);
}
subscriberMap.put(SubscriberMap::value_type(key, rec));
- putLLU(connection, llu);
+ putLLU(_connection, llu);
txn.commit();
break;
@@ -685,8 +682,6 @@ TopicManagerImpl::getContent(LogUpdate& llu, TopicContentSeq& content)
reap();
}
- ConnectionPtr connection = Freeze::createConnection(_instance->communicator(), _instance->serviceName());
-
for(;;)
{
try
@@ -697,7 +692,7 @@ TopicManagerImpl::getContent(LogUpdate& llu, TopicContentSeq& content)
TopicContent rec = p->second->getContent();
content.push_back(rec);
}
- llu = getLLU(connection);
+ llu = getLLU(_connection);
break;
}
catch(const DeadlockException&)
@@ -714,13 +709,11 @@ TopicManagerImpl::getContent(LogUpdate& llu, TopicContentSeq& content)
LogUpdate
TopicManagerImpl::getLastLogUpdate() const
{
- ConnectionPtr connection = Freeze::createConnection(_instance->communicator(), _instance->serviceName());
-
for(;;)
{
try
{
- return getLLU(connection);
+ return getLLU(_connection);
}
catch(const DeadlockException&)
{
@@ -771,15 +764,14 @@ TopicManagerImpl::initMaster(const set<GroupNodeInfo>& slaves, const LogUpdate&
{
content.clear();
- ConnectionPtr connection = Freeze::createConnection(_instance->communicator(), _instance->serviceName());
- TransactionHolder txn(connection);
+ TransactionHolder txn(_connection);
for(map<string, TopicImplPtr>::const_iterator p = _topics.begin(); p != _topics.end(); ++p)
{
TopicContent rec = p->second->getContent();
content.push_back(rec);
}
- putLLU(connection, llu);
+ putLLU(_connection, llu);
txn.commit();
break;
}