summaryrefslogtreecommitdiff
path: root/cpp/src/IcePack/AdapterManagerI.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/IcePack/AdapterManagerI.cpp')
-rw-r--r--cpp/src/IcePack/AdapterManagerI.cpp90
1 files changed, 73 insertions, 17 deletions
diff --git a/cpp/src/IcePack/AdapterManagerI.cpp b/cpp/src/IcePack/AdapterManagerI.cpp
index 13c0bf73e26..2fb9890d81c 100644
--- a/cpp/src/IcePack/AdapterManagerI.cpp
+++ b/cpp/src/IcePack/AdapterManagerI.cpp
@@ -13,6 +13,7 @@
#include <Freeze/Evictor.h>
#include <IcePack/AdapterManagerI.h>
#include <IcePack/ServerManager.h>
+#include <IcePack/TraceLevels.h>
using namespace std;
using namespace Ice;
@@ -48,7 +49,9 @@ class AdapterFactory : public ObjectFactory
{
public:
- AdapterFactory(int waitTime) : _waitTime(waitTime)
+ AdapterFactory(const TraceLevelsPtr& traceLevels, int waitTime) :
+ _traceLevels(traceLevels),
+ _waitTime(waitTime)
{
}
@@ -59,7 +62,7 @@ public:
create(const std::string& type)
{
assert(type == "::IcePack::Adapter");
- return new AdapterI(_waitTime);
+ return new AdapterI(_traceLevels, _waitTime);
}
virtual void
@@ -69,12 +72,14 @@ public:
private:
+ TraceLevelsPtr _traceLevels;
int _waitTime;
};
}
-IcePack::AdapterI::AdapterI(Int waitTime) :
+IcePack::AdapterI::AdapterI(const TraceLevelsPtr& traceLevels, Int waitTime) :
+ _traceLevels(traceLevels),
_waitTime(waitTime),
_active(false)
{
@@ -104,20 +109,39 @@ IcePack::AdapterI::getDirectProxy(bool activate, const Current&)
// If there's a server associated to this adapter, try to start
// the server and wait for the adapter state to change.
//
- if(description.server && description.server->start())
+ if(description.server)
{
- //
- // Wait for this adapter to be marked as active or the
- // activation timeout.
- //
- while(!_active)
+ if(_traceLevels->adapterMgr > 2)
+ {
+ Ice::Trace out(_traceLevels->logger, _traceLevels->adapterMgrCat);
+ out << "waiting for activation of adapter `" << description.name << "'";
+ }
+
+ if(description.server->start())
{
- bool notify = timedWait(IceUtil::Time::seconds(_waitTime));
- if(!notify)
+ //
+ // Wait for this adapter to be marked as active or the
+ // activation timeout.
+ //
+ while(!_active)
{
- throw AdapterActivationTimeoutException();
+ bool notify = timedWait(IceUtil::Time::seconds(_waitTime));
+ if(!notify)
+ {
+ if(_traceLevels->adapterMgr > 1)
+ {
+ Ice::Trace out(_traceLevels->logger, _traceLevels->adapterMgrCat);
+ out << "adapter `" << description.name << "' activation timed out";
+ }
+ throw AdapterActivationTimeoutException();
+ }
}
}
+ else if(_traceLevels->adapterMgr > 1)
+ {
+ Ice::Trace out(_traceLevels->logger, _traceLevels->adapterMgrCat);
+ out << "adapter `" << description.name << "' activation failed, couldn't start the server";
+ }
}
return proxy;
@@ -135,6 +159,13 @@ IcePack::AdapterI::markAsActive(const Current&)
{
::IceUtil::Monitor< ::IceUtil::Mutex>::Lock sync(*this);
_active = true;
+
+ if(_traceLevels->adapterMgr > 1)
+ {
+ Ice::Trace out(_traceLevels->logger, _traceLevels->adapterMgrCat);
+ out << "adapter `" << description.name << "' activated";
+ }
+
notifyAll();
}
@@ -143,21 +174,30 @@ IcePack::AdapterI::markAsInactive(const Current&)
{
::IceUtil::Monitor< ::IceUtil::Mutex>::Lock sync(*this);
_active = false;
+
+ if(_traceLevels->adapterMgr > 1)
+ {
+ Ice::Trace out(_traceLevels->logger, _traceLevels->adapterMgrCat);
+ out << "adapter `" << description.name << "' deactivated";
+ }
+
notifyAll();
}
-IcePack::AdapterManagerI::AdapterManagerI(const ObjectAdapterPtr& adapter, const Freeze::DBEnvironmentPtr& dbEnv) :
- _adapter(adapter)
+IcePack::AdapterManagerI::AdapterManagerI(const ObjectAdapterPtr& adapter, const TraceLevelsPtr& traceLevels,
+ const Freeze::DBEnvironmentPtr& dbEnv) :
+ _adapter(adapter),
+ _traceLevels(traceLevels)
{
Ice::PropertiesPtr properties = adapter->getCommunicator()->getProperties();
_waitTime = properties->getPropertyAsIntWithDefault("IcePack.Activation.WaitTime", 60);
- ObjectFactoryPtr adapterFactory = new AdapterFactory(_waitTime);
+ ObjectFactoryPtr adapterFactory = new AdapterFactory(_traceLevels, _waitTime);
adapter->getCommunicator()->addObjectFactory(adapterFactory, "::IcePack::Adapter");
Freeze::DBPtr dbAdapters = dbEnv->openDB("adapters", true);
_evictor = dbAdapters->createEvictor(Freeze::SaveUponEviction);
- _evictor->setSize(100);
+ _evictor->setSize(1000);
_adapter->addServantLocator(_evictor, "adapter");
//
@@ -174,6 +214,10 @@ IcePack::AdapterManagerI::AdapterManagerI(const ObjectAdapterPtr& adapter, const
}
}
+IcePack::AdapterManagerI::~AdapterManagerI()
+{
+}
+
AdapterPrx
IcePack::AdapterManagerI::create(const AdapterDescription& description, const Current&)
{
@@ -193,7 +237,7 @@ IcePack::AdapterManagerI::create(const AdapterDescription& description, const Cu
{
}
- AdapterPtr adapterI = new AdapterI(_waitTime);
+ AdapterPtr adapterI = new AdapterI(_traceLevels, _waitTime);
adapterI->description = description;
adapterI->proxy = 0;
@@ -204,6 +248,12 @@ IcePack::AdapterManagerI::create(const AdapterDescription& description, const Cu
_evictor->createObject(adapter->ice_getIdentity(), adapterI);
+ if(_traceLevels->adapterMgr > 0)
+ {
+ Ice::Trace out(_traceLevels->logger, _traceLevels->adapterMgrCat);
+ out << "added adapter `" << description.name << "'";
+ }
+
return adapter;
}
@@ -243,6 +293,12 @@ IcePack::AdapterManagerI::remove(const string& name, const Current&)
// Remove the adapter name from our internal name set.
//
_adapterNames.erase(_adapterNames.find(name));
+
+ if(_traceLevels->adapterMgr > 0)
+ {
+ Ice::Trace out(_traceLevels->logger, _traceLevels->adapterMgrCat);
+ out << "removed adapter `" << name << "'";
+ }
}
AdapterNames