diff options
author | Benoit Foucher <benoit@zeroc.com> | 2012-11-16 15:52:28 +0100 |
---|---|---|
committer | Benoit Foucher <benoit@zeroc.com> | 2012-11-16 15:52:28 +0100 |
commit | 44bd0c07505a6841f4315eedcab0a228a6819852 (patch) | |
tree | 7e5d08f5beb7941ea68f8659217efd2379e8acc4 /cpp/src/IceGrid/DescriptorHelper.cpp | |
parent | More changes to windows installers (diff) | |
download | ice-44bd0c07505a6841f4315eedcab0a228a6819852.tar.bz2 ice-44bd0c07505a6841f4315eedcab0a228a6819852.tar.xz ice-44bd0c07505a6841f4315eedcab0a228a6819852.zip |
Added support for proxy-options to IceGrid adapter, replica group and object descriptors
Diffstat (limited to 'cpp/src/IceGrid/DescriptorHelper.cpp')
-rw-r--r-- | cpp/src/IceGrid/DescriptorHelper.cpp | 82 |
1 files changed, 77 insertions, 5 deletions
diff --git a/cpp/src/IceGrid/DescriptorHelper.cpp b/cpp/src/IceGrid/DescriptorHelper.cpp index d7c73a7d5b4..89d0360da59 100644 --- a/cpp/src/IceGrid/DescriptorHelper.cpp +++ b/cpp/src/IceGrid/DescriptorHelper.cpp @@ -90,6 +90,10 @@ struct ReplicaGroupEq : std::binary_function<ReplicaGroupDescriptor&, ReplicaGro { return false; } + if(lhs.proxyOptions != rhs.proxyOptions) + { + return false; + } if(set<ObjectDescriptor>(lhs.objects.begin(), lhs.objects.end()) != set<ObjectDescriptor>(rhs.objects.begin(), rhs.objects.end())) { @@ -247,6 +251,28 @@ updateDictElts(const Dict& dict, const Dict& update, const Ice::StringSeq& remov return result; } +void +validateProxyOptions(const Resolver& resolver, const string& proxyOptions) +{ + if(!proxyOptions.empty()) + { + try + { + resolver.getCommunicator()->stringToProxy("dummy " + proxyOptions); + } + catch(const Ice::ProxyParseException& ex) + { + string reason = ex.str; + size_t pos = ex.str.find("dummy "); + if(pos != string::npos) + { + reason = reason.replace(pos, 6, ""); + } + resolver.exception("invalid proxy options: " + reason); + } + } +} + } Resolver::Resolver(const ApplicationDescriptor& app, const Ice::CommunicatorPtr& communicator, bool enableWarning) : @@ -477,7 +503,7 @@ Resolver::operator()(const PropertySetDescriptorDict& propertySets) const } ObjectDescriptorSeq -Resolver::operator()(const ObjectDescriptorSeq& objects, const string& type) const +Resolver::operator()(const ObjectDescriptorSeq& objects, const string& proxyOptions, const string& type) const { ObjectDescriptorSeq result; for(ObjectDescriptorSeq::const_iterator q = objects.begin(); q != objects.end(); ++q) @@ -485,6 +511,15 @@ Resolver::operator()(const ObjectDescriptorSeq& objects, const string& type) con ObjectDescriptor obj; obj.type = operator()(q->type, type + " object type"); obj.id = operator()(q->id, type + " object identity"); + if(!q->proxyOptions.empty()) + { + obj.proxyOptions = IceUtilInternal::trim(operator()(q->proxyOptions, type + " object proxy options")); + } + else if(!proxyOptions.empty()) + { + obj.proxyOptions = IceUtilInternal::trim(operator()(proxyOptions, type + " object proxy options")); + } + validateProxyOptions(*this, obj.proxyOptions); result.push_back(obj); } return result; @@ -731,7 +766,7 @@ Resolver::hasReplicaGroup(const string& id) const if(!_application) { // - // If we don't know the application descrpitor we assume that + // If we don't know the application descriptor we assume that // the replica group exists (this is possible if the resolver // wasn't built from an application helper, that's the case if // it's built from NodeCache just to resolve ${node.*} and @@ -1043,9 +1078,26 @@ CommunicatorHelper::instantiateImpl(const CommunicatorDescriptorPtr& instance, c //resolve.exception("unknown replica group `" + adapter.replicaGroupId + "'"); //} + // Default proxy options to set on object descriptors if none is set. + string proxyOptions = IceGrid::getProperty(instance->propertySet.properties, adapter.name + ".ProxyOptions"); + if(proxyOptions.empty()) + { + string encoding; + if(resolve.getVersion() > 0 && resolve.getVersion() < 30500) + { + encoding = "1.0"; + } + else + { + encoding = "1.1"; + } + encoding = IceGrid::getProperty(instance->propertySet.properties, "Ice.Default.EncodingVersion", encoding); + proxyOptions = "-e " + encoding; + } + adapter.priority = resolve.asInt(p->priority, "object adapter priority"); - adapter.objects = resolve(p->objects, "well-known"); - adapter.allocatables = resolve(p->allocatables, "allocatable"); + adapter.objects = resolve(p->objects, proxyOptions, "well-known"); + adapter.allocatables = resolve(p->allocatables, proxyOptions, "allocatable"); instance->adapters.push_back(adapter); // @@ -1094,6 +1146,7 @@ CommunicatorHelper::print(const Ice::CommunicatorPtr& communicator, Output& out) for(AdapterDescriptorSeq::const_iterator p = _desc->adapters.begin(); p != _desc->adapters.end(); ++p) { hiddenProperties.insert(p->name + ".Endpoints"); + hiddenProperties.insert(p->name + ".ProxyOptions"); printObjectAdapter(communicator, out, *p); } } @@ -1178,6 +1231,11 @@ CommunicatorHelper::printObjectAdapter(const Ice::CommunicatorPtr& communicator, { out << nl << "endpoints = `" << endpoints << "'"; } + string proxyOptions = getProperty(adapter.name + ".ProxyOptions"); + if(!proxyOptions.empty()) + { + out << nl << "proxy options = `" << proxyOptions << "'"; + } out << nl << "register process = `" << (adapter.registerProcess ? "true" : "false") << "'"; out << nl << "server lifetime = `" << (adapter.serverLifetime ? "true" : "false") << "'"; for(ObjectDescriptorSeq::const_iterator p = adapter.objects.begin(); p != adapter.objects.end(); ++p) @@ -1189,6 +1247,10 @@ CommunicatorHelper::printObjectAdapter(const Ice::CommunicatorPtr& communicator, { out << nl << "type = `" << p->type << "'"; } + if(!p->proxyOptions.empty()) + { + out << nl << "proxy options = `" << p->proxyOptions << "'"; + } out << eb; } for(ObjectDescriptorSeq::const_iterator p = adapter.allocatables.begin(); p != adapter.allocatables.end(); ++p) @@ -1200,6 +1262,10 @@ CommunicatorHelper::printObjectAdapter(const Ice::CommunicatorPtr& communicator, { out << nl << "type = `" << p->type << "'"; } + if(!p->proxyOptions.empty()) + { + out << nl << "proxy options = `" << p->proxyOptions << "'"; + } out << eb; } if(!adapter.description.empty()) @@ -2512,7 +2578,9 @@ ApplicationHelper::ApplicationHelper(const Ice::CommunicatorPtr& communicator, ReplicaGroupDescriptor desc; desc.id = resolve.asId(r->id, "replica group id", false); desc.description = resolve(r->description, "replica group description"); - desc.objects = resolve(r->objects, "replica group well-known"); + desc.proxyOptions = resolve(r->proxyOptions, "replica group proxy options"); + validateProxyOptions(resolve, desc.proxyOptions); + desc.objects = resolve(r->objects, r->proxyOptions, "replica group well-known"); if(!r->loadBalancing) { resolve.exception("replica group load balancing is not set"); @@ -2947,6 +3015,10 @@ ApplicationHelper::print(Output& out, const ApplicationInfo& info) const { out << "<unknown load balancing policy>"; } + if(!p->proxyOptions.empty()) + { + out << nl << "proxy options = `" << p->proxyOptions << "'"; + } out << "'"; } out << eb; |