summaryrefslogtreecommitdiff
path: root/cpp/src
diff options
context:
space:
mode:
authorBenoit Foucher <benoit@zeroc.com>2005-06-01 20:51:30 +0000
committerBenoit Foucher <benoit@zeroc.com>2005-06-01 20:51:30 +0000
commit39b093d060d218b33399f07ca4204d8f1d94e1c5 (patch)
tree62eed90ec065715522dcdcfada7e618df650c924 /cpp/src
parentfix for bug 349 - moving CustomList into Test subdir (diff)
downloadice-39b093d060d218b33399f07ca4204d8f1d94e1c5.tar.bz2
ice-39b093d060d218b33399f07ca4204d8f1d94e1c5.tar.xz
ice-39b093d060d218b33399f07ca4204d8f1d94e1c5.zip
Added method to update application servers/templates/etc.
Diffstat (limited to 'cpp/src')
-rw-r--r--cpp/src/IceGrid/AdminI.cpp66
-rw-r--r--cpp/src/IceGrid/AdminI.h3
-rw-r--r--cpp/src/IceGrid/Database.cpp2
-rw-r--r--cpp/src/IceGrid/Parser.cpp7
4 files changed, 73 insertions, 5 deletions
diff --git a/cpp/src/IceGrid/AdminI.cpp b/cpp/src/IceGrid/AdminI.cpp
index 9f6252c15cb..63acd4643f2 100644
--- a/cpp/src/IceGrid/AdminI.cpp
+++ b/cpp/src/IceGrid/AdminI.cpp
@@ -11,6 +11,7 @@
#include <IceGrid/AdminI.h>
#include <IceGrid/RegistryI.h>
#include <IceGrid/Database.h>
+#include <IceGrid/Util.h>
#include <IceGrid/DescriptorHelper.h>
#include <Ice/LoggerUtil.h>
#include <Ice/TraceUtil.h>
@@ -40,12 +41,75 @@ AdminI::addApplication(const ApplicationDescriptorPtr& descriptor, const Current
}
void
-AdminI::updateApplication(const ApplicationDescriptorPtr& descriptor, const Current&)
+AdminI::syncApplication(const ApplicationDescriptorPtr& descriptor, const Current&)
{
_database->updateApplicationDescriptor(descriptor);
}
void
+AdminI::updateApplication(const ApplicationUpdateDescriptor& descriptor, const Current&)
+{
+ ApplicationDescriptorPtr oldApp = _database->getApplicationDescriptor(descriptor.name);
+
+ ApplicationDescriptorPtr newApp = new ApplicationDescriptor();
+ newApp->name = oldApp->name;
+ newApp->comment = oldApp->comment;
+ newApp->targets = oldApp->targets;
+ newApp->variables = descriptor.variables;
+ newApp->variables.insert(oldApp->variables.begin(), oldApp->variables.end());
+ StringSeq::const_iterator p;
+ for(p = descriptor.removeVariables.begin(); p != descriptor.removeVariables.end(); ++p)
+ {
+ newApp->variables.erase(*p);
+ }
+
+ newApp->serverTemplates = descriptor.serverTemplates;
+ newApp->serverTemplates.insert(oldApp->serverTemplates.begin(), oldApp->serverTemplates.end());
+ for(p = descriptor.removeServerTemplates.begin(); p != descriptor.removeServerTemplates.end(); ++p)
+ {
+ newApp->serverTemplates.erase(*p);
+ }
+
+ newApp->serviceTemplates = descriptor.serviceTemplates;
+ newApp->serviceTemplates.insert(oldApp->serviceTemplates.begin(), oldApp->serviceTemplates.end());
+ for(p = descriptor.removeServiceTemplates.begin(); p != descriptor.removeServiceTemplates.end(); ++p)
+ {
+ newApp->serviceTemplates.erase(*p);
+ }
+
+ newApp->servers = descriptor.servers;
+ set<string> remove(descriptor.removeServers.begin(), descriptor.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)
+ {
+ if(updated.find(q->descriptor->name) == updated.end() && remove.find(q->descriptor->name) == remove.end())
+ {
+ newApp->servers.push_back(*q);
+ }
+ }
+
+ newApp->nodes = descriptor.nodes;
+ for(NodeDescriptorSeq::const_iterator q = oldApp->nodes.begin(); q != oldApp->nodes.end(); ++q)
+ {
+ NodeDescriptorSeq::const_iterator r;
+ for(r = descriptor.nodes.begin(); r != descriptor.nodes.end(); ++r)
+ {
+ if(q->name == r->name)
+ {
+ break;
+ }
+ }
+ if(r == descriptor.nodes.end())
+ {
+ newApp->nodes.push_back(*q);
+ }
+ }
+
+ _database->updateApplicationDescriptor(newApp);
+}
+
+void
AdminI::removeApplication(const string& name, const Current&)
{
_database->removeApplicationDescriptor(name);
diff --git a/cpp/src/IceGrid/AdminI.h b/cpp/src/IceGrid/AdminI.h
index 16f412b8d44..b2320cfbb74 100644
--- a/cpp/src/IceGrid/AdminI.h
+++ b/cpp/src/IceGrid/AdminI.h
@@ -26,7 +26,8 @@ public:
virtual ~AdminI();
virtual void addApplication(const ApplicationDescriptorPtr&, const Ice::Current&);
- virtual void updateApplication(const ApplicationDescriptorPtr&, const Ice::Current&);
+ virtual void syncApplication(const ApplicationDescriptorPtr&, const Ice::Current&);
+ virtual void updateApplication(const ApplicationUpdateDescriptor&, const Ice::Current&);
virtual void removeApplication(const std::string&, const Ice::Current&);
virtual ApplicationDescriptorPtr getApplicationDescriptor(const ::std::string&, const Ice::Current&) const;
virtual void instantiateServer(const std::string&, const std::string&, const std::string&, const StringStringDict&,
diff --git a/cpp/src/IceGrid/Database.cpp b/cpp/src/IceGrid/Database.cpp
index 58580a3bd0b..dbd3c058a65 100644
--- a/cpp/src/IceGrid/Database.cpp
+++ b/cpp/src/IceGrid/Database.cpp
@@ -403,7 +403,7 @@ Database::updateApplicationDescriptor(const ApplicationDescriptorPtr& newDesc)
if(_traceLevels->application > 0)
{
Ice::Trace out(_traceLevels->logger, _traceLevels->applicationCat);
- out << "updated application `" << newDesc->name << "'";
+ out << "synced application `" << newDesc->name << "'";
}
for_each(entries.begin(), entries.end(), IceUtil::voidMemFun(&Database::ServerEntry::sync));
diff --git a/cpp/src/IceGrid/Parser.cpp b/cpp/src/IceGrid/Parser.cpp
index 2d4feb1d44c..114569ebd2b 100644
--- a/cpp/src/IceGrid/Parser.cpp
+++ b/cpp/src/IceGrid/Parser.cpp
@@ -857,7 +857,7 @@ Parser::updateApplication(const list<string>& args)
}
}
- _admin->updateApplication(DescriptorParser::parseDescriptor(descriptor, targets, vars, _communicator));
+ _admin->syncApplication(DescriptorParser::parseDescriptor(descriptor, targets, vars, _communicator));
}
catch(const IceXML::ParserException& ex)
{
@@ -1135,7 +1135,10 @@ Parser::addServer(const list<string>& args)
}
}
- _admin->addServer(DescriptorParser::parseDescriptor(descriptor, targets, vars, _communicator));
+ //
+ // TODO
+ //
+ //_admin->addServer(DescriptorParser::parseDescriptor(descriptor, targets, vars, _communicator));
}
catch(const DeploymentException& ex)
{