diff options
author | Benoit Foucher <benoit@zeroc.com> | 2005-07-13 14:24:51 +0000 |
---|---|---|
committer | Benoit Foucher <benoit@zeroc.com> | 2005-07-13 14:24:51 +0000 |
commit | 24abfcd7a2c568bc556d244cf4c89660511a2cab (patch) | |
tree | 6ea87a0e4f3d89b78ab00e51598786d5722c645c /cpp/src | |
parent | Added chat demo (diff) | |
download | ice-24abfcd7a2c568bc556d244cf4c89660511a2cab.tar.bz2 ice-24abfcd7a2c568bc556d244cf4c89660511a2cab.tar.xz ice-24abfcd7a2c568bc556d244cf4c89660511a2cab.zip |
Changed server descriptor attributse to be strings to allow the use of
variables
Diffstat (limited to 'cpp/src')
-rw-r--r-- | cpp/src/IceGrid/DescriptorHelper.cpp | 38 | ||||
-rw-r--r-- | cpp/src/IceGrid/Internal.ice | 2 | ||||
-rw-r--r-- | cpp/src/IceGrid/NodeI.cpp | 4 | ||||
-rw-r--r-- | cpp/src/IceGrid/Parser.cpp | 4 | ||||
-rw-r--r-- | cpp/src/IceGrid/ServerI.cpp | 31 | ||||
-rw-r--r-- | cpp/src/IceGrid/ServerI.h | 6 |
6 files changed, 65 insertions, 20 deletions
diff --git a/cpp/src/IceGrid/DescriptorHelper.cpp b/cpp/src/IceGrid/DescriptorHelper.cpp index 32b396fc0ee..18398e16d17 100644 --- a/cpp/src/IceGrid/DescriptorHelper.cpp +++ b/cpp/src/IceGrid/DescriptorHelper.cpp @@ -1359,13 +1359,13 @@ ServerDescriptorHelper::ServerDescriptorHelper(const DescriptorHelper& helper, c _descriptor->exe = attributes("exe"); } _descriptor->interpreter = interpreter; - _descriptor->activationTimeout = attributes.asInt("activation-timeout", "0"); - _descriptor->deactivationTimeout = attributes.asInt("deactivation-timeout", "0"); + _descriptor->activationTimeout = attributes("activation-timeout", "0"); + _descriptor->deactivationTimeout = attributes("deactivation-timeout", "0"); ComponentDescriptorHelper::init(_descriptor, attrs); _descriptor->pwd = attributes("pwd", ""); - _descriptor->activation = (attributes("activation", "manual") == "on-demand") ? OnDemand : Manual; + _descriptor->activation = attributes("activation", "manual"); if(interpreter == "icebox" || interpreter == "java-icebox") { @@ -1646,6 +1646,38 @@ ServerDescriptorHelper::instantiateImpl(const ServerDescriptorPtr& desc, set<str substitute(desc->exe); substitute(desc->pwd); + substitute(desc->activation); + if(!desc->activation.empty() && desc->activation != "manual" && desc->activation != "on-demand") + { + DeploymentException ex; + ex.reason = "invalid server `" + desc->name + "': unknown activation `" + desc->activation + "'"; + throw ex; + } + substitute(desc->activationTimeout); + if(!desc->activationTimeout.empty()) + { + int value; + istringstream v(desc->activationTimeout); + if(!(v >> value)) + { + DeploymentException ex; + ex.reason = "invalid server `" + desc->name + "': activation timeout is not an integer value"; + throw ex; + } + } + substitute(desc->deactivationTimeout); + if(!desc->deactivationTimeout.empty()) + { + int value; + istringstream v(desc->deactivationTimeout); + if(!(v >> value)) + { + DeploymentException ex; + ex.reason = "invalid server `" + desc->name + "': deactivation timeout is not an integer value"; + throw ex; + } + } + for_each(desc->options.begin(), desc->options.end(), substitute); for_each(desc->envs.begin(), desc->envs.end(), substitute); substitute(desc->interpreter); diff --git a/cpp/src/IceGrid/Internal.ice b/cpp/src/IceGrid/Internal.ice index e368854ba6e..56ae9960be8 100644 --- a/cpp/src/IceGrid/Internal.ice +++ b/cpp/src/IceGrid/Internal.ice @@ -107,7 +107,7 @@ interface Server * Load the server. * **/ - void load(ServerDescriptor desc, out StringAdapterPrxDict adapters) + void load(ServerDescriptor desc, out StringAdapterPrxDict adapters, out int actTimeout, out int deactTimeout) throws DeploymentException; /** diff --git a/cpp/src/IceGrid/NodeI.cpp b/cpp/src/IceGrid/NodeI.cpp index 718afd6031b..92f63823d8d 100644 --- a/cpp/src/IceGrid/NodeI.cpp +++ b/cpp/src/IceGrid/NodeI.cpp @@ -66,9 +66,7 @@ NodeI::loadServer(const ServerDescriptorPtr& desc, servant = new ServerI(this, proxy, _serversDir, desc->name, _waitTime); current.adapter->add(servant, id); } - activationTimeout = desc->activationTimeout > 0 ? desc->activationTimeout : _waitTime; - deactivationTimeout = desc->deactivationTimeout > 0 ? desc->deactivationTimeout : _waitTime; - proxy->load(desc, adapters); + proxy->load(desc, adapters, activationTimeout, deactivationTimeout); return proxy; } diff --git a/cpp/src/IceGrid/Parser.cpp b/cpp/src/IceGrid/Parser.cpp index 2412dc974b4..7a44e8504a7 100644 --- a/cpp/src/IceGrid/Parser.cpp +++ b/cpp/src/IceGrid/Parser.cpp @@ -179,11 +179,11 @@ describeServer(Output& out, const Ice::CommunicatorPtr& communicator, const Serv out << nl << "pwd = '" << server->pwd << "'"; } out << nl << "activation = '" << server->activation << "'"; - if(server->activationTimeout > 0) + if(!server->activationTimeout.empty() && server->activationTimeout != "0") { out << nl << "activationTimeout = " << server->activationTimeout; } - if(server->deactivationTimeout > 0) + if(!server->deactivationTimeout.empty() && server->deactivationTimeout != "0") { out << nl << "deactivationTimeout = " << server->deactivationTimeout; } diff --git a/cpp/src/IceGrid/ServerI.cpp b/cpp/src/IceGrid/ServerI.cpp index 0c8d293df6a..724d2e6da1f 100644 --- a/cpp/src/IceGrid/ServerI.cpp +++ b/cpp/src/IceGrid/ServerI.cpp @@ -83,7 +83,8 @@ ServerI::~ServerI() } void -ServerI::load(const ServerDescriptorPtr& descriptor, StringAdapterPrxDict& adapters, const Ice::Current& current) +ServerI::load(const ServerDescriptorPtr& descriptor, StringAdapterPrxDict& adapters, int& activationTimeout, + int& deactivationTimeout, const Ice::Current& current) { while(true) { @@ -102,7 +103,7 @@ ServerI::load(const ServerDescriptorPtr& descriptor, StringAdapterPrxDict& adapt // try { - update(descriptor, adapters, current); + update(descriptor, adapters, activationTimeout, deactivationTimeout, current); } catch(const string& msg) { @@ -499,8 +500,7 @@ ServerI::startInternal(ServerActivation act, const AMD_Server_startPtr& amdCB) else { Lock sync(*this); - int timeout = _desc->activationTimeout > 0 ? _desc->activationTimeout : _waitTime; - _node->getWaitQueue()->add(new WaitForActivationItem(this), IceUtil::Time::seconds(timeout)); + _node->getWaitQueue()->add(new WaitForActivationItem(this), IceUtil::Time::seconds(_activationTimeout)); setStateNoSync(ServerI::WaitForActivation); checkActivation(); notifyAll(); @@ -705,8 +705,7 @@ ServerI::stopInternal(bool kill, const Ice::Current& current) // // Wait for a notification. // - int timeout = _desc->deactivationTimeout > 0 ? _desc->deactivationTimeout : _waitTime; - bool notify = timedWait(IceUtil::Time::seconds(timeout)); + bool notify = timedWait(IceUtil::Time::seconds(_deactivationTimeout)); if(!notify) { assert(oldState == _state); @@ -840,12 +839,26 @@ ServerI::setStateNoSync(InternalServerState st) } void -ServerI::update(const ServerDescriptorPtr& descriptor, StringAdapterPrxDict& adapters, const Ice::Current& current) +ServerI::update(const ServerDescriptorPtr& descriptor, StringAdapterPrxDict& adapters, int& activationTimeout, + int& deactivationTimeout, const Ice::Current& current) { _desc = descriptor; _serverDir = _serversDir + "/" + descriptor->name; - _activation = descriptor->activation; - + _activation = descriptor->activation == "on-demand" ? OnDemand : Manual; + + istringstream at(_desc->activationTimeout); + if(!(at >> _activationTimeout) || !at.eof() || _activationTimeout == 0) + { + _activationTimeout = _waitTime; + } + istringstream dt(_desc->deactivationTimeout); + if(!(dt >> _deactivationTimeout) || !dt.eof() || _deactivationTimeout == 0) + { + _deactivationTimeout = _waitTime; + } + activationTimeout = _activationTimeout; + deactivationTimeout = _deactivationTimeout; + // // Make sure the server directories exists. // diff --git a/cpp/src/IceGrid/ServerI.h b/cpp/src/IceGrid/ServerI.h index fbf5cbef083..71120cd7ae7 100644 --- a/cpp/src/IceGrid/ServerI.h +++ b/cpp/src/IceGrid/ServerI.h @@ -43,7 +43,7 @@ public: ServerI(const NodeIPtr&, const ServerPrx&, const std::string&, const std::string&, int); virtual ~ServerI(); - virtual void load(const ServerDescriptorPtr&, StringAdapterPrxDict&, const Ice::Current&); + virtual void load(const ServerDescriptorPtr&, StringAdapterPrxDict&, int&, int&, const Ice::Current&); virtual void start_async(const AMD_Server_startPtr&, const ::Ice::Current&); virtual void stop(const ::Ice::Current&); virtual void sendSignal(const std::string&, const ::Ice::Current&); @@ -72,7 +72,7 @@ private: void setState(InternalServerState); void setStateNoSync(InternalServerState); - void update(const ServerDescriptorPtr&, StringAdapterPrxDict&, const Ice::Current&); + void update(const ServerDescriptorPtr&, StringAdapterPrxDict&, int&, int&, const Ice::Current&); AdapterPrx addAdapter(const AdapterDescriptor&, const Ice::Current&); void updateConfigFile(const std::string&, const ComponentDescriptorPtr&); void updateDbEnv(const std::string&, const DbEnvDescriptor&); @@ -89,6 +89,8 @@ private: ServerDescriptorPtr _desc; InternalServerState _state; ServerActivation _activation; + int _activationTimeout; + int _deactivationTimeout; std::map<std::string, ServerAdapterIPtr> _adapters; bool _processRegistered; Ice::ProcessPrx _process; |