summaryrefslogtreecommitdiff
path: root/cpp/src/IceGrid/DescriptorHelper.cpp
diff options
context:
space:
mode:
authorBenoit Foucher <benoit@zeroc.com>2005-06-15 15:40:54 +0000
committerBenoit Foucher <benoit@zeroc.com>2005-06-15 15:40:54 +0000
commit4bce5651cd3f6feea7b4d5bef1f0cbd5b71fdb4d (patch)
tree3be9a1ef428d87585b4d01e36d62f70bceafa380 /cpp/src/IceGrid/DescriptorHelper.cpp
parentSome project settings cleanup (diff)
downloadice-4bce5651cd3f6feea7b4d5bef1f0cbd5b71fdb4d.tar.bz2
ice-4bce5651cd3f6feea7b4d5bef1f0cbd5b71fdb4d.tar.xz
ice-4bce5651cd3f6feea7b4d5bef1f0cbd5b71fdb4d.zip
Added support for locking the database.
Diffstat (limited to 'cpp/src/IceGrid/DescriptorHelper.cpp')
-rw-r--r--cpp/src/IceGrid/DescriptorHelper.cpp35
1 files changed, 22 insertions, 13 deletions
diff --git a/cpp/src/IceGrid/DescriptorHelper.cpp b/cpp/src/IceGrid/DescriptorHelper.cpp
index aec175bbe13..ad7c1bcc500 100644
--- a/cpp/src/IceGrid/DescriptorHelper.cpp
+++ b/cpp/src/IceGrid/DescriptorHelper.cpp
@@ -648,9 +648,10 @@ ApplicationDescriptorHelper::addServiceTemplate(const std::string& id, const Ice
return auto_ptr<ServiceDescriptorHelper>(new ServiceDescriptorHelper(*this, attrs, id));
}
-void
+ApplicationUpdateDescriptor
ApplicationDescriptorHelper::update(const ApplicationUpdateDescriptor& update)
{
+ ApplicationUpdateDescriptor newUpdate = update;
ApplicationDescriptorPtr newApp = new ApplicationDescriptor();
ApplicationDescriptorPtr oldApp = _descriptor;
_descriptor = newApp;
@@ -659,10 +660,10 @@ ApplicationDescriptorHelper::update(const ApplicationUpdateDescriptor& update)
newApp->name = oldApp->name;
newApp->comment = oldApp->comment;
newApp->targets = oldApp->targets;
- newApp->variables = update.variables;
+ newApp->variables = newUpdate.variables;
newApp->variables.insert(oldApp->variables.begin(), oldApp->variables.end());
Ice::StringSeq::const_iterator p;
- for(p = update.removeVariables.begin(); p != update.removeVariables.end(); ++p)
+ for(p = newUpdate.removeVariables.begin(); p != newUpdate.removeVariables.end(); ++p)
{
newApp->variables.erase(*p);
}
@@ -670,9 +671,9 @@ ApplicationDescriptorHelper::update(const ApplicationUpdateDescriptor& update)
//
// TODO: Check if the new templates are valid?
//
- newApp->serverTemplates = update.serverTemplates;
+ newApp->serverTemplates = newUpdate.serverTemplates;
newApp->serverTemplates.insert(oldApp->serverTemplates.begin(), oldApp->serverTemplates.end());
- for(p = update.removeServerTemplates.begin(); p != update.removeServerTemplates.end(); ++p)
+ for(p = newUpdate.removeServerTemplates.begin(); p != newUpdate.removeServerTemplates.end(); ++p)
{
newApp->serverTemplates.erase(*p);
}
@@ -680,9 +681,9 @@ ApplicationDescriptorHelper::update(const ApplicationUpdateDescriptor& update)
//
// TODO: Check if the new templates are valid?
//
- newApp->serviceTemplates = update.serviceTemplates;
+ newApp->serviceTemplates = newUpdate.serviceTemplates;
newApp->serviceTemplates.insert(oldApp->serviceTemplates.begin(), oldApp->serviceTemplates.end());
- for(p = update.removeServiceTemplates.begin(); p != update.removeServiceTemplates.end(); ++p)
+ for(p = newUpdate.removeServiceTemplates.begin(); p != newUpdate.removeServiceTemplates.end(); ++p)
{
newApp->serviceTemplates.erase(*p);
}
@@ -690,30 +691,31 @@ ApplicationDescriptorHelper::update(const ApplicationUpdateDescriptor& update)
//
// Update the node descriptors.
//
- newApp->nodes = update.nodes;
+ newApp->nodes = newUpdate.nodes;
for(NodeDescriptorSeq::const_iterator q = oldApp->nodes.begin(); q != oldApp->nodes.end(); ++q)
{
NodeDescriptorSeq::const_iterator r;
- for(r = update.nodes.begin(); r != update.nodes.end(); ++r)
+ for(r = newUpdate.nodes.begin(); r != newUpdate.nodes.end(); ++r)
{
if(q->name == r->name)
{
break;
}
}
- if(r == update.nodes.end())
+ if(r == newUpdate.nodes.end())
{
newApp->nodes.push_back(*q);
}
}
newApp->servers.clear();
- for(InstanceDescriptorSeq::const_iterator q = update.servers.begin(); q != update.servers.end(); ++q)
+ for(InstanceDescriptorSeq::iterator q = newUpdate.servers.begin(); q != newUpdate.servers.end(); ++q)
{
- newApp->servers.push_back(instantiate(*q));
+ *q = instantiate(*q);
+ newApp->servers.push_back(*q);
}
- set<string> remove(update.removeServers.begin(), update.removeServers.end());
+ set<string> remove(newUpdate.removeServers.begin(), newUpdate.removeServers.end());
set<string> updated;
for_each(newApp->servers.begin(), newApp->servers.end(), AddServerName(updated));
for(InstanceDescriptorSeq::const_iterator q = oldApp->servers.begin(); q != oldApp->servers.end(); ++q)
@@ -721,9 +723,16 @@ ApplicationDescriptorHelper::update(const ApplicationUpdateDescriptor& update)
InstanceDescriptor inst = instantiate(*q); // Re-instantiate old server.
if(updated.find(inst.descriptor->name) == updated.end() && remove.find(inst.descriptor->name) == remove.end())
{
+ if(ServerDescriptorHelper(*this, ServerDescriptorPtr::dynamicCast(q->descriptor)) !=
+ ServerDescriptorHelper(*this, ServerDescriptorPtr::dynamicCast(inst.descriptor)))
+ {
+ newUpdate.servers.push_back(inst);
+ }
newApp->servers.push_back(inst);
}
}
+
+ return newUpdate;
}
void