summaryrefslogtreecommitdiff
path: root/cpp
diff options
context:
space:
mode:
authorBernard Normier <bernard@zeroc.com>2007-11-20 09:16:56 -0500
committerBernard Normier <bernard@zeroc.com>2007-11-20 09:16:56 -0500
commit470bb86bfbd42b20758cdc64a80393e2aac64749 (patch)
treeb24232d1df8a3efb6882ed80f20b32cb0a325cdc /cpp
parentMissing Windows makefile (diff)
parentRemoved makprops.py from remove files list (diff)
downloadice-470bb86bfbd42b20758cdc64a80393e2aac64749.tar.bz2
ice-470bb86bfbd42b20758cdc64a80393e2aac64749.tar.xz
ice-470bb86bfbd42b20758cdc64a80393e2aac64749.zip
Merge branch 'master' of cvs:/home/git/ice
Diffstat (limited to 'cpp')
-rwxr-xr-xcpp/config/PropertyNames.xml579
-rwxr-xr-xcpp/config/makeprops.py634
-rwxr-xr-xcpp/iceslmakedist.py2
-rw-r--r--cpp/src/Ice/PropertyNames.cpp3
-rw-r--r--cpp/src/Ice/PropertyNames.h2
-rw-r--r--cpp/src/IceGrid/NodeI.cpp28
-rw-r--r--cpp/src/IceGrid/NodeI.h4
-rw-r--r--cpp/src/IceGrid/ServerAdapterI.cpp20
-rw-r--r--cpp/test/IceGrid/replication/AllTests.cpp6
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;