diff options
author | Benoit Foucher <benoit@zeroc.com> | 2005-06-01 20:51:30 +0000 |
---|---|---|
committer | Benoit Foucher <benoit@zeroc.com> | 2005-06-01 20:51:30 +0000 |
commit | 39b093d060d218b33399f07ca4204d8f1d94e1c5 (patch) | |
tree | 62eed90ec065715522dcdcfada7e618df650c924 /cpp/src | |
parent | fix for bug 349 - moving CustomList into Test subdir (diff) | |
download | ice-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.cpp | 66 | ||||
-rw-r--r-- | cpp/src/IceGrid/AdminI.h | 3 | ||||
-rw-r--r-- | cpp/src/IceGrid/Database.cpp | 2 | ||||
-rw-r--r-- | cpp/src/IceGrid/Parser.cpp | 7 |
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) { |