diff options
author | Bernard Normier <bernard@zeroc.com> | 2007-11-20 09:16:56 -0500 |
---|---|---|
committer | Bernard Normier <bernard@zeroc.com> | 2007-11-20 09:16:56 -0500 |
commit | 470bb86bfbd42b20758cdc64a80393e2aac64749 (patch) | |
tree | b24232d1df8a3efb6882ed80f20b32cb0a325cdc /cpp | |
parent | Missing Windows makefile (diff) | |
parent | Removed makprops.py from remove files list (diff) | |
download | ice-470bb86bfbd42b20758cdc64a80393e2aac64749.tar.bz2 ice-470bb86bfbd42b20758cdc64a80393e2aac64749.tar.xz ice-470bb86bfbd42b20758cdc64a80393e2aac64749.zip |
Merge branch 'master' of cvs:/home/git/ice
Diffstat (limited to 'cpp')
-rwxr-xr-x | cpp/config/PropertyNames.xml | 579 | ||||
-rwxr-xr-x | cpp/config/makeprops.py | 634 | ||||
-rwxr-xr-x | cpp/iceslmakedist.py | 2 | ||||
-rw-r--r-- | cpp/src/Ice/PropertyNames.cpp | 3 | ||||
-rw-r--r-- | cpp/src/Ice/PropertyNames.h | 2 | ||||
-rw-r--r-- | cpp/src/IceGrid/NodeI.cpp | 28 | ||||
-rw-r--r-- | cpp/src/IceGrid/NodeI.h | 4 | ||||
-rw-r--r-- | cpp/src/IceGrid/ServerAdapterI.cpp | 20 | ||||
-rw-r--r-- | cpp/test/IceGrid/replication/AllTests.cpp | 6 |
9 files changed, 37 insertions, 1241 deletions
diff --git a/cpp/config/PropertyNames.xml b/cpp/config/PropertyNames.xml deleted file mode 100755 index 6f62e69307d..00000000000 --- a/cpp/config/PropertyNames.xml +++ /dev/null @@ -1,579 +0,0 @@ -<?xml version="1.0"?> -<!-- -********************************************************************** - -Copyright (c) 2003-2007 ZeroC, Inc. All rights reserved. - -This copy of Ice is licensed to you under the terms described in the -ICE_LICENSE file included in this distribution. - -********************************************************************** - -This file defines the valid properties that are used by various Ice -components. It is used to generate source code using the makeprops.py -utility, so we do not need to redundantly maintain the same property -definitions in several languages (and risk having them go out of sync). - -The root node has zero or more section elements. Section elements must -have a name attribute that defines a "section label". Section elements -may also have a noCmdLine attribute. If noCmdLine has the value "true", -command line options that match the section label are not parsed by -Ice::PropertiesI::parseCommandLineOptions(). If noCmdLine has a value -other than "true" or is omitted, Ice::PropertiesI::parseCommandLineOptions() -processes properties that match the respective section name. - -Each root node may also have zero or more class elements. A class -element has a name attribute, a prefix-only attribute and zero or more -suffix elements. Suffix elements appear similar to the property elements -found in the property sections. How classes are used is described below. - -Each section node has zero or more property elements. Property elements -must have a name attribute. Property elements may also have a property -class attribute. The property class attribute allows you to define a -list of properties that are repeatedly defined for different property -categories. Here's how it works: - - - Define a property class with the list of property suffixes common to - that class. - - - Include the class attribute in a property declaration. - -The generated code will take each property that has a class attribute -and expand it by creating new properties for each suffix in the -specified class. The new property names are constructed as follows: - -generated property name = - relevant section name + - property name containing the class attribute + - the suffix in the class. - -Let's illustrate by comparing a case using classes vs. without -classes: - - <class name="proxy" prefix-only="false"> - <suffix name="EndpointSelection" /> - <suffix name="ConnectionCached" /> - <suffix name="PreferSecure" /> - <suffix name="LocatorCacheTimeout" /> - <suffix name="Locator" /> - <suffix name="Router" /> - <suffix name="CollocationOptimization" deprecated="true" - deprecatedBy="CollocationOptimized" /> - <suffix name="CollocationOptimized" /> - <suffix name="ThreadPerConnection" /> - </class> - . - . - . - <section name="Ice"> - <property name="Default.Locator" class="proxy" /> - </section> - -This definition is equivalent to the following: - - <section name="Ice"> - <property name="Default.Locator" /> - <property name="Default.Locator.EndpointSelection" /> - <property name="Default.Locator.ConnectionCached" /> - <property name="Default.Locator.PreferSecure" /> - <property name="Default.Locator.LocatorCacheTimeout" /> - <property name="Default.Locator.Locator" /> - <property name="Default.Locator.Router" /> - <property name="Default.Locator.CollocationOptimization" - deprecatedBy="Ice.Default.Locator.CollocationOptimized" /> - <property name="Default.Locator.CollocationOptimized" /> - <property name="Default.Locator.ThreadPerConnection" /> - </section> - -The benefit is that several categories have the same properties because -they are the same `type' of property. Without a property class, changes -to a supported type of property require modifying the file in several -locations, e.g.: - - <section name="Ice"> - <property name="Default.Router" class="proxy" /> - <property name="Default.Locator" class="proxy" /> - </section> - -Notice the `prefix-only' attribute on the property class node. If -prefix-only is set to true the property containing the property class -works as a prefix and place holder; code isn't actually generated for -the property itself. When set to false, properties are expanded as -described above `in addition to' the property containing the property -class. - -Property elements may also include the deprecated and deprecatedBy -attributes. A property that has a deprecated attribute with the value -"true" will be marked internally as deprecated and Ice may issue warnings -if a deprecated property is used. The deprecatedBy attribute allows the -Ice run time to transparently replace the deprecated property name with a -new property name that supersedes the deprecated property. - -The "deprecatedBy" attribute is currently treated differently when used -in a property class. In the regular property list, deprecatedBy is treated -as an absolute property name and does not prepend the section name or -substring of the property being deprecated. This is not useful for property -classes. When using deprecatedBy in property classes, the deprecatedBy value -is appended to a string constructed from the current section name and the -name attribute in the property list containing the class attributed. For -example: - -<class name="proxy"> - ... - <suffix name="CollocationOptimization" deprecatedBy="CollocationOptimized" /> - <suffix name="CollocationOptimized" /> -</class> - -<properties> - <section name="Ice"> - <property name="Default.Locator" class="proxy" /> - ... - </section> -</properties> - -This definition is equivalent to the following: - -<properties> - <section name="Ice"> - <property name="DefaultLocator.CollocationOptimization" - deprecatedBy="Ice.DefaultLocator.CollocationOptimized" /> - <property name="DefaultLocator.CollocationOptimized" /> - ... - </section> -</properties> - -Property element name attributes have some additional syntax: The token -"<any>" (denoted in valid XML as [any]) is a wildcard and matches any -non-empty sequence of non-whitespace characters. - -Examples: - -"Ice.Foo.<any>" allows all properties with that prefix, such as "Ice.Foo.Bar". -"Ice.Foo<any>" allows properties such as "Ice.Foo.Bar" and "Ice.FooBar". - -Property definitions are translated into each language by makeprops.py. -For example, consider the following definitions: - - <properties> - <section name="Ice"> - <property name="ChangeUser" /> - <property name="Package.[any]" /> - <property name="QuenchRequests" deprecated="true" /> - <property name="Foo" deprecated="true" deprecatedBy="Bar" /> - <property name="Bar" /> - <property name="Default.Locator" proxy="true" /> - <property name="ThreadPool.Client" threadpool="true" /> - </section> - <section name="IceBox"> - <property name="LoadOrder" /> - </section> - </properties> - -If the source file is called Properties.xml, makeprops.py generates -code similar to the following for the C++ header and source file: - -// -// Properties.h -// -namespace IceInternal -{ - -// -// ... definitions for IceInternal::Property and IceInternal::PropertyArray -// omitted... - -class Properties -{ -public: - - static const PropertyArray const IceProps; - static const PropertyArray const IceBoxProps; - - static const PropertyArray validProps[]; -}; - -} - -// Properties.cpp -const IceInternal::Property IceInternal::Properties::IcePropsData[] = -{ - IceInternal::Property("Ice.ChangeUser", false, 0), - IceInternal::Property("Ice.Package.*", false, 0), - IceInternal::Property("Ice.QuenchRequests", true, 0), - IceInternal::Property("Ice.Foo", true, "Ice.Bar"), - IceInternal::Property("Ice.Bar", false, 0), - IceInternal::Property("Ice.Default.Locator", false, 0), - IceInternal::Property("Ice.Default.Locator.EndpointSelection", false, 0), - IceInternal::Property("Ice.Default.Locator.ConnectionCached", false, 0), - IceInternal::Property("Ice.Default.Locator.PreferSecure", false, 0), - IceInternal::Property("Ice.Default.Locator.LocatorCacheTimeout", false, 0), - IceInternal::Property("Ice.Default.Locator.Locator", false, 0), - IceInternal::Property("Ice.Default.Locator.Router", false, 0), - IceInternal::Property("Ice.Default.Locator.CollocationOptimization", false, 0), - IceInternal::Property("Ice.Default.Locator.ThreadPerConnection", false, 0), - IceInternal::Property("Ice.ThreadPool.Client.Size", false, 0), - IceInternal::Property("Ice.ThreadPool.Client.SizeMax", false, 0), - IceInternal::Property("Ice.ThreadPool.Client.SizeWarn", false, 0), - IceInternal::Property("Ice.ThreadPool.Client.StackSize", false, 0) -}; - -const IceInternal::PropertyArray - IceInternal::Properties::IceProps(IcePropsData, sizeof(IcePropsData) / - sizeof(IcePropsData[0])); - -const IceInternal::Property IceInternal::Properties::IceBoxPropsData[] = -{ - IceInternal::Property("IceBox.LoadOrder", false, 0) -}; - -const IceInternal::PropertyArray - IceInternal::Properties::IceBoxProps(IceBoxPropsData, sizeof(IceBoxPropsData) / - sizeof(IceBoxPropsData[0])); - -const PropertyArray IceInternal::Properties::validProps[] = -{ - IceProps, - IceBoxProps, - IceInternal::PropertyArray(0, 0) -}; - -Note that the class name ("Properties" in this example) is generated -from the file name, and the first component of the property name is -generated from the section label. - ---> -<properties> - <class name="proxy" prefix-only="false"> - <suffix name="EndpointSelection" /> - <suffix name="ConnectionCached" /> - <suffix name="PreferSecure" /> - <suffix name="LocatorCacheTimeout" /> - <suffix name="Locator" /> - <suffix name="Router" /> - <suffix name="CollocationOptimization" deprecated="true" deprecatedBy="CollocationOptimized" /> - <suffix name="CollocationOptimized" /> - <suffix name="ThreadPerConnection" /> - </class> - - <class name="threadpool" prefix-only="true"> - <suffix name="Size" /> - <suffix name="SizeMax" /> - <suffix name="SizeWarn" /> - <suffix name="StackSize" /> - </class> - - <class name="objectadapter" prefix-only="true"> - <suffix name="AdapterId" /> - <suffix name="Endpoints" /> - <suffix name="Locator" /> - <suffix name="PublishedEndpoints" /> - <suffix name="RegisterProcess" deprecated="true" /> - <suffix name="ReplicaGroupId" /> - <suffix name="Router" /> - <suffix name="ThreadPerConnection" /> - <suffix name="ThreadPerConnection.StackSize" /> - <suffix name="ThreadPool" class="threadpool" /> - </class> - - <class name="deprecatedthreadpool" prefix-only="true"> - <suffix name="Size" deprecated="true" /> - <suffix name="SizeMax" deprecated="true" /> - <suffix name="SizeWarn" deprecated="true" /> - <suffix name="StackSize" deprecated="true" /> - </class> - - <class name="deprecatedobjectadapter" prefix-only="true"> - <suffix name="AdapterId" deprecated="true" /> - <suffix name="Endpoints" deprecated="true" /> - <suffix name="Locator" deprecated="true" /> - <suffix name="PublishedEndpoints" deprecated="true" /> - <suffix name="RegisterProcess" deprecated="true" /> - <suffix name="ReplicaGroupId" deprecated="true" /> - <suffix name="Router" deprecated="true" /> - <suffix name="ThreadPerConnection" deprecated="true" /> - <suffix name="ThreadPerConnection.StackSize" deprecated="true"/> - <suffix name="ThreadPool" class="deprecatedthreadpool"/> - </class> - - <section name="Ice"> - <property name="ACM.Client" /> - <property name="ACM.Server" /> - <property name="Admin" class="objectadapter" /> - <property name="Admin.DelayCreation" /> - <property name="Admin.Facets" /> - <property name="Admin.InstanceName" /> - <property name="Admin.ServerId" /> - <property name="BatchAutoFlush" /> - <property name="ChangeUser" /> - <property name="Compression.Level" /> - <property name="Config" /> - <property name="Default.CollocationOptimization" deprecated="true" - deprecatedBy="Ice.Default.CollocationOptimized" /> - <property name="Default.CollocationOptimized" /> - <property name="Default.EndpointSelection" /> - <property name="Default.Host" /> - <property name="Default.Locator" class="proxy" /> - <property name="Default.LocatorCacheTimeout" /> - <property name="Default.Package" /> - <property name="Default.PreferSecure" /> - <property name="Default.Protocol" /> - <property name="Default.Router" class="proxy" /> - <property name="EventLog.Source" /> - <property name="GC.Interval" /> - <property name="ImplicitContext" /> - <property name="InitPlugins" /> - <property name="MessageSizeMax" /> - <property name="MonitorConnections" /> - <property name="Nohup" /> - <property name="NullHandleAbort" /> - <property name="Override.Compress" /> - <property name="Override.ConnectTimeout" /> - <property name="Override.Timeout" /> - <property name="Override.Secure" /> - <property name="Package.[any]" /> - <property name="Plugin.[any]" /> - <property name="PluginLoadOrder" /> - <property name="PrintAdapterReady" /> - <property name="PrintProcessId" /> - <property name="ProgramName" /> - <property name="RetryIntervals" /> - <property name="ServerId" deprecated="true" /> - <property name="ServerIdleTime" /> - <property name="StdErr" /> - <property name="StdOut" /> - <property name="ThreadPerConnection" /> - <property name="ThreadPerConnection.StackSize" /> - <property name="ThreadPool.Client" class="threadpool" /> - <property name="ThreadPool.Server" class="threadpool" /> - <property name="Trace.GC" /> - <property name="Trace.Location" deprecated="true" deprecatedBy="Ice.Trace.Locator" /> - <property name="Trace.Locator" /> - <property name="Trace.Network" /> - <property name="Trace.Protocol" /> - <property name="Trace.Retry" /> - <property name="Trace.Slicing" /> - <property name="UDP.RcvSize" /> - <property name="UDP.SndSize" /> - <property name="TCP.RcvSize" /> - <property name="TCP.SndSize" /> - <property name="UseSyslog" /> - <property name="Warn.AMICallback" /> - <property name="Warn.Connections" /> - <property name="Warn.Datagrams" /> - <property name="Warn.Dispatch" /> - <property name="Warn.Endpoints" /> - <property name="Warn.UnknownProperties" /> - <property name="Warn.UnusedProperties" /> - <property name="CacheMessageBuffers" /> - </section> - - <section name="IceBox"> - <property name="InstanceName" /> - <property name="LoadOrder" /> - <property name="PrintServicesReady" /> - <property name="Service.[any]" /> - <property name="ServiceManager" class="objectadapter" /> - <property name="UseSharedCommunicator.[any]" /> - <property name="InheritProperties" /> - </section> - - <section name="IceBoxAdmin"> - <property name="ServiceManager.Proxy" class="proxy"/> - </section> - - <section name="IceGridAdmin"> - <property name="AuthenticateUsingSSL" /> - <property name="Username" /> - <property name="Password" /> - <property name="Replica" /> - <property name="Trace.Observers" /> - <property name="Trace.SaveToRegistry" /> - </section> - - <section name="IceGrid"> - <property name="InstanceName" /> - <property name="Node" class="objectadapter" /> - <property name="Node.AllowRunningServersAsRoot" /> - <property name="Node.CollocateRegistry" /> - <property name="Node.Data" /> - <property name="Node.DisableOnFailure" /> - <property name="Node.Name" /> - <property name="Node.Output" /> - <property name="Node.PrintServersReady" /> - <property name="Node.PropertiesOverride" /> - <property name="Node.RedirectErrToOut" /> - <property name="Node.Trace.Activator" /> - <property name="Node.Trace.Adapter" /> - <property name="Node.Trace.Patch" /> - <property name="Node.Trace.Replica" /> - <property name="Node.Trace.Server" /> - <property name="Node.UserAccounts" /> - <property name="Node.UserAccountMapper" class="proxy" /> - <property name="Node.WaitTime" /> - <property name="Registry.AdminCryptPasswords" /> - <property name="Registry.AdminPermissionsVerifier" class="proxy" /> - <property name="Registry.AdminSessionFilters" /> - <property name="Registry.AdminSSLPermissionsVerifier" class="proxy" /> - <property name="Registry.Client" class="objectadapter" /> - <property name="Registry.CryptPasswords" /> - <property name="Registry.Data" /> - <property name="Registry.DefaultTemplates" /> - <property name="Registry.DynamicRegistration" /> - <property name="Registry.Internal" class="objectadapter" /> - <property name="Registry.NodeSessionTimeout" /> - <property name="Registry.PermissionsVerifier" class="proxy" /> - <property name="Registry.ReplicaName" /> - <property name="Registry.ReplicaSessionTimeout" /> - <property name="Registry.Server" class="objectadapter" /> - <property name="Registry.SessionFilters" /> - <property name="Registry.SessionManager" class="objectadapter" /> - <property name="Registry.SessionTimeout" /> - <property name="Registry.SSLPermissionsVerifier" class="proxy" /> - <property name="Registry.Trace.Application" /> - <property name="Registry.Trace.Adapter" /> - <property name="Registry.Trace.Locator" /> - <property name="Registry.Trace.Node" /> - <property name="Registry.Trace.Object" /> - <property name="Registry.Trace.Patch" /> - <property name="Registry.Trace.Replica" /> - <property name="Registry.Trace.Server" /> - <property name="Registry.Trace.Session" /> - <property name="Registry.UserAccounts" /> - </section> - - <section name="IcePatch2"> - <property class="objectadapter" /> - <property name="Admin" class="deprecatedobjectadapter" /> - <property name="ChunkSize" /> - <property name="Directory" /> - <property name="InstanceName" /> - <property name="Remove" /> - <property name="Thorough" /> - </section> - - <section name="IceSSL"> - <property name="Alias" /> - <property name="CertAuthDir" /> - <property name="CertAuthFile" /> - <property name="CertFile" /> - <property name="CertVerifier" /> - <property name="CheckCertName" /> - <property name="CheckCRL" /> - <property name="Ciphers" /> - <property name="DefaultDir" /> - <property name="DH.[any]" /> - <property name="EntropyDaemon" /> - <property name="FindCert.[any]" /> - <property name="ImportCert.[any]" /> - <property name="KeyFile" /> - <property name="Keystore" /> - <property name="KeystorePassword" /> - <property name="KeystoreType" /> - <property name="Password" /> - <property name="PasswordCallback" /> - <property name="PasswordRetryMax" /> - <property name="Protocols" /> - <property name="Random" /> - <property name="Trace.Security" /> - <property name="Truststore" /> - <property name="TruststorePassword" /> - <property name="TruststoreType" /> - <property name="VerifyDepthMax" /> - <property name="VerifyPeer" /> - <property name="TrustOnly" /> - <property name="TrustOnly.Client" /> - <property name="TrustOnly.Server" /> - <property name="TrustOnly.Server.[any]" /> - </section> - - <section name="IceStormAdmin"> - <property name="TopicManager.[any]" /> - </section> - - <section name="IceStorm"> - <property name="Flush.Timeout" /> - <property name="InstanceName" /> - <property name="Publish" class="objectadapter" /> - <property name="TopicManager" class="objectadapter" /> - <property name="TopicManager.Proxy" class="proxy" /> - <property name="SubscriberPool" class="threadpool" /> - <property name="Trace.Flush" /> - <property name="Trace.Subscriber" /> - <property name="Trace.SubscriberPool" /> - <property name="Trace.Topic" /> - <property name="Trace.TopicManager" /> - <property name="Send.Timeout" /> - <property name="Discard.Interval" /> - </section> - - <section name="Glacier2"> - <property name="AddSSLContext" /> - <property name="AddUserToAllowCategories" deprecated="true" - deprecatedBy="Glacier2.Filter.Category.AcceptUser" /> - <property name="Admin" class="deprecatedobjectadapter" /> - <property name="AllowCategories" deprecated="true" deprecatedBy="Glacier2.Filter.Category.Accept" /> - <property name="Client" class="objectadapter"/> - <property name="Client.AlwaysBatch" /> - <property name="Client.Buffered" /> - <property name="Client.ForwardContext" /> - <property name="Client.SleepTime" /> - <property name="Client.Trace.Override" /> - <property name="Client.Trace.Reject" /> - <property name="Client.Trace.Request" /> - <property name="Filter.Address.Reject" /> - <property name="Filter.Address.Accept" /> - <property name="Filter.ProxySizeMax" /> - <property name="Filter.Category.Accept" /> - <property name="Filter.Category.AcceptUser" /> - <property name="Filter.AdapterId.Accept" /> - <property name="Filter.Identity.Accept" /> - <property name="CryptPasswords" /> - <property name="InstanceName" /> - <property name="PermissionsVerifier" class="proxy" /> - <property name="ReturnClientProxy" /> - <property name="SSLPermissionsVerifier" class="proxy" /> - <property name="RoutingTable.MaxSize" /> - <property name="Server" class="objectadapter" /> - <property name="Server.AlwaysBatch" /> - <property name="Server.Buffered" /> - <property name="Server.ForwardContext" /> - <property name="Server.SleepTime" /> - <property name="Server.Trace.Override" /> - <property name="Server.Trace.Request" /> - <property name="SessionManager" class="proxy" /> - <property name="SSLSessionManager" class="proxy" /> - <property name="SessionTimeout" /> - <property name="Trace.RoutingTable" /> - <property name="Trace.Session" /> - </section> - - <section name="Freeze"> - <property name="DbEnv.[any].CheckpointPeriod" /> - <property name="DbEnv.[any].DbHome" /> - <property name="DbEnv.[any].DbPrivate" /> - <property name="DbEnv.[any].DbRecoverFatal" /> - <property name="DbEnv.[any].OldLogsAutoDelete" /> - <property name="DbEnv.[any].PeriodicCheckpointMinSize" /> - <property name="Evictor.[any].BtreeMinKey" /> - <property name="Evictor.[any].Checksum" /> - <property name="Evictor.[any].MaxTxSize" /> - <property name="Evictor.[any].PageSize" /> - <property name="Evictor.[any].PopulateEmptyIndices" /> - <property name="Evictor.[any].RollbackOnUserException" /> - <property name="Evictor.[any].SavePeriod" /> - <property name="Evictor.[any].SaveSizeTrigger" /> - <property name="Evictor.[any].StreamTimeout" /> - <property name="Evictor.UseNonmutating" /> - <property name="Map.[any].BtreeMinKey" /> - <property name="Map.[any].Checksum" /> - <property name="Map.[any].PageSize" /> - <property name="Trace.DbEnv" /> - <property name="Trace.Evictor" /> - <property name="Trace.Map" /> - <property name="Trace.Transaction" /> - <property name="Warn.CloseInFinalize" /> - <property name="Warn.Deadlocks" /> - <property name="Warn.Rollback" /> - </section> - -</properties> diff --git a/cpp/config/makeprops.py b/cpp/config/makeprops.py deleted file mode 100755 index 5933fd2cb37..00000000000 --- a/cpp/config/makeprops.py +++ /dev/null @@ -1,634 +0,0 @@ -#!/usr/bin/env python -# ********************************************************************** -# -# Copyright (c) 2003-2007 ZeroC, Inc. All rights reserved. -# -# This copy of Ice is licensed to you under the terms described in the -# ICE_LICENSE file included in this distribution. -# -# ********************************************************************** - -import os, sys, shutil, re, signal, time, string, pprint - -from xml.sax import make_parser -from xml.sax.handler import feature_namespaces -from xml.sax.handler import ContentHandler -from xml.sax import saxutils -from xml.sax import SAXException - -from xml.dom.minidom import parse - -progname = os.path.basename(sys.argv[0]) -contentHandler = None -propertyClasses = {} - -commonPreamble = """// ********************************************************************** -// -// Copyright (c) 2003-2007 ZeroC, Inc. All rights reserved. -// -// This copy of Ice is licensed to you under the terms described in the -// ICE_LICENSE file included in this distribution. -// -// ********************************************************************** -// -""" -commonPreamble = commonPreamble + "// Generated by " + progname + " from file %(inputfile)s, " + time.ctime() -commonPreamble = commonPreamble + """ - -// IMPORTANT: Do not edit this file -- any edits made here will be lost! -""" - -cppHeaderPreamble = commonPreamble + """ -#ifndef ICE_INTERNAL_%(classname)s_H -#define ICE_INTERNAL_%(classname)s_H - -#include <Ice/Config.h> - -namespace IceInternal -{ - -struct Property -{ - const char* pattern; - bool deprecated; - const char* deprecatedBy; - - Property(const char* n, bool d, const char* b) : - pattern(n), - deprecated(d), - deprecatedBy(b) - { - } - - Property() : - pattern(0), - deprecated(false), - deprecatedBy(0) - { - } - -}; - -struct PropertyArray -{ - const Property* properties; - const int length; - - PropertyArray(const Property* p, int len) : - properties(p), - length(len) - { - } -}; - -class %(classname)s -{ -public: - -""" - -cppHeaderPostamble = """ - static const PropertyArray validProps[]; - static const char * clPropNames[]; -}; - -} - -#endif -""" - -cppSrcPreamble = commonPreamble + """ -#include <Ice/%(classname)s.h> - -""" - -javaPreamble = commonPreamble + """ -package IceInternal; - -public final class %(classname)s -{ -""" - -csPreamble = commonPreamble + """ -namespace IceInternal -{ - public sealed class %(classname)s - { -""" - -def usage(): - global progname - print >> sys.stderr, "Usage: " + progname + " [--{cpp|java|cs} file]" - -def progError(msg): - global progname - print >> sys.stderr, progname + ": " + msg - -# -# Currently the processing of PropertyNames.xml is going to take place -# in two parts. One is using DOM to extract the property 'classes' such -# as 'proxy', 'objectadapter', etc. The other part uses SAX to create -# the language mapping source code. -# - -class PropertyClass: - def __init__(self, prefixOnly , childProperties): - self.prefixOnly = prefixOnly - self.childProperties = childProperties - - def getChildren(self): - return self.childProperties - - def isPrefixOnly(self): - return self.prefixOnly - - def __repr__(self): - return repr((repr(self.preifxOnly), repr(self.childProperties))) - -def initPropertyClasses(filename): - doc = parse(filename) - propertyClassNodes = doc.getElementsByTagName("class") - global propertyClasses - propertyClasses = {} - for n in propertyClassNodes: - className = n.attributes["name"].nodeValue - classType = n.attributes["prefix-only"].nodeValue - properties = [] - for a in n.childNodes: - if a.localName == "suffix" and a.hasAttributes(): - """Convert minidom maps to hashtables """ - attmap = {} - for i in range(0, a.attributes.length): - attmap[a.attributes.item(i).name] = a.attributes.item(i).value - properties.append(attmap) - - propertyClasses[className] = PropertyClass(classType.lower() == "true", properties) - -# -# SAX part. -# - -def handler(signum, frame): - """Installed as signal handler. Should cause an files that are in - use to be closed and removed""" - global contentHandler - contentHandler.cleanup() - sys.exit(128 + signum) - -class UnknownElementException(Exception): - def __init__(self, value): - self.value = value - - def __str__(self): - return repr(self.value) - -class PropertyHandler(ContentHandler): - - def __init__(self, inputfile, className): - self.start = False - self.properties = {} - self.inputfile = inputfile - self.className = className - self.currentSection = None - self.sectionPropertyCount = 0 - self.sections = [] - self.cmdLineOptions = [] - - def cleanup(self): - """Needs to be overridden in derived class""" - pass - - def startFiles(self): - """Needs to be overridden in derived class""" - pass - - def closeFiles(self): - """Needs to be overridden in derived class""" - pass - - def deprecatedImpl(self, propertyName): - """Needs to be overridden in derived class""" - pass - - def deprecatedImplWithReplacementImpl(self, propertyName, deprecatedBy): - """Needs to be overridden in derived class""" - pass - - def propertyImpl(self, propertyName): - """Needs to be overridden in derived class""" - pass - - def newSection(self, sectionName): - """Needs to be overridden in derived class""" - pass - - def moveFiles(self, location): - """Needs to be overridden in derived class""" - pass - - def handleNewSection(self, sectionName, noCmdLine): - self.currentSection = sectionName - self.sectionPropertyCount = 0 - if noCmdLine == "false": - self.cmdLineOptions.append(sectionName) - self.sections.append(sectionName) - self.newSection() - - def handleDeprecated(self, propertyName): - self.properties[propertyName] = None - self.deprecatedImpl(propertyName) - - def handleDeprecatedWithReplacement(self, propertyName, deprecatedBy): - self.properties[propertyName] = deprecatedBy - self.deprecatedImplWithReplacementImpl(propertyName, deprecatedBy) - - def handleProperty(self, propertyName): - self.properties[propertyName] = "" - self.propertyImpl(propertyName) - - def startElement(self, name, attrs): - if name == "properties": - self.start = True - self.startFiles() - return - - if not self.start: - return - - if name == "section": - noCmdLine = attrs.get("noCmdLine", "false") - self.handleNewSection(attrs.get("name"), noCmdLine) - - elif name == "property": - propertyName = attrs.get("name", None) - if attrs.has_key("class"): - c = propertyClasses[attrs["class"]] - for p in c.getChildren(): - if propertyName == None: - self.startElement(name, p) - else: - t = dict(p) - - # deprecatedBy properties in property classes - # are special. deprecatedBy attributes are - # usually absolute or 'raw', but in the case of - # a property class, they need to be expanded. - if t.has_key("deprecatedBy"): - t["deprecatedBy"] = "%s.%s.%s" % (self.currentSection, propertyName, t["deprecatedBy"]) - t['name'] = "%s.%s" % (propertyName, p['name']) - self.startElement(name, t) - if c.isPrefixOnly(): - return - - # - # != None implies deprecated == true - # - deprecatedBy = attrs.get("deprecatedBy", None) - if deprecatedBy != None: - self.handleDeprecatedWithReplacement(propertyName, deprecatedBy) - elif attrs.get("deprecated", "false").lower() == "true" : - self.handleDeprecated(propertyName) - else: - self.handleProperty(propertyName) - - def endElement(self, name): - if name == "properties": - self.closeFiles() - elif name == "section": - self.closeSection() - -class CppPropertyHandler(PropertyHandler): - - def __init__(self, inputfile, c): - PropertyHandler.__init__(self, inputfile, c) - self.hFile = None - self.cppFile = None - - def cleanup(self): - if self.hFile != None: - self.hFile.close() - if os.path.exists(self.className + ".h"): - os.remove(self.className + ".h") - if self.cppFile != None: - self.cppFile.close() - if os.path.exists(self.className + ".cpp"): - os.remove(self.className + ".cpp") - - def startFiles(self): - self.hFile = open(self.className + ".h", "w") - self.cppFile = open(self.className + ".cpp", "w") - self.hFile.write(cppHeaderPreamble % {'inputfile' : self.inputfile, 'classname' : self.className}) - self.cppFile.write(cppSrcPreamble % {'inputfile' : self.inputfile, 'classname' : self.className}) - - def closeFiles(self): - self.hFile.write(cppHeaderPostamble % {'classname' : self.className}) - self.cppFile.write("\nconst IceInternal::PropertyArray "\ - "IceInternal::%(classname)s::validProps[] =\n" % \ - {'classname' : self.className}) - - self.cppFile.write("{\n") - for s in self.sections: - self.cppFile.write(" %sProps,\n" % s) - self.cppFile.write(" IceInternal::PropertyArray(0,0)\n"); - self.cppFile.write("};\n\n") - - self.cppFile.write("\nconst char* IceInternal::%(classname)s::clPropNames[] =\n" % \ - {'classname' : self.className}) - self.cppFile.write("{\n") - for s in self.cmdLineOptions: - self.cppFile.write(" \"%s\",\n" % s) - self.cppFile.write(" 0\n") - self.cppFile.write("};\n\n") - self.hFile.close() - self.cppFile.close() - - def fix(self, propertyName): - return string.replace(propertyName, "[any]", "*") - - def deprecatedImpl(self, propertyName): - self.cppFile.write(" IceInternal::Property(\"%s.%s\", true, 0),\n" % (self.currentSection, \ - self.fix(propertyName))) - - def deprecatedImplWithReplacementImpl(self, propertyName, deprecatedBy): - self.cppFile.write(" IceInternal::Property(\"%s.%s\", true, \"%s\"),\n" % (self.currentSection, \ - self.fix(propertyName), deprecatedBy)) - - def propertyImpl(self, propertyName): - self.cppFile.write(" IceInternal::Property(\"%s.%s\", false, 0),\n" % \ - (self.currentSection, self.fix(propertyName))) - - def newSection(self): - self.hFile.write(" static const PropertyArray %sProps;\n" % self.currentSection) - self.cppFile.write("const IceInternal::Property %sPropsData[] = \n" % self.currentSection) - self.cppFile.write("{\n") - - def closeSection(self): - self.cppFile.write("};\n") - self.cppFile.write(""" -const IceInternal::PropertyArray - IceInternal::%(className)s::%(section)sProps(%(section)sPropsData, - sizeof(%(section)sPropsData)/sizeof(%(section)sPropsData[0])); - -""" % { 'className' : self.className, 'section': self.currentSection }) - - def moveFiles(self, location): - shutil.move(self.className + ".h", os.path.join(location, "src", "Ice")) - shutil.move(self.className + ".cpp", os.path.join(location, "src", "Ice")) - -class JavaPropertyHandler(PropertyHandler): - def __init__(self, inputfile, c): - PropertyHandler.__init__(self, inputfile, c) - self.srcFile = None - - def cleanup(self): - if self.srcFile != None: - self.srcFile.close() - if os.path.exists(self.className + ".java"): - os.remove(self.className + ".java") - - def startFiles(self): - self.srcFile = file(self.className + ".java", "w") - self.srcFile.write(javaPreamble % {'inputfile' : self.inputfile, 'classname' : self.className}) - - def closeFiles(self): - self.srcFile.write("\n public static final Property[] validProps[] =\n") - - self.srcFile.write(" {\n") - for s in self.sections: - self.srcFile.write(" %sProps,\n" % s) - self.srcFile.write(" null\n") - self.srcFile.write(" };\n") - - self.srcFile.write("\n public static final String clPropNames[] =\n") - self.srcFile.write(" {\n") - for s in self.cmdLineOptions: - self.srcFile.write(" \"%s\",\n" % s) - self.srcFile.write(" null\n") - self.srcFile.write(" };\n") - self.srcFile.write("}\n") - self.srcFile.close() - - def fix(self, propertyName): - # - # The Java property strings are actually regexp's that will be passed to Java's regexp facitlity. - # - propertyName = string.replace(propertyName, ".", "\\\\.") - return string.replace(propertyName, "[any]", "[^\\\\s]+") - - def deprecatedImpl(self, propertyName): - self.srcFile.write(" new Property(\"%(section)s\\\\.%(pattern)s\", " \ - "true, null),\n" % \ - {"section" : self.currentSection, "pattern": self.fix(propertyName)}) - - def deprecatedImplWithReplacementImpl(self, propertyName, deprecatedBy): - self.srcFile.write(" new Property(\"%(section)s\\\\.%(pattern)s\", "\ - "true, \"%(deprecatedBy)s\"),\n" % \ - {"section" : self.currentSection, "pattern": self.fix(propertyName), - "deprecatedBy" : deprecatedBy}) - - def propertyImpl(self, propertyName): - self.srcFile.write(" new Property(\"%(section)s\\\\.%(pattern)s\", " \ - "false, null),\n" % \ - {"section" : self.currentSection, "pattern": self.fix(propertyName)} ) - - def newSection(self): - self.srcFile.write(" public static final Property %sProps[] = \n" % self.currentSection) - self.srcFile.write(" {\n") - - def closeSection(self): - self.srcFile.write(" null\n") - self.srcFile.write(" };\n\n") - - def moveFiles(self, location): - shutil.move(self.className + ".java", os.path.join(location, "..", "java", "src", "IceInternal")) - -class CSPropertyHandler(PropertyHandler): - def __init__(self, inputfile, c): - PropertyHandler.__init__(self, inputfile, c) - self.srcFile = None - - def cleanup(self): - if self.srcFile != None: - self.srcFile.close() - if os.path.exists(self.className + ".cs"): - os.remove(self.className + ".cs") - - def startFiles(self): - self.srcFile = file(self.className + ".cs", "w") - self.srcFile.write(csPreamble % {'inputfile' : self.inputfile, 'classname' : self.className}) - - def closeFiles(self): - self.srcFile.write(" public static Property[][] validProps =\n") - - self.srcFile.write(" {\n") - for s in self.sections: - self.srcFile.write(" %sProps,\n" % s) - self.srcFile.write(" null\n") - self.srcFile.write(" };\n\n") - - self.srcFile.write(" public static string[] clPropNames =\n") - self.srcFile.write(" {\n") - for s in self.cmdLineOptions: - self.srcFile.write(" \"%s\",\n" % s) - self.srcFile.write(" null\n") - self.srcFile.write(" };\n") - self.srcFile.write(" }\n") - self.srcFile.write("}\n") - self.srcFile.close() - - def fix(self, propertyName): - propertyName = string.replace(propertyName, ".", "\\.") - return string.replace(propertyName, "[any]", "[^\\s]+") - - def deprecatedImpl(self, propertyName): - self.srcFile.write(" new Property(@\"^%s\.%s$\", true, null),\n" % (self.currentSection, \ - self.fix(propertyName))) - - def deprecatedImplWithReplacementImpl(self, propertyName, deprecatedBy): - self.srcFile.write(" new Property(@\"^%s\.%s$\", true, @\"%s\"),\n" % \ - (self.currentSection, self.fix(propertyName), deprecatedBy)) - - def propertyImpl(self, propertyName): - self.srcFile.write(" new Property(@\"^%s\.%s$\", false, null),\n" % (self.currentSection, \ - self.fix(propertyName))) - - def newSection(self): - self.srcFile.write(" public static Property[] %sProps =\n" % self.currentSection); - self.srcFile.write(" {\n") - - def closeSection(self): - self.srcFile.write(" null\n") - self.srcFile.write(" };\n") - self.srcFile.write("\n") - - def moveFiles(self, location): - shutil.move(self.className + ".cs", os.path.join(location, "..", "cs", "src", "Ice")) - -class MultiHandler(PropertyHandler): - def __init__(self, inputfile, c): - self.handlers = [] - PropertyHandler.__init__(self, inputfile, c) - - def cleanup(self): - for f in self.handlers: - f.cleanup() - - def addHandlers(self, handlers): - self.handlers.extend(handlers) - - def startFiles(self): - for f in self.handlers: - f.startFiles() - - def closeFiles(self): - for f in self.handlers: - f.closeFiles() - - def newSection(self): - for f in self.handlers: - f.newSection() - - def closeSection(self): - for f in self.handlers: - f.closeSection() - - def handleNewSection(self, sectionName, cmdLine): - for f in self.handlers: - f.handleNewSection(sectionName, cmdLine) - - def handleDeprecated(self, propertyName): - for f in self.handlers: - f.handleDeprecated(propertyName) - - def handleDeprecatedWithReplacement(self, propertyName, deprecatedBy): - for f in self.handlers: - f.handleDeprecatedWithReplacement(propertyName, deprecatedBy) - - def handleProperty(self, propertyName): - for f in self.handlers: - f.handleProperty(propertyName) - - def startElement(self, name, attrs): - for f in self.handlers: - f.startElement(name, attrs) - - def moveFiles(self, location): - for f in self.handlers: - f.moveFiles(location) - -def main(): - if len(sys.argv) != 1 and len(sys.argv) != 3: - usage() - sys.exit(1) - - infile = None - lang = None - - # - # Find the root of the tree. - # - for toplevel in [".", "..", "../..", "../../..", "../../../.."]: - toplevel = os.path.normpath(toplevel) - if os.path.exists(os.path.join(toplevel, "config", "makeprops.py")): - break - else: - progError("cannot find top-level directory") - sys.exit(1) - - if len(sys.argv) == 1: - infile = os.path.join(toplevel, "config", "PropertyNames.xml") - else: - option = sys.argv[1] - if option == "--cpp": - lang = "cpp" - elif option == "--java": - lang = "java" - elif option == "--cs": - lang = "cs" - elif option in ["-h", "--help", "-?"]: - usage() - sys.exit(0) - else: - usage() - sys.exit(1) - infile = sys.argv[2] - - className, ext = os.path.splitext(os.path.basename(infile)) - global contentHandler - if lang == None: - contentHandler = MultiHandler(infile, "") - contentHandler.addHandlers([CppPropertyHandler(infile, className), - JavaPropertyHandler(infile, className), - CSPropertyHandler(infile, className)]) - else: - if lang == "cpp": - contentHandler = CppPropertyHandler(infile, className) - elif lang == "java": - contentHandler = JavaPropertyHandler(infile, className) - elif lang == "cs": - contentHandler = CSPropertyHandler(infile, className) - - # - # Install signal handler so we can remove the output files if we are interrupted. - # - signal.signal(signal.SIGINT, handler) - # signal.signal(signal.SIGHUP, handler) - signal.signal(signal.SIGTERM, handler) - initPropertyClasses(infile) - - parser = make_parser() - parser.setFeature(feature_namespaces, 0) - parser.setContentHandler(contentHandler) - pf = file(infile) - try: - parser.parse(pf) - contentHandler.moveFiles(toplevel) - except IOError, ex: - progError(str(ex)) - contentHandler.cleanup() - except SAXException, ex: - progError(str(ex)) - contentHandler.cleanup() - -if __name__ == "__main__": - main() diff --git a/cpp/iceslmakedist.py b/cpp/iceslmakedist.py index b04ba431ef5..b3dac605293 100755 --- a/cpp/iceslmakedist.py +++ b/cpp/iceslmakedist.py @@ -290,7 +290,6 @@ filesToRemove = [ \ os.path.join("icesl", "config", "icegrid-slice.3.1.ice.gz"), \ os.path.join("icesl", "config", "makedepend.py"), \ os.path.join("icesl", "config", "makegitignore.py"), \ - os.path.join("icesl", "config", "makeprops.py"), \ os.path.join("icesl", "config", "Make.rules"), \ os.path.join("icesl", "config", "Make.rules.AIX"), \ os.path.join("icesl", "config", "Make.rules.bcc"), \ @@ -302,7 +301,6 @@ filesToRemove = [ \ os.path.join("icesl", "config", "Make.rules.SunOS"), \ os.path.join("icesl", "config", "Make.rules.icee"), \ os.path.join("icesl", "config", "Make.rules.mak.icee"), \ - os.path.join("icesl", "config", "PropertyNames.xml"), \ os.path.join("icesl", "config", "templates.xml"), \ os.path.join("icesl", "config", "upgradeicegrid.py"), \ os.path.join("icesl", "config", "upgradeicestorm.py"), \ diff --git a/cpp/src/Ice/PropertyNames.cpp b/cpp/src/Ice/PropertyNames.cpp index 8f282dcdb08..f20324c3f4d 100644 --- a/cpp/src/Ice/PropertyNames.cpp +++ b/cpp/src/Ice/PropertyNames.cpp @@ -7,7 +7,7 @@ // // ********************************************************************** // -// Generated by makeprops.py from file ..\config\PropertyNames.xml, Mon Oct 29 16:59:13 2007 +// Generated by makeprops.py from file ../config/PropertyNames.xml, Tue Nov 20 11:07:30 2007 // IMPORTANT: Do not edit this file -- any edits made here will be lost! @@ -201,6 +201,7 @@ const IceInternal::Property IceGridPropsData[] = IceInternal::Property("IceGrid.Node.ThreadPool.SizeWarn", false, 0), IceInternal::Property("IceGrid.Node.ThreadPool.StackSize", false, 0), IceInternal::Property("IceGrid.Node.AllowRunningServersAsRoot", false, 0), + IceInternal::Property("IceGrid.Node.AllowEndpointsOverride", false, 0), IceInternal::Property("IceGrid.Node.CollocateRegistry", false, 0), IceInternal::Property("IceGrid.Node.Data", false, 0), IceInternal::Property("IceGrid.Node.DisableOnFailure", false, 0), diff --git a/cpp/src/Ice/PropertyNames.h b/cpp/src/Ice/PropertyNames.h index 337d21a566f..d9da321ee65 100644 --- a/cpp/src/Ice/PropertyNames.h +++ b/cpp/src/Ice/PropertyNames.h @@ -7,7 +7,7 @@ // // ********************************************************************** // -// Generated by makeprops.py from file ..\config\PropertyNames.xml, Mon Oct 29 16:59:13 2007 +// Generated by makeprops.py from file ../config/PropertyNames.xml, Tue Nov 20 11:07:30 2007 // IMPORTANT: Do not edit this file -- any edits made here will be lost! diff --git a/cpp/src/IceGrid/NodeI.cpp b/cpp/src/IceGrid/NodeI.cpp index 1c0f3d5f1f9..bad4237f63a 100644 --- a/cpp/src/IceGrid/NodeI.cpp +++ b/cpp/src/IceGrid/NodeI.cpp @@ -206,49 +206,51 @@ NodeI::NodeI(const Ice::ObjectAdapterPtr& adapter, _name(name), _proxy(proxy), _redirectErrToOut(false), + _allowEndpointsOverride(false), _waitTime(0), _userAccountMapper(mapper), _platform("IceGrid.Node", _communicator, _traceLevels), _fileCache(new FileCache(_communicator)), _serial(1) { - Ice::PropertiesPtr properties = _communicator->getProperties(); + Ice::PropertiesPtr props = _communicator->getProperties(); const_cast<string&>(_dataDir) = _platform.getDataDir(); const_cast<string&>(_serversDir) = _dataDir + "/servers"; const_cast<string&>(_tmpDir) = _dataDir + "/tmp"; const_cast<string&>(_instanceName) = _communicator->getDefaultLocator()->ice_getIdentity().category; - const_cast<Ice::Int&>(_waitTime) = properties->getPropertyAsIntWithDefault("IceGrid.Node.WaitTime", 60); - const_cast<string&>(_outputDir) = properties->getProperty("IceGrid.Node.Output"); - const_cast<bool&>(_redirectErrToOut) = properties->getPropertyAsInt("IceGrid.Node.RedirectErrToOut") > 0; + const_cast<Ice::Int&>(_waitTime) = props->getPropertyAsIntWithDefault("IceGrid.Node.WaitTime", 60); + const_cast<string&>(_outputDir) = props->getProperty("IceGrid.Node.Output"); + const_cast<bool&>(_redirectErrToOut) = props->getPropertyAsInt("IceGrid.Node.RedirectErrToOut") > 0; + const_cast<bool&>(_allowEndpointsOverride) = props->getPropertyAsInt("IceGrid.Node.AllowEndpointsOverride") > 0; // // Parse the properties override property. // - string props = properties->getProperty("IceGrid.Node.PropertiesOverride"); + string overrides = props->getProperty("IceGrid.Node.PropertiesOverride"); Ice::StringSeq propsAsArgs; - if(!props.empty()) + if(!overrides.empty()) { string::size_type end = 0; while(end != string::npos) { const string delim = " \t\r\n"; - string::size_type beg = props.find_first_not_of(delim, end); + string::size_type beg = overrides.find_first_not_of(delim, end); if(beg == string::npos) { break; } - end = props.find_first_of(delim, beg); + end = overrides.find_first_of(delim, beg); string arg; if(end == string::npos) { - arg = props.substr(beg); + arg = overrides.substr(beg); } else { - arg = props.substr(beg, end - beg); + arg = overrides.substr(beg, end - beg); } if(arg.find("--") == 0) @@ -756,6 +758,12 @@ NodeI::getRedirectErrToOut() const return _redirectErrToOut; } +bool +NodeI::allowEndpointsOverride() const +{ + return _allowEndpointsOverride; +} + NodeSessionPrx NodeI::registerWithRegistry(const InternalRegistryPrx& registry) { diff --git a/cpp/src/IceGrid/NodeI.h b/cpp/src/IceGrid/NodeI.h index 42b132c2f19..6aaab267005 100644 --- a/cpp/src/IceGrid/NodeI.h +++ b/cpp/src/IceGrid/NodeI.h @@ -87,7 +87,8 @@ public: std::string getOutputDir() const; bool getRedirectErrToOut() const; - + bool allowEndpointsOverride() const; + NodeSessionPrx registerWithRegistry(const InternalRegistryPrx&); void checkConsistency(const NodeSessionPrx&); NodeSessionPrx getMasterNodeSession() const; @@ -120,6 +121,7 @@ private: const NodePrx _proxy; const std::string _outputDir; const bool _redirectErrToOut; + const bool _allowEndpointsOverride; const Ice::Int _waitTime; const std::string _instanceName; const UserAccountMapperPrx _userAccountMapper; diff --git a/cpp/src/IceGrid/ServerAdapterI.cpp b/cpp/src/IceGrid/ServerAdapterI.cpp index b6835e6d90f..4529bf4e8d8 100644 --- a/cpp/src/IceGrid/ServerAdapterI.cpp +++ b/cpp/src/IceGrid/ServerAdapterI.cpp @@ -128,16 +128,16 @@ ServerAdapterI::setDirectProxy(const Ice::ObjectPrx& prx, const Ice::Current&) // We don't allow to override an existing proxy by another non // null proxy if the server is not inactive. // - // TODO: This check would fail with the new refreshPublishedEndpoints() call. - // Is some protesction still needed though? - // - //if(prx && _proxy) - //{ - // if(_server->getState() == Active) - // { - // throw AdapterActiveException(); - // } - //} + if(!_node->allowEndpointsOverride()) + { + if(prx && _proxy) + { + if(_server->getState() == Active) + { + throw AdapterActiveException(); + } + } + } bool updated = _proxy != prx; _proxy = prx; diff --git a/cpp/test/IceGrid/replication/AllTests.cpp b/cpp/test/IceGrid/replication/AllTests.cpp index 9be7f576f29..c6eee2bb72b 100644 --- a/cpp/test/IceGrid/replication/AllTests.cpp +++ b/cpp/test/IceGrid/replication/AllTests.cpp @@ -1182,15 +1182,15 @@ allTests(const Ice::CommunicatorPtr& comm) cout << "ok" << endl; - cout << "Shutting down Node1... " << flush; + cout << "shutting down Node1... " << flush; slave1Admin->shutdownNode("Node1"); cout << "ok" << endl; - cout << "Removing Node1 server... " << flush; + cout << "removing Node1 server... " << flush; removeServer(admin, "Node1"); cout << "ok" << endl; - cout << "Removing Slave2 server..." << flush; + cout << "removing Slave2 server..." << flush; removeServer(admin, "Slave2"); cout << "ok" << endl; |