You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by je...@apache.org on 2016/02/25 21:27:36 UTC

[48/50] [abbrv] incubator-geode git commit: Merge branch 'develop' into feature/GEODE-17

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/5c01d5f4/geode-core/src/main/java/com/gemstone/gemfire/distributed/DistributedSystem.java
----------------------------------------------------------------------
diff --cc geode-core/src/main/java/com/gemstone/gemfire/distributed/DistributedSystem.java
index 0000000,c09d618..25bb67b
mode 000000,100644..100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/DistributedSystem.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/DistributedSystem.java
@@@ -1,0 -1,2207 +1,2217 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *      http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ 
+ package com.gemstone.gemfire.distributed;
+ 
+ import java.io.File;
+ import java.net.InetAddress;
+ import java.net.MalformedURLException;
+ import java.net.URL;
+ import java.util.ArrayList;
+ import java.util.Collections;
+ import java.util.Iterator;
+ import java.util.List;
+ import java.util.Properties;
+ import java.util.Set;
+ import java.util.concurrent.TimeUnit;
+ 
+ import com.gemstone.gemfire.CancelCriterion;
+ import com.gemstone.gemfire.LogWriter;
+ import com.gemstone.gemfire.StatisticsFactory;
+ import com.gemstone.gemfire.cache.Cache;
+ import com.gemstone.gemfire.cache.CacheFactory;
+ import com.gemstone.gemfire.cache.client.ClientCache;
+ import com.gemstone.gemfire.cache.client.ClientCacheFactory;
+ import com.gemstone.gemfire.distributed.internal.DistributionConfig;
+ import com.gemstone.gemfire.distributed.internal.DistributionManager;
+ import com.gemstone.gemfire.distributed.internal.InternalDistributedSystem;
+ import com.gemstone.gemfire.internal.Assert;
+ import com.gemstone.gemfire.internal.ClassPathLoader;
+ import com.gemstone.gemfire.internal.i18n.LocalizedStrings;
+ import com.gemstone.gemfire.internal.tcp.ConnectionTable;
+ import com.gemstone.gemfire.internal.util.IOUtils;
+ import com.gemstone.gemfire.memcached.GemFireMemcachedServer;
+ import com.gemstone.gemfire.redis.GemFireRedisServer;
+ import com.gemstone.gemfire.security.GemFireSecurityException;
+ 
+ /**
+  * A "connection" to a GemFire distributed system.  A
+  * <code>DistributedSystem</code> is created by invoking the {@link
+  * #connect} method with a configuration as described <a
+  * href="#configuration">below</a>.  A <code>DistributedSystem</code>
+  * is used when calling {@link
+  * com.gemstone.gemfire.cache.CacheFactory#create}.  This class should
+  * not be confused with the {@link
+  * com.gemstone.gemfire.admin.AdminDistributedSystem
+  * AdminDistributedSystem} interface that is used for administering a
+  * distributed system.
+  *
+  * <P>
+  *
+  * When a program connects to the distributed system, a "distribution
+  * manager" is started in this VM and the other members of the
+  * distributed system are located.  This discovery is performed
+  * by contacting "locators"
+  * running on a given host and port.  All DistributedSystems that are
+  * configured to use the same same
+  * locators are part of the same distributed system.
+  *
+  * <P>
+  *
+  * The current version of GemFire only supports creating one
+  * <code>DistributedSystem</code> per virtual machine.  Attempts to
+  * connect to multiple distributed systems (that is calling {@link
+  * #connect} multiple times with different configuration
+  * <code>Properties</code>) will result in an {@link
+  * IllegalStateException} being thrown (if <code>connect</code> is
+  * invoked multiple times with equivalent <code>Properties</code>,
+  * then the same instance of <code>DistributedSystem</code> will be
+  * returned).  A common practice is to connect to the distributed
+  * system and store a reference to the <code>DistributedSystem</code>
+  * object in a well-known location such as a <code>static</code>
+  * variable.  This practice provides access to the
+  * <code>DistributedSystem</code> slightly faster than invoking
+  * <code>connect</code> multiple times.  Note that it is always
+  * advisable to {@link #disconnect()} from the distributed system when a
+  * program will no longer access it.  Disconnecting frees up certain
+  * resources and allows your application to connect to a different
+  * distributed system, if desirable.
+  *
+  * <P>
+  *
+  * <CENTER>
+  * <B><a name="configuration">Configuration</a></B>
+  * </CENTER>
+  *
+  * <P>
+  *
+  * There are a number of configuration properties that can be set when
+  * a program {@linkplain #connect connects} to a distributed system.
+  *
+  * <P>
+  *
+  * <B>Distribution Configuration Properties</B>
+  *
+  * <dl>
+  *   <a name="groups"><dt>groups</dt></a>
+  *   <dd><U>Description</U>: Defines the list of groups this member belongs to.
+  *   Use commas to separate group names.
+  *   Note that anything defined by the roles gemfire property will also be considered a group.
+  *   <dd><U>Default</U>: ""</dd>
+  *   <dd><U>Since</U>: 7.0</dd>
+  * </dl>
+  * <dl>
+  *   <a name="name"><dt>name</dt></a>
+  *   <dd><U>Description</U>: Uniquely identifies a member in its distributed system.
+  *   If two members with the same name try to join the same distributed system
+  *   then the second join will fail.</dd>
+  *   <dd><U>Default</U>: ""</dd>
+  * </dl>
+ 
+  * <dl>
+  *   <a name="distributed-system-id"><dt>distributed-system-id</dt></a>
+  *<dd> A number that uniquely identifies this distributed system, when
+  * using the WAN gateway to share data between multiple distributed systems. This
+  * setting is only required when using the WAN gateway in conjunction with
+  * the Portable Data eXchange (PDX) serialization format.
+  * 
+  * If set, this setting must be the same for every member in this distributed
+  * system. It must be different than the number in other distributed systems
+  * that this one will connect to using the WAN.
+  * 
+  * -1 means no setting.</dd>
+  * 
+  *   <dd><U>Range</U>-1..255</dd>
+  *   <dd><U>Default</U>: "-1"</dd>
+  * </dl>
+  *
+  * <dl>
+  *   <a name="mcast-port"><dt>mcast-port</dt></a>
+  *   <dd><U>Description</U>: The port used for multicast networking.
+  *   If zero, then multicast will be disabled and unicast messaging will
+  *   be used.
+  *   </dd>
+  *   <dd><U>Default</U>: "0"</dd>
+  * </dl>
+  *
+  * <dl>
+  *   <a name="mcast-address"><dt>mcast-address</dt></a>
+  *   <dd><U>Description</U>: The IP address used for multicast
+  *   networking.  If mcast-port is zero, then mcast-address is
+  *   ignored.
+  *   </dd>
+  *   <dd><U>Default</U>: "239.192.81.1"</dd>
+  * </dl>
+  * <dl>
+  *   <a name="mcast-ttl"><dt>mcast-ttl</dt></a>
+  *   <dd><U>Description</U>: Determines how far through your network
+  *   the multicast packets used by GemFire will propagate.
+  *   <dd><U>Default</U>: "32"</dd>
+  *   <dd><U>Allowed values</U>: 0..255</dd>
+  *   <dd><U>Since</U>: 4.1</dd>
+  * </dl>
+  * <dl>
+  *   <a name="mcast-send-buffer-size"><dt>mcast-send-buffer-size</dt></a>
+  *   <dd><U>Description</U>: Sets the size of the socket buffer used for
+  *    outgoing multicast transmissions.
+  *   <dd><U>Default</U>: "65535"</dd>
+  *   <dd><U>Allowed values</U>: 2048..Operating System maximum</dd>
+  *   <dd><U>Since</U>: 5.0</dd>
+  * </dl>
+  * <dl>
+  *   <a name="mcast-recv-buffer-size"><dt>mcast-recv-buffer-size</dt></a>
+  *   <dd><U>Description</U>: Sets the size of the socket buffer used for
+  *    incoming multicast transmissions.  You should set this high if there will be
+  *    high volumes of messages.
+  *   <dd><U>Default</U>: "1048576"</dd>
+  *   <dd><U>Allowed values</U>: 2048..Operating System maximum</dd>
+  *   <dd><U>Since</U>: 5.0</dd>
+  * </dl>
+  * <dl>
+  *   <a name="mcast-flow-control"><dt>mcast-flow-control</dt></a>
+  *   <dd><U>Description</U>: Configures the flow-of-control protocol for
+  *    multicast messaging.  There are three settings that are separated
+  *    by commas:  byteAllowance (integer), rechargeThreshold (float) and
+  *    rechargeBlockMs (integer).  The byteAllowance determines how many bytes
+  *    can be sent without a recharge from other processes.  The rechargeThreshold
+  *    tells receivers how low the sender's initial to remaining allowance
+  *    ratio should be before sending a recharge.  The rechargeBlockMs
+  *    tells the sender how long to wait for a recharge before explicitly
+  *    requesting one.</dd>
+  *   <dd><U>Deprecated</U>: as of 9.0 GemFire does not include a flow-of-control protocol for multicast messaging.</dd>
+  *   <dd><U>Default</U>: "1048576,0.25,5000"</dd>
+  *   <dd><U>Allowed values</U>: 100000-maxInt, 0.1-0.5, 500-60000</dd>
+  *   <dd><U>Since</U>: 5.0</dd>
+  * </dl>
+  *
+  * <dl>
+  *   <a name="udp-send-buffer-size"><dt>udp-send-buffer-size</dt></a>
+  *   <dd><U>Description</U>: Sets the size of the socket buffer used for
+  *    outgoing udp point-to-point transmissions.
+  *   <dd><U>Default</U>: "65535"</dd>
+  *   <dd><U>Allowed values</U>: 2048..Operating System maximum</dd>
+  *   <dd><U>Since</U>: 5.0</dd>
+  * </dl>
+  * <dl>
+  *   <a name="udp-recv-buffer-size"><dt>udp-recv-buffer-size</dt></a>
+  *   <dd><U>Description</U>: Sets the size of the socket buffer used for
+  *    incoming udp point-to-point transmissions.  Note: if multicast is not
+  *    enabled and disable-tcp is not enabled, a reduced default size of
+  *    65535 is used.
+  *   <dd><U>Default</U>: "1048576 if multicast is enabled or disable-tcp is true, 131071 if not"</dd>
+  *   <dd><U>Allowed values</U>: 2048..Operating System maximum</dd>
+  *   <dd><U>Since</U>: 5.0</dd>
+  * </dl>
+  * <dl>
+  *   <a name="udp-fragment-size"><dt>udp-fragment-size</dt></a>
+  *   <dd><U>Description</U>: When messages are sent over datagram sockets,
+  *    GemFire breaks large messages down into fragments for transmission.
+  *    This property sets the maximum fragment size for transmission.
+  *   <dd><U>Default</U>: "60000"</dd>
+  *   <dd><U>Allowed values</U>: 1000..60000</dd>
+  *   <dd><U>Since</U>: 5.0</dd>
+  * </dl>
+  * <dl>
+  *   <a name="disable-tcp"><dt>disable-tcp</dt></a>
+  *   <dd><U>Description</U>: Turns off use of tcp/ip sockets, forcing the
+  *    cache to use datagram sockets for all communication.  This is useful
+  *    if you have a large number of processes in the distributed cache since
+  *    it eliminates the per-connection reader-thread that is otherwise required.
+  *    However, udp communications are somewhat slower than tcp/ip communications
+  *    due to the extra work required in Java to break messages down to
+  *    transmittable sizes, and the extra work required to guarantee
+  *    message delivery.
+  *   </dd>
+  *   <dd><U>Default</U>: "false"</dd>
+  *   <dd><U>Allowed values</U>: true or false</dd>
+  *   <dd><U>Since</U>: 5.0</dd>
+  * </dl>
+  * <dl>
+  *   <a name="tcp-port"><dt>tcp-port</dt></a>
+  *   <dd><U>Description</U>: A 16-bit integer that determines the tcp/ip port number to listen on
+  *     for cache communications.  If zero, the operating system will select
+  *     an available port to listen on.  Each process on a machine must have
+  *     its own tcp-port.  Note that some operating systems restrict the range
+  *     of ports usable by non-privileged users, and using restricted port
+  *     numbers can cause runtime errors in GemFire startup.
+  *   </dd>
+  *   <dd><U>Default</U>: "0"</dd>
+  *   <dd><U>Allowed values</U>: 0..65535</dd>
+  *   <dd><U>Since</U>: 5.0</dd>
+  * </dl>
+  * <dl>
+  *   <a name="member-timeout"><dt>member-timeout</dt></a>
+  *   <dd><U>Description</U>: Sets the timeout interval, in milliseconds, used
+  *   to determine whether another process is alive or not.  When another process
+  *   appears to be gone, GemFire sends it an ARE-YOU-DEAD message and waits
+  *   for the member-timeout period for it to respond and declare it is not dead.
+  *   </dd>
+  *   <dd><U>Default</U>: "5000"</dd>
+  *   <dd><U>Allowed values</U>: 1000-600000</dd>
+  *   <dd><U>Since</U>: 5.0</dd>
+  * </dl>
+  * <dl>
+  *   <a name="bind-address"><dt>bind-address</dt></a>
+  *   <dd><U>Description</U>: The IP address that this distributed system's
+  *   server sockets will listen on.
+  *   If set to an empty string then the local machine's
+  *   default address will be listened on.
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  * </dl>
+  * <!--
+  * <dl>
+  *   <a name="server-bind-address"><dt>server-bind-address</dt></a>
+  *   <dd><U>Description</U>: The IP address that this distributed system's
+  *   server sockets in a client-server topology will listen on.
+  *   If set to an empty string then all of the local machine's
+  *   addresses will be listened on.
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  * </dl>
+  * -->
+  * <dl>
+  *   <a name="membership-port-range"><dt>membership-port-range</dt></a>
+  *   <dd><U>Description</U>: The allowed range of ports for use in forming an
+  *   unique membership identifier (UDP), for failure detection purposes (TCP) and
+  *   to listen on for peer connections (TCP). This range is given as two numbers
+  *   separated by a minus sign. Minimum 3 values in range are required to
+  *   successfully startup.
+  *   </dd>
+  *   <dd><U>Default</U>: 1024-65535</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="locators"><dt>locators</dt></a>
+  *   <dd><U>Description</U>: A list of locators (host and port) that
+  *   are used to find other member of the distributed system.  This
+  *   attribute's value is a possibly empty comma separated list.  Each
+  *   element must be of the form "hostName[portNum]" and may be of the
+  *   form "host:bindAddress[port]" if a specific bind address is to be
+  *   used on the locator machine.  The square
+  *   brackets around the portNum are literal character and must be
+  *   specified.<p>
+  *   Since IPv6 bind addresses may contain colons, you may use an at symbol
+  *   instead of a colon to separate the host name and bind address.
+  *   For example, "server1@fdf0:76cf:a0ed:9449::5[12233]" specifies a locator
+  *   running on "server1" and bound to fdf0:76cf:a0ed:9449::5 on port 12233.<p>
+  *   If "locators" is empty
+  *   then this distributed system will be isolated from all other GemFire
+  *   processes.<p>
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="locator-wait-time"><dt>locator-wait-time</dt></a>
+  *   <dd><U>Description</U>: The number of seconds to wait for a locator to start
+  *   if one is not available when attempting to join the distributed system.  This
+  *   setting can be used when locators and peers are being started all at once in
+  *   order to have the peers be patient and wait for the locators to finish starting
+  *   up before attempting to join the distributed system..<p>
+  *   </dd>
+  *   <dd><U>Default</U>: "0"</dd>
+  * 
+  * <dl>
+  *   <a name="remote-locators"><dt>remote-locators</dt></a>
+  *   <dd><U>Description</U>: A list of locators (host and port) that a cluster
+  *   will use in order to connect to a remote site in a multi-site (WAN) 
+  *   configuration. This attribute's value is a possibly comma separated list.
+  *   <p>For each remote locator, provide a hostname and/or address 
+  *   (separated by '@', if you use both), followed by a port number in brackets.
+  *   <p>Examples:
+  *   remote-locators=address1[port1],address2[port2]
+  *   <p>
+  *   remote-locators=hostName1@address1[port1],hostName2@address2[port2]
+  *   <p>
+  *   remote-locators=hostName1[port1],hostName2[port2]<p>
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="start-locator"><dt>start-locator</dt></a>
+  *   <dd><U>Description</U>: A host name or bind-address and port 
+  *   ("host[port],peer=<true|false>,server=<true|false>")
+  *   that are used to start a locator in the same process as the DistributedSystem.
+  *   The locator is started when the DistributedSystem connects,
+  *   and is stopped when the DistributedSystem disconnects.  To start a
+  *   locator that is not tied to the DistributedSystem's lifecycle, see
+  *   the {@link Locator} class in this same package.<p>
+  *   
+  *   The peer and server parameters are optional. They specify whether
+  *   the locator can be used for peers to discover each other, or for clients
+  *   to discover peers. By default both are true.
+  *   </dd>
+  *   <dd><U>Default</U>: "" (doesn't start a locator)</dd>
+  * </dl>
+  *
+  * <dl>
+  *   <a name="ssl-enabled"><dt>ssl-enabled</dt></a>
+  *   <dd><U>Description</U>: If true, all gemfire socket communication is
+  *   configured to use SSL through JSSE.
+  *   </dd>
+  *   <dd><U>Default</U>: "false"</dd>
+  *   <dd><U>Deprecated</U>: as of 8.0 use <a href="#cluster-ssl-enabled"><code>cluster-ssl-enabled</code></a> instead.</dd>
+  * </dl>
+  *
+  * <dl>
+  *   <a name="ssl-protocols"><dt>ssl-protocols</dt></a>
+  *   <dd><U>Description</U>: A space separated list of the SSL protocols to enable.
+  *   Those listed must be supported by the available providers.
+  *   </dd>
+  *   <dd><U>Default</U>: "any"</dd>
+  *   <dd><U>Deprecated</U>: as of 8.0 use <a href="#cluster-ssl-protocols"><code>cluster-ssl-protocols</code></a> instead.</dd>
+  * </dl>
+  *
+  * <dl>
+  *   <a name="ssl-ciphers"><dt>ssl-ciphers</dt></a>
+  *   <dd><U>Description</U>: A space separated list of the SSL cipher suites to enable.
+  *   Those listed must be supported by the available providers.
+  *   </dd>
+  *   <dd><U>Default</U>: "any"</dd>
+  *   <dd><U>Deprecated</U>: as of 8.0 use <a href="#cluster-ssl-ciphers"><code>cluster-ssl-ciphers</code></a> instead.</dd>
+  * </dl>
+  *
+  * <dl>
+  *   <a name="ssl-require-authentication"><dt>ssl-require-authentication</dt></a>
+  *   <dd><U>Description</U>: If false, allow ciphers that do not require the client
+  *   side of the connection to be authenticated.
+  *   </dd>
+  *   <dd><U>Default</U>: "true"</dd>
+  *   <dd><U>Deprecated</U>: as of 8.0 use <a href="#cluster-ssl-require-authentication"><code>cluster-ssl-require-authentication</code></a> instead.</dd>
+  * </dl>
+  *
+  * <dl>
+  *   <a name="cluster-ssl-enabled"><dt>cluster-ssl-enabled</dt></a>
+  *   <dd><U>Description</U>: If true, all gemfire socket communication is
+  *   configured to use SSL through JSSE. Preferably Use cluster-ssl-* properties
+  *   rather than ssl-* properties.
+  *   </dd>
+  *   <dd><U>Default</U>: "false"</dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="cluster-ssl-protocols"><dt>cluster-ssl-protocols</dt></a>
+  *   <dd><U>Description</U>: A space separated list of the SSL protocols to
+  *   enable. Those listed must be supported by the available providers.Preferably
+  *   use cluster-ssl-* properties rather than ssl-* properties.
+  *   </dd>
+  *   <dd><U>Default</U>: "any"</dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="cluster-ssl-ciphers"><dt>cluster-ssl-ciphers</dt></a>
+  *   <dd><U>Description</U>: A space separated list of the SSL cipher suites to
+  *   enable. Those listed must be supported by the available providers.Preferably
+  *   use cluster-ssl-* properties rather than ssl-* properties.
+  *   </dd>
+  *   <dd><U>Default</U>: "any"</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="cluster-ssl-require-authentication"><dt>cluster-ssl-require-authentication</dt></a>
+  *   <dd><U>Description</U>: If false, allow ciphers that do not require the
+  *   client side of the connection to be authenticated.Preferably use
+  *   cluster-ssl-* properties rather than ssl-* properties.
+  *   </dd>
+  *   <dd><U>Default</U>: "true"</dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="cluster-ssl-keystore"><dt>cluster-ssl-keystore</dt></a>
+  *   <dd><U>Description</U>Location of the Java keystore file containing
+  *   certificate and private key.</dd>
+  *   <dd><U>Default</U>: ""</dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="cluster-ssl-keystore-type"><dt>cluster-ssl-keystore-type</dt></a>
+  *   <dd><U>Description</U>For Java keystore file format, this property has the
+  *   value jks (or JKS).
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="cluster-ssl-keystore-password"><dt>cluster-ssl-keystore-password</dt></a>
+  *   <dd><U>Description</U>Password to access the private key from the keystore
+  *   file specified by javax.net.ssl.keyStore.
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="cluster-ssl-truststore"><dt>cluster-ssl-truststore</dt></a>
+  *   <dd><U>Description</U>Location of the Java keystore file containing the
+  *   collection of CA certificates trusted by distributed member (trust store).
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="cluster-ssl-truststore-password"><dt>cluster-ssl-truststore-password</dt></a>
+  *   <dd><U>Description</U>Password to unlock the keystore file (store password)
+  *   specified by javax.net.ssl.trustStore.
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="ack-wait-threshold"><dt>ack-wait-threshold</dt></a>
+  *   <dd><U>Description</U>: The number of seconds the distributed
+  *   system will wait for a message to be acknowledged before it sends
+  *   a <i>warning</i> level alert to signal that something might be wrong with the system
+  *   node that is unresponsive.  After sending this alert the waiter
+  *   continues to wait. The alerts are logged in the log as warnings
+  *   and will cause an alert notification in the Admin API and GemFire
+  *   JMX Agent.</dd>
+  *   <dd><U>Default</U>: "15"</dd>
+  *   <dd><U>Allowed values</U>: 1..2147483647</dd>
+  * </dl>
+  *
+  * <dl>
+  *   <a name="ack-severe-alert-threshold"><dt>ack-severe-alert-threshold</dt></a>
+  *   <dd><U>Description</U>:
+  *   The number of seconds the distributed
+  *   system will wait after the ack-wait-threshold for a message to be
+  *   acknowledged before it issues an alert at <i>severe</i> level.  The
+  *   default value is zero, which turns off this feature.<p>
+  *   when ack-severe-alert-threshold is used, GemFire will also initiate
+  *   additional checks to see if the process is alive.  These checks will
+  *   begin when the ack-wait-threshold is reached and will continue until
+  *   GemFire has been able to communicate with the process and ascertain its
+  *   status.
+  *   <dd><U>Default</U>: "0"</dd>
+  *   <dd><U>Allowed values</U>: 0..2147483647</dd>
+  * </dl>
+  *
+  * <dl>
+  *   <a name="conserve-sockets"><dt>conserve-sockets</dt></a>
+  *   <dd><U>Description</U>: If "true" then a minimal number of sockets
+  *   will be used when connecting to the distributed system. This conserves
+  *   resource usage but can cause performance to suffer.
+  *   If "false" then every application thread that sends
+  *   distribution messages to other members of the distributed system
+  *   will own its own sockets and have exclusive access to them.
+  *   The length of time a thread can have exclusive access to a socket
+  *   can be configured with "socket-lease-time".
+  *   <dd><U>Default</U>: "true"</dd>
+  *   <dd><U>Allowed values</U>: true|false</dd>
+  *   <dd><U>Since</U>: 4.1</dd>
+  * </dl>
+  * <dl>
+  *   <a name="socket-lease-time"><dt>socket-lease-time</dt></a>
+  *   <dd><U>Description</U>: The number of milliseconds a thread
+  *   can keep exclusive access to a socket that it is not actively using.
+  *   Once a thread loses its lease to a socket it will need to re-acquire
+  *   a socket the next time it sends a message.
+  *   A value of zero causes socket leases to never expire.
+  *   This property is ignored if "conserve-sockets" is true.
+  *   <dd><U>Default</U>: "15000"</dd>
+  *   <dd><U>Allowed values</U>: 0..600000</dd>
+  *   <dd><U>Since</U>: 4.1</dd>
+  * </dl>
+  * <dl>
+  *   <a name="socket-buffer-size"><dt>socket-buffer-size</dt></a>
+  *   <dd><U>Description</U>: The size of each socket buffer, in bytes.
+  *   Smaller buffers conserve memory. Larger buffers can improve performance;
+  *   in particular if large messages are being sent.
+  *   <dd><U>Default</U>: "32768"</dd>
+  *   <dd><U>Allowed values</U>: 128..16777215</dd>
+  *   <dd><U>Since</U>: 4.1</dd>
+  * </dl>
+  * <dl>
+  *   <a name="conflate-events"><dt>conflate-events</dt></a>
+  *   <dd><U>Description</U>: This is a client-side property that is passed to
+  *   the server. Allowable values are "server", "true", and "false". With the
+  *   "server" setting, this client&apos;s servers use their own client queue
+  *   conflation settings. With a "true" setting, the servers disregard their
+  *   own configuration and enable conflation of events for all regions for the
+  *   client. A "false" setting causes the client&apos;s servers to disable
+  *   conflation for all regions for the client.
+  *   <dd><U>Default</U>: "server"</dd>
+  *   <dd><U>Since</U>: 5.7</dd>
+  * </dl>
+  * <dl>
+  *   <a name="durable-client-id"><dt>durable-client-id</dt></a>
+  *   <dd><U>Description</U>: The id to be used by this durable client. When a
+  *   durable client connects to a server, this id is used by the server to
+  *   identify it. The server will accumulate updates for a durable client
+  *   while it is disconnected and deliver these events to the client when it
+  *   reconnects.
+  *   <dd><U>Default</U>: ""</dd>
+  *   <dd><U>Since</U>: 5.5</dd>
+  * </dl>
+  * <dl>
+  *   <a name="durable-client-timeout"><dt>durable-client-timeout</dt></a>
+  *   <dd><U>Description</U>: The number of seconds a disconnected durable
+  *   client is kept alive and updates are accumulated for it by the server
+  *   before it is terminated.
+  *   <dd><U>Default</U>: "300"</dd>
+  *   <dd><U>Since</U>: 5.5</dd>
+  * </dl>
+  *<dl>
+  *   <a name="security-"><dt>security-</dt></a>
+  *   <dd><U>Description</U>: Mechanism to define client credentials.
+  *   All tags with "security-" prefix is packaged together as security properties 
+  *   and passed as an argument to getCredentials of Authentication module.
+  *   These tags cannot have null values. 
+  *   </dd>
+  *   <dd><U>Default</U>: Optional</dd>
+  *   <dd><U>Allowed values</U>: any string</dd>
+  * </dl>
+  * 
+  *<dl>
+  *   <a name="security-client-auth-init"><dt>security-client-auth-init</dt></a>
+  *   <dd><U>Description</U>: Authentication module name for Clients that requires to act
+  *   upon credentials read from the gemfire.properties file.
+  *   Module must implement AuthInitialize interface.
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  *   <dd><U>Allowed values</U>: jar file:class name</dd>
+  *</dl>
+  * 
++ *<dl>
++ *   <a name="security-rest-token-service"><dt>security-rest-token-service</dt></a>
++ *   <dd><U>Description</U>: Token service module name for REST servers that that is 
++ *   required to manage tokens.
++ *   Module must implement TokenService interface.
++ *   </dd>
++ *   <dd><U>Default</U>: ""</dd>
++ *   <dd><U>Allowed values</U>: jar file:class name.method name</dd>
++ *</dl>
++ *
+  * <dl>
+  * <a name="delta-propagation">
+  * <dt>delta-propagation</dt>
+  * </a>
+  * <dd><U>Description</U>: "true" indicates that server propagates delta
+  * generated from {@link com.gemstone.gemfire.Delta} type of objects. If "false"
+  * then server propagates full object but not delta. </dd>
+  * <dd><U>Default</U>: "true"</dd>
+  * <dd><U>Allowed values</U>: true|false</dd>
+  * </dl> 
+  * 
+  * <b>Network Partitioning Detection</b>
+  * 
+  * <dl>
+  *   <a name="enable-network-partition-detection"><dt>enable-network-partition-detection</dt></a>
+  *   <dd><U>Description</U>: Turns on network partitioning detection algorithms, which
+  *   detect loss of quorum and shuts down losing partitions.
+  *   </dd>
+  *   <dd><U>Default</U>: "false"</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="disable-auto-reconnect"><dt>disable-auto-reconnect</dt></a>
+  *   <dd><U>Description</U>: By default GemFire will attempt to reconnect and
+  *   reinitialize the cache when it has been forced out of the distributed system
+  *   by a network-partition event or has otherwise been shunned by other members.
+  *   This setting will turn off this behavior.</dd>
+  *   <dd><U>Default</U>: "false"</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="max-wait-time-reconnect"><dt>max-wait-time-reconnect</dt></a>
+  *   <dd><U>Description</U>: Specifies the time in milliseconds to wait before each reconnect attempt when
+  *   a member of the distributed system is forced out of the system and auto-reconnect
+  *   is enabled (see <a href="#disable-auto-reconnect"><code>disable-auto-reconnect</code></a>) or if the deprecated required-roles
+  *   feature is being used and a role-loss has triggered a shutdown and reconnect.
+  *   </dd>
+  *   <dd><U>Default</U>: "60000"</dd>
+  *   <dd><U>Since</U>: 5.0</dd>
+  * </dl>
+  *
+  *
+  * <b>Redundancy Management</b>
+  * 
+  * <dl>
+  *   <a name="enforce-unique-host"><dt>enforce-unique-host</dt></a>
+  *   <dd><U>Description</U>: Whether or not partitioned regions will
+  *   put redundant copies of the same data in different JVMs running on the same physical host.
+  *   
+  *   By default, partitioned regions will try to put redundancy copies on different physical hosts, but it may 
+  *   put them on the same physical host if no other hosts are available. Setting this property to true
+  *   will prevent partitions regions from ever putting redundant copies of data on the same physical host.
+  *   </dd>
+  *   <dd><U>Default</U>: "false"</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="redundancy-zone"><dt>redundancy-zone</dt></a>
+  *   <dd><u>Description</u>: Defines the redundancy zone from this member. If this property is set, partitioned
+  *   regions will not put two redundant copies of data in two members with the same redundancy zone setting.   
+  *   </dd>
+  *   <dd><u>Default</u>: ""</dd>
+  * </dl>
+  *
+  * <B>Logging Configuration Properties</B>
+  *
+  * <dl>
+  *   <a name="log-file"><dt>log-file</dt></a>
+  *   <dd><U>Description</U>: Name of the file to write logging
+  *   messages to.  If the file name if "" (default) then messages are
+  *   written to standard out.
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  * </dl>
+  *
+  * <dl>
+  *   <a name="log-level"><dt>log-level</dt></a>
+  *   <dd><U>Description</U>:The type of log messages that will
+  *   actually write to the log file.
+  *   </dd>
+  *   <dd><U>Default</U>: "config"</dd>
+  *   <dd><U>Allowed values</U>: all|finest|finer|fine|config|info|warning|severe|none</dd>
+  * </dl>
+  *
+  * <dl>
+  *   <a name="statistic-sampling-enabled"><dt>statistic-sampling-enabled</dt></a>
+  *   <dd><U>Description</U>: "true" causes the statistics to be
+  *   sampled periodically and operating system statistics to be
+  *   fetched each time a sample is taken.  "false" disables sampling
+  *   which also disables operating system statistic collection.  Non
+  *   OS statistics will still be recorded in memory and can be viewed
+  *   by administration tools.  However, charts will show no activity
+  *   and no statistics will be archived while sampling is
+  *   disabled.
+  *   Starting in 7.0 the default value has been changed to true.
+  *   If statistic sampling is disabled it will also cause various
+  *   metrics seen in gfsh and pulse to always be zero.
+  *   </dd>
+  *   <dd><U>Default</U>: "true"</dd>
+  *   <dd><U>Allowed values</U>: true|false</dd>
+  * </dl>
+  *
+  * <dl>
+  *   <a name="statistic-sample-rate"><dt>statistic-sample-rate</dt></a>
+  *   <dd><U>Description</U>:The rate, in milliseconds, at which samples
+  *   of the statistics will be taken.
+  *   If set to a value less than 1000 the rate will be set to 1000 because
+  *   the VSD tool does not support sub-second sampling.
+  *   </dd>
+  *   <dd><U>Default</U>: "1000"</dd>
+  *   <dd><U>Allowed values</U>: 100..60000</dd>
+  * </dl>
+  *
+  * <dl>
+  *   <a name="statistic-archive-file"><dt>statistic-archive-file</dt></a>
+  *   <dd><U>Description</U>: The file that statistic samples are
+  *   written to.  An empty string (default) disables statistic
+  *   archival.
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  * </dl>
+  *
+  * <dl>
+  *   <a name="enable-time-statistics"><dt>enable-time-statistics</dt></a>
+  *   <dd><U>Description</U>: "true" causes additional time-based statistics to be
+  *   gathered for gemfire operations.  This can aid in discovering
+  *   where time is going in cache operations, albeit at the expense of
+  *   extra clock probes on every operation.  "false" disables the additional
+  *   time-based statistics.
+  *   </dd>
+  *   <dd><U>Default</U>: "false"</dd>
+  *   <dd><U>Allowed values</U>: true or false</dd>
+  *   <dd><U>Since</U>: 5.0</dd>
+  * </dl>
+  *
+  * <dl>
+  *   <a name="log-file-size-limit"><dt>log-file-size-limit</dt></a>
+  *   <dd><U>Description</U>: Limits, in megabytes, how large the current log
+  *   file can grow before it is closed and logging rolls on to a new file.
+  *   Set to zero to disable log rolling.
+  *   </dd>
+  *   <dd><U>Default</U>: "0"</dd>
+  *   <dd><U>Allowed values</U>: 0..1000000</dd>
+  * </dl>
+  * <dl>
+  *   <a name="log-disk-space-limit"><dt>log-disk-space-limit</dt></a>
+  *   <dd><U>Description</U>: Limits, in megabytes, how much disk space can be
+  *   consumed by old inactive log files. When the limit is
+  *   exceeded the oldest inactive log file is deleted.
+  *   Set to zero to disable automatic log file deletion.
+  *   </dd>
+  *   <dd><U>Default</U>: "0"</dd>
+  *   <dd><U>Allowed values</U>: 0..1000000</dd>
+  * </dl>
+  *
+  * <dl>
+  *   <a name="archive-file-size-limit"><dt>archive-file-size-limit</dt></a>
+  *   <dd><U>Description</U>: Limits, in megabytes, how large the current statistic archive
+  *   file can grow before it is closed and archival rolls on to a new file.
+  *   Set to zero to disable archive rolling.
+  *   </dd>
+  *   <dd><U>Default</U>: "0"</dd>
+  *   <dd><U>Allowed values</U>: 0..1000000</dd>
+  * </dl>
+  * <dl>
+  *   <a name="archive-disk-space-limit"><dt>archive-disk-space-limit</dt></a>
+  *   <dd><U>Description</U>: Limits, in megabytes, how much disk space can be
+  *   consumed by old inactive statistic archive files. When the limit is
+  *   exceeded the oldest inactive archive is deleted.
+  *   Set to zero to disable automatic archive deletion.
+  *   </dd>
+  *   <dd><U>Default</U>: "0"</dd>
+  *   <dd><U>Allowed values</U>: 0..1000000</dd>
+  * </dl>
+  *
+  * <dl>
+  *   <a name="roles"><dt>roles</dt></a>
+  *   <dd><U>Description</U>: Specifies the application roles that this member
+  *   performs in the distributed system. This is a comma delimited list of
+  *   user-defined strings. Any number of members can be configured to perform
+  *   the same role, and a member can be configured to perform any number of
+  *   roles.
+  *   Note that anything defined by the groups gemfire property will also be considered a role.
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  *   <dd><U>Since</U>: 5.0</dd>
+  *   <dd><U>Deprecated</U>: as of 7.0 use <a href="#groups"><code>groups</code></a> instead.</dd>
+  * </dl>
+  *
+  * <dl>
+  *   <a name="max-wait-time-reconnect"><dt>max-wait-time-reconnect</dt></a>
+  *   <dd><U>Description</U>: Specifies the time in milliseconds to wait before each reconnect attempt when
+  *   a member of the distributed system is forced out of the system and auto-reconnect
+  *   is enabled (see <a href="#disable-auto-reconnect"><code>disable-auto-reconnect</code></a>) or if the deprecated required-roles
+  *   feature is being used and a role-loss has triggered a shutdown and reconnect.
+  *   </dd>
+  *   <dd><U>Default</U>: "60000"</dd>
+  *   <dd><U>Since</U>: 5.0</dd>
+  * </dl>
+  *
+  * <dl>
+  *   <a name="max-num-reconnect-tries"><dt>max-num-reconnect-tries</dt></a>
+  *   <dd><U>Description</U>: Specifies the maximum number or times to attempt
+  *   to reconnect to the distributed system when required roles are missing.
+  *   This does not apply to reconnect attempts due to a forced disconnect.
+  *   </dd>
+  *   <dd><U>Default</U>: "3"</dd>
+  *   <dd><U>Since</U>: 5.0</dd>
+  * </dl>
+  *
+  * <B>Cache Configuration Properties</B>
+  *
+  * <dl>
+  *   <a name="cache-xml-file"><dt>cache-xml-file</dt></a>
+  *   <dd><U>Description</U>: Specifies the name of the XML file or resource
+  *   to initialize the cache with when it is
+  *   {@linkplain com.gemstone.gemfire.cache.CacheFactory#create created}.
+  *   Create will first look for a file that matches the value of this property.
+  *   If a file is not found then it will be searched for using
+  *   {@link java.lang.ClassLoader#getResource}.  If the value of this
+  *   property is the empty string (<code>""</code>), then the cache
+  *   will not be declaratively initialized.</dd>
+  *   <dd><U>Default</U>: "cache.xml"</dd>
+  * </dl>
+  *
+  * <dl>
+  *   <a name="memcached-port"><dt>memcached-port</dt></a>
+  *   <dd><U>Description</U>: Specifies the port used by {@link GemFireMemcachedServer}
+  *   which enables memcached clients to connect and store data in GemFire distributed system.
+  *   see {@link GemFireMemcachedServer} for other configuration options.</dd>
+  *   <dd><U>Default</U>: "0" disables GemFireMemcachedServer</dd>
+  *   <dd><U>Allowed values</U>: 0..65535</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="memcached-protocol"><dt>memcached-protocol</dt></a>
+  *   <dd><U>Description</U>: Specifies the protocol used by {@link GemFireMemcachedServer}</dd>
+  *   <dd><U>Default</U>: "ASCII"</dd>
+  *   <dd><U>Allowed values</U>: "ASCII" "BINARY"</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="memcached-bind-address"><dt>memcached-bind-address</dt></a>
+  *   <dd><U>Description</U>: Specifies the bind address used by {@link GemFireMemcachedServer}</dd>
+  *   <dd><U>Default</U>: ""</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="redis-port"><dt>redis-port</dt></a>
+  *   <dd><U>Description</U>: Specifies the port used by {@link GemFireRedisServer}
+  *   which enables redis clients to connect and store data in GemFire distributed system.
+  *   see {@link GemFireRedisServer} for other configuration options.</dd>
+  *   <dd><U>Default</U>: "0" disables GemFireMemcachedServer</dd>
+  *   <dd><U>Allowed values</U>: 0..65535</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="redis-bind-address"><dt>redis-bind-address</dt></a>
+  *   <dd><U>Description</U>: Specifies the bind address used by {@link GemFireRedisServer}</dd>
+  *   <dd><U>Default</U>: ""</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="redis-password"><dt>redis-password</dt></a>
+  *   <dd><U>Description</U>: Specifies the password to authenticate a client of {@link GemFireRedisServer}</dd>
+  *   <dd><U>Default</U>: ""</dd>
+  * </dl>
+  * 
+  * <B>Asynchronous Message Properties</B>
+  *
+  * <dl>
+  *   <a name="async-distribution-timeout"><dt>async-distribution-timeout</dt></a>
+  *   <dd><U>Description</U>: The number of milliseconds before a
+  *   publishing process should attempt to distribute a cache operation
+  *   before switching over to asynchronous messaging for this process.
+  *   To enable asynchronous messaging, the value must be set above
+  *   zero. If a thread that is publishing to the cache exceeds this value
+  *   when attempting to distribute to this process, it will switch to
+  *   asynchronous messaging until this process catches up, departs, or
+  *   some specified limit is reached, such as <a href="#async-queue-timeout">
+  *   async-queue-timeout</a> or <a href="#async-max-queue-size">
+  *   async-max-queue-size</a>.
+  *   </dd>
+  *   <dd><U>Default</U>: "0"</dd>
+  *   <dd><U>Allowed values</U>: 0..60000</dd>
+  * </dl>
+  * <dl>
+  *   <a name="async-queue-timeout"><dt>async-queue-timeout</dt></a>
+  *   <dd><U>Description</U>: The number of milliseconds a queuing
+  *   publisher may enqueue asynchronous messages without any distribution
+  *   to this process before that publisher requests this process to
+  *   depart. If a queuing publisher has not been able to send this process
+  *   any cache operations prior to the timeout, this process will attempt
+  *   to close its cache and disconnect from the distributed system.
+  *   </dd>
+  *   <dd><U>Default</U>: "60000"</dd>
+  *   <dd><U>Allowed values</U>: 0..86400000</dd>
+  * </dl>
+  * <dl>
+  *   <a name="async-max-queue-size"><dt>async-max-queue-size</dt></a>
+  *   <dd><U>Description</U>: The maximum size in megabytes that a
+  *   publishing process should be allowed to asynchronously enqueue
+  *   for this process before asking this process to depart from the
+  *   distributed system.
+  *   </dd>
+  *   <dd><U>Default</U>: "8"</dd>
+  *   <dd><U>Allowed values</U>: 0..1024</dd>
+  * </dl>
+  * 
+  * <b>JMX Management</b>
+  * 
+  * <dl>
+  *   <a name="jmx-manager"><dt>jmx-manager</dt></a>
+  *   <dd><U>Description</U>: If true then this member is willing to be a jmx-manager.
+  *   All the other jmx-manager properties will be used when it does become a manager.
+  *   If this property is false then all other jmx-manager properties are ignored.
+  *   </dd>
+  *   <dd><U>Default</U>: "false except on locators"</dd>
+  * </dl>
+  *
+  * <dl>
+  *   <a name="jmx-manager-start"><dt>jmx-manager-start</dt></a>
+  *   <dd><U>Description</U>: If true then this member will start a jmx manager when
+  *   it creates a cache. Management tools like gfsh can be configured to connect
+  *   to the jmx-manager. In most cases you should not set this because a jmx manager will
+  *   automatically be started when needed on a member that sets "jmx-manager" to true.
+  *   Ignored if jmx-manager is false.
+  *   </dd>
+  *   <dd><U>Default</U>: "false"</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="jmx-manager-port"><dt>jmx-manager-port</dt></a>
+  *   <dd><U>Description</U>: The port this jmx manager will listen to for client connections.
+  *   If this property is set to zero then GemFire will not allow remote client connections 
+  *   but you can alternatively use the standard system properties supported by the JVM 
+  *   for configuring access from remote JMX clients.
+  *   Ignored if jmx-manager is false.
+  *   </dd>
+  *   <dd><U>Default</U>: "1099"</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="jmx-manager-ssl"><dt>jmx-manager-ssl</dt></a>
+  *   <dd><U>Description</U>: If true and jmx-manager-port is not zero then the jmx-manager
+  *   will only accept ssl connections. Note that the ssl-enabled property does not apply to the jmx-manager
+  *   but the other ssl properties do. This allows ssl to be configured for just the jmx-manager
+  *   without needing to configure it for the other GemFire connections.
+  *   Ignored if jmx-manager is false.
+  *   </dd>
+  *   <dd><U>Default</U>: "false"</dd>
+  *   <dd><U>Deprecated</U>: as of 8.0 use <a href="#jmx-manager-ssl-enabled"><code>jmx-manager-ssl-enabled</code></a> instead.</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="jmx-manager-ssl-enabled"><dt>jmx-manager-ssl-enabled</dt></a>
+  *   <dd><U>Description</U>: If true and jmx-manager-port is not zero then the jmx-manager
+  *   will only accept ssl connections. Note that the ssl-enabled property does not apply to the jmx-manager
+  *   but the other ssl properties do. This allows ssl to be configured for just the jmx-manager
+  *   without needing to configure it for the other GemFire connections.
+  *   Ignored if jmx-manager is false.
+  *   </dd>
+  *   <dd><U>Default</U>: "false"</dd>
+  * </dl> 
+  * 
+  * <dl>
+  *   <a name="jmx-manager-ssl-ciphers"><dt>jmx-manager-ssl-ciphers</dt></a>
+  *   <dd><U>Description</U>: A space seperated list of the SSL cipher suites to enable.
+  *   Those listed must be supported by the available providers.
+  *   </dd>   
+  *   <dd><U>Default</U>: "any"</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="jmx-manager-ssl-protocols"><dt>jmx-manager-ssl-protocols</dt></a>
+  *   <dd><U>Description</U>: A space seperated list of the SSL protocols to enable.
+  *   Those listed must be supported by the available providers.
+  *   </dd>
+  *   <dd><U>Default</U>: "any"</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="jmx-manager-ssl-require-authentication"><dt>jmx-manager-ssl-require-authentication</dt></a>
+  *   <dd><U>Description</U>: If false, allow ciphers that do not require the client
+  *   side of the connection to be authenticated.
+  *   </dd>   
+  *   <dd><U>Default</U>: "true"</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="jmx-manager-ssl-keystore"><dt>jmx-manager-ssl-keystore</dt></a>
+  *   <dd><U>Description</U>Location of the Java keystore file containing
+  *   certificate and private key.
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="jmx-manager-ssl-keystore-type"><dt>jmx-manager-ssl-keystore-type</dt></a>
+  *   <dd><U>Description</U>For Java keystore file format, this property has the
+  *   value jks (or JKS).
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="jmx-manager-ssl-keystore-password"><dt>jmx-manager-ssl-keystore-password</dt></a>
+  *   <dd><U>Description</U>Password to access the private key from the keystore
+  *   file specified by javax.net.ssl.keyStore.
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="jmx-manager-ssl-truststore"><dt>jmx-manager-ssl-truststore</dt></a>
+  *   <dd><U>Description</U>Location of the Java keystore file containing the
+  *   collection of CA certificates trusted by manager (trust store).
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="jmx-manager-ssl-truststore-password"><dt>jmx-manager-ssl-truststore-password</dt></a>
+  *   <dd><U>Description</U>Password to unlock the keystore file (store password)
+  *   specified by javax.net.ssl.trustStore.
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="jmx-manager-bind-address"><dt>jmx-manager-bind-address</dt></a>
+  *   <dd><U>Description</U>: By default the jmx-manager when configured with a port will listen
+  *   on all the local host's addresses. You can use this property to configure what ip address
+  *   or host name the jmx-manager will listen on. In addition, if the embedded http server is
+  *   started, it will also bind to this address if it is set.
+  *   Ignored if jmx-manager is false or jmx-manager-port is zero.
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="jmx-manager-hostname-for-clients"><dt>jmx-manager-hostname-for-clients</dt></a>
+  *   <dd><U>Description</U>: Lets you control what hostname will be given to clients that ask
+  *   the locator for the location of a jmx manager. By default the ip address that the jmx-manager
+  *   reports is used. But for clients on a different network this property allows you to configure
+  *   a different hostname that will be given to clients.
+  *   Ignored if jmx-manager is false or jmx-manager-port is zero.
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="jmx-manager-password-file"><dt>jmx-manager-password-file</dt></a>
+  *   <dd><U>Description</U>: By default the jmx-manager will allow clients without credentials to connect.
+  *   If this property is set to the name of a file then only clients that connect with credentials that
+  *   match an entry in this file will be allowed.
+  *   Most JVMs require that the file is only readable by the owner.
+  *   For more information about the format of this file see Oracle's documentation of the
+  *   com.sun.management.jmxremote.password.file system property.
+  *   Ignored if jmx-manager is false or if jmx-manager-port is zero.
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  * </dl>
+  *
+  * <dl>
+  *   <a name="jmx-manager-access-file"><dt>jmx-manager-access-file</dt></a>
+  *   <dd><U>Description</U>: By default the jmx-manager will allow full access to all mbeans by any client.
+  *   If this property is set to the name of a file then it can restrict clients to only being able to read
+  *   mbeans; they will not be able to modify mbeans. The access level can be configured differently in this
+  *   file for each user name defined in the password file.
+  *   For more information about the format of this file see Oracle's documentation of the
+  *   com.sun.management.jmxremote.access.file system property.
+  *   Ignored if jmx-manager is false or if jmx-manager-port is zero.
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  * </dl>
+  *
+  * <dl>
+  *   <a name="jmx-manager-http-port"><dt>jmx-manager-http-port</dt></a>
+  *   <dd><U>Description</U>: If non-zero then when the jmx manager is started, an embedded
+  *   web server will also be started and will listen on this port.
+  *   The web server is used to host the GemFire Pulse application.
+  *   If you are hosting the Pulse web app in your own web server, then disable
+  *   this embedded server by setting this property to zero.
+  *   Ignored if jmx-manager is false.
+  *   </dd>
+  *   <dd><U>Default</U>: "7070"</dd>
+  *   <dd><U>Deprecated</U>: as of 8.0 use <a href="#http-service-port"><code>http-service-port</code></a> instead.</dd>
+  * </dl>
+  *
+  * <dl>
+  *   <a name="jmx-manager-update-rate"><dt>jmx-manager-update-rate</dt></a>
+  *   <dd><U>Description</U>: The rate, in milliseconds, at which this member will push updates
+  *   to any jmx managers. Currently this value should be greater than or equal to the
+  *   statistic-sample-rate. Setting this value too high will cause stale values to be
+  *   seen by gfsh and pulse.
+  *   </dd>
+  *   <dd><U>Default</U>: "2000"</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="http-service-port"><dt>http-service-port</dt></a>
+  *   <dd><U>Description</U>: Specifies the port used by the GemFire HTTP service. If
+  *   configured with non-zero value, then an HTTP service will listen on this port.
+  *   A value of "0" disables Gemfire HTTP service.
+  *   </dd>
+  *   <dd><U>Default</U>: "7070" </dd>
+  *   <dd><U>Allowed values</U>: 0..65535</dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  *  
+  * <dl>
+  *   <a name="http-service-bind-address"><dt>http-service-bind-address</dt></a>
+  *   <dd><U>Description</U>: The address where the GemFire HTTP service will listen
+  *   for remote connections. One can use this property to configure what ip
+  *   address or host name the HTTP service will listen on. When not set, by
+  *   default the HTTP service will listen on the local host's address.
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  * 
+  * <b> HTTP Service SSL Configuration </b>
+  * 
+  * <dl>
+  *   <a name="http-service-ssl-enabled"><dt>http-service-ssl-enabled</dt></a>
+  *   <dd><U>Description</U>: Specifies if http service is started with separate ssl configuration.
+  *   If not specified, global property cluster-ssl-enabled (and its other related properties) are used
+  *   to secure http service. All http-service-ssl-* properties are inherited from cluster-ssl-* properties. 
+  *   User can ovverride them using specific http-service-ssl-* property.
+  *   </dd>
+  *   <dd><U>Default</U>: <code>false</code></dd>
+  *   <dd><U>Since</U>: 8.1</dd>
+  * </dl> 
+  * 
+  * <dl>
+  *   <a name="http-service-ssl-ciphers"><dt>http-service-ssl-ciphers</dt></a>
+  *   <dd><U>Description</U>: A space separated list of the SSL cipher suites to enable.
+  *   Those listed must be supported by the available providers.
+  *   </dd>
+  *   <dd><U>Default</U>: <code>any</code></dd>
+  *   <dd><U>Since</U>: 8.1</dd>
+  * </dl>
+  *  
+  * <dl>
+  *   <a name="http-service-ssl-protocols"><dt>http-service-ssl-protocols</dt></a>
+  *   <dd><U>Description</U>: A space separated list of the SSL protocols to enable.
+  *   Those listed must be supported by the available providers.
+  *   </dd>
+  *   <dd><U>Default</U>: <code>any</code></dd>
+  *   <dd><U>Since</U>: 8.1</dd>
+  * </dl>
+  *  
+  * <dl>
+  *   <a name="http-service-ssl-require-authentication"><dt>http-service-ssl-require-authentication</dt></a>
+  *   <dd><U>Description</U>: If false, allow ciphers that do not require the client
+  *   side of the connection to be authenticated.
+  *   </dd>
+  *   <dd><U>Default</U>: <code>false</code></dd>
+  *   <dd><U>Since</U>: 8.1</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="http-service-ssl-keystore"><dt>http-service-ssl-keystore</dt></a>
+  *   <dd><U>Description</U>Location of the Java keystore file containing
+  *   certificate and private key.
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  *   <dd><U>Since</U>: 8.1</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="http-service-ssl-keystore-type"><dt>http-service-ssl-keystore-type</dt></a>
+  *   <dd><U>Description</U>For Java keystore file format, this property has the
+  *   value jks (or JKS).
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  *   <dd><U>Since</U>: 8.1</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="http-service-ssl-keystore-password"><dt>http-service-ssl-keystore-password</dt></a>
+  *   <dd><U>Description</U>Password to access the private key from the keystore
+  *   file specified by javax.net.ssl.keyStore.
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  *   <dd><U>Since</U>: 8.1</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="http-service-ssl-truststore"><dt>http-service-ssl-truststore</dt></a>
+  *   <dd><U>Description</U>Location of the Java keystore file containing the
+  *   collection of CA certificates trusted by server (trust store).
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  *   <dd><U>Since</U>: 8.1</dd>
+  * </dl>
+  *  
+  * <dl>
+  *   <a name="http-service-ssl-truststore-password"><dt>http-service-ssl-truststore-password</dt></a>
+  *   <dd><U>Description</U>Password to unlock the keystore file (store password)
+  *   specified by javax.net.ssl.trustStore.
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  *   <dd><U>Since</U>: 8.1</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="start-dev-rest-api"><dt>start-dev-rest-api</dt></a>
+  *   <dd><U>Description</U>: If true then developer(API) REST service will be
+  *   started when cache is created. REST service can be configured using
+  *   <code>http-service-port</code> and <code>http-service-bind-address</code>
+  *   properties.</dd>
+  *   <dd><U>Default</U>: "false"</dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  * 
+  * <b>Off-Heap Memory</b>
+  * 
+  * <dl>
+  *   <a name="off-heap-memory-size"><dt>off-heap-memory-size</dt></a>
+  *   <dd><U>Description</U>: The total size of off-heap memory specified as
+  *   off-heap-memory-size=<n>[g|m]. <n> is the size. [g|m] indicates
+  *   whether the size should be interpreted as gigabytes or megabytes.
+  *   By default no off-heap memory is allocated.
+  *   A non-zero value will cause that much memory to be allocated from the operating
+  *   system and reserved for off-heap use.
+  *   </dd>
+  *   <dd><U>Default</U>: <code>""</code></dd>
+  *   <dd><U>Since</U>: 9.0</dd>
+  * </dl>
+  * 
+  * <b>Cluster Configuration Service</b>
+  * <dl>
+  *   <a name="enable-cluster-configuration"><dt>enable-cluster-configuration</dt></a>
+  *   <dd><U>Description</U>: "true" causes creation of cluster configuration service on dedicated locators. The cluster configuration service on dedicated locator(s) 
+  *   would serve the configuration to new members joining the distributed system and also save the configuration changes caused by the Gfsh commands.
+  *   This property is only applicable to dedicated locators. 
+  *   </dd>
+  *   <dd><U>Default</U>: "true"</dd> 
+  *   <dd><U>Allowed values</U>: true or false</dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="use-cluster-configuration"><dt>use-cluster-configuration</dt></a>
+  *   <dd><U>Description</U>: This property is only applicable for data members (non client and non locator) 
+  *   "true" causes a member to request and uses the configuration from cluster configuration services running on dedicated locators. 
+  *   "false" causes a member to not request the configuration from the configuration services running on the locator(s).
+  *   </dd>
+  *   <dd><U>Default</U>: "true"</dd> 
+  *   <dd><U>Allowed values</U>: true or false</dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="load-cluster-configuration-from-dir"><dt>load-cluster-configuration-from-dir</dt></a>
+  *   <dd><U>Description</U>: "true" causes loading of cluster configuration from "cluster_config" directory in the locator. 
+  *   This property is only applicable to dedicated locators which have "enable-cluster-configuration" set to true.
+  *   </dd>
+  *   <dd><U>Default</U>: "false"</dd>
+  *   <dd><U>Allowed values</U>: true or false</dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  * 
+  *  * <dl>
+  *   <a name="cluster-configuration-dir"><dt>cluster-configuration-dir</dt></a>
+  *   <dd><U>Description</U>: This property specifies the directory in which the cluster configuration related disk-store and artifacts are stored  
+  *   This property is only applicable to dedicated locators which have "enable-cluster-configuration" set to true.
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  *   <dd><U>Allowed values</U></dd>
+  *   <dd><U>Since</U>: 8.1</dd>
+  * </dl>
+  * 
+  * <b> Server SSL Configuration </b>
+  * 
+  * <dl>
+  *   <a name="server-ssl-enabled"><dt>server-ssl-enabled</dt></a>
+  *   <dd><U>Description</U>: Specifies if server is started with separate ssl configuration.
+  *   If not specified global property ssl-enabled (and its other related properties) are used
+  *   to create server socket
+  *   </dd>
+  *   <dd><U>Default</U>: <code>false</code></dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl> 
+  * 
+  * <dl>
+  *   <a name="server-ssl-ciphers"><dt>server-ssl-ciphers</dt></a>
+  *   <dd><U>Description</U>: A space seperated list of the SSL cipher suites to enable.
+  *   Those listed must be supported by the available providers.
+  *   </dd>
+  *   <dd><U>Default</U>: <code>any</code></dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  *  
+  * <dl>
+  *   <a name="server-ssl-protocols"><dt>server-ssl-protocols</dt></a>
+  *   <dd><U>Description</U>: A space seperated list of the SSL protocols to enable.
+  *   Those listed must be supported by the available providers.
+  *   </dd>
+  *   <dd><U>Default</U>: <code>any</code></dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  *  
+  * <dl>
+  *   <a name="server-ssl-require-authentication"><dt>server-ssl-require-authentication</dt></a>
+  *   <dd><U>Description</U>: If false, allow ciphers that do not require the client
+  *   side of the connection to be authenticated.
+  *   </dd>
+  *   <dd><U>Default</U>: <code>any</code></dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="server-ssl-keystore"><dt>server-ssl-keystore</dt></a>
+  *   <dd><U>Description</U>Location of the Java keystore file containing
+  *   certificate and private key.
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="server-ssl-keystore-type"><dt>server-ssl-keystore-type</dt></a>
+  *   <dd><U>Description</U>For Java keystore file format, this property has the
+  *   value jks (or JKS).
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="server-ssl-keystore-password"><dt>server-ssl-keystore-password</dt></a>
+  *   <dd><U>Description</U>Password to access the private key from the keystore
+  *   file specified by javax.net.ssl.keyStore.
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="server-ssl-truststore"><dt>server-ssl-truststore</dt></a>
+  *   <dd><U>Description</U>Location of the Java keystore file containing the
+  *   collection of CA certificates trusted by server (trust store).
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="server-ssl-truststore-password"><dt>server-ssl-truststore-password</dt></a>
+  *   <dd><U>Description</U>Password to unlock the keystore file (store password)
+  *   specified by javax.net.ssl.trustStore.
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  * 
+  * <b> Gateway SSL Configuration </b>
+  * 
+  * <dl>
+  *   <a name="gateway-ssl-enabled"><dt>gateway-ssl-enabled</dt></a>
+  *   <dd><U>Description</U>: Specifies if gateway is started with separate ssl configuration.
+  *   If not specified global property ssl-enabled (and its other related properties) are used
+  *   to create gateway socket
+  *   </dd>
+  *   <dd><U>Default</U>: <code>false</code></dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl> 
+  * 
+  * <dl>
+  *   <a name="gateway-ssl-ciphers"><dt>gateway-ssl-ciphers</dt></a>
+  *   <dd><U>Description</U>: A space seperated list of the SSL cipher suites to enable.
+  *   Those listed must be supported by the available providers.
+  *   </dd>
+  *   <dd><U>Default</U>: <code>any</code></dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  *  
+  * <dl>
+  *   <a name="gateway-ssl-protocols"><dt>gateway-ssl-protocols</dt></a>
+  *   <dd><U>Description</U>: A space seperated list of the SSL protocols to enable.
+  *   Those listed must be supported by the available providers.
+  *   </dd>
+  *   <dd><U>Default</U>: <code>any</code></dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  *  
+  * <dl>
+  *   <a name="gateway-ssl-require-authentication"><dt>gateway-ssl-require-authentication</dt></a>
+  *   <dd><U>Description</U>: If false, allow ciphers that do not require the Gateway Sender
+  *   side of the connection to be authenticated.
+  *   </dd>
+  *   <dd><U>Default</U>: <code>any</code></dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="gateway-ssl-keystore"><dt>gateway-ssl-keystore</dt></a>
+  *   <dd><U>Description</U>Location of the Java keystore file containing
+  *   certificate and private key.
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="gateway-ssl-keystore-type"><dt>gateway-ssl-keystore-type</dt></a>
+  *   <dd><U>Description</U>For Java keystore file format, this property has the
+  *   value jks (or JKS).
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="gateway-ssl-keystore-password"><dt>gateway-ssl-keystore-password</dt></a>
+  *   <dd><U>Description</U>Password to access the private key from the keystore
+  *   file specified by javax.net.ssl.keyStore.
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="gateway-ssl-truststore"><dt>gateway-ssl-truststore</dt></a>
+  *   <dd><U>Description</U>Location of the Java keystore file containing the
+  *   collection of CA certificates trusted by server (trust store).
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="gateway-ssl-truststore-password"><dt>gateway-ssl-truststore-password</dt></a>
+  *   <dd><U>Description</U>Password to unlock the keystore file (store password)
+  *   specified by javax.net.ssl.trustStore.
+  *   </dd>
+  *   <dd><U>Default</U>: ""</dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  * 
+  * <b>Miscellaneous</b> 
+  *
+  * <dl>
+  *   <a name="lock-memory"><dt>lock-memory</dt></a>
+  *   <dd><U>Description</U>: Include this option to lock GemFire heap and off-heap memory pages into RAM.
+  *   This prevents the operating system from swapping the pages out to disk, which can cause sever
+  *   performance degradation. When you use this command, also configure the operating system limits for
+  *   locked memory.
+  *   </dd>
+  *   <dd><U>Default</U>: <code>"false"</code></dd>
+  *   <dd><U>Since</U>: 9.0</dd>
+  * </dl>
+  * 
+  * <dl>
+  *   <a name="deploy-working-dir"><dt>deploy-working-dir</dt></a>
+  *   <dd><U>Description</U>: Specifies the working directory which this
+  *   distributed member will use to persist deployed JAR files.  This directory
+  *   should be unchanged when restarting the member so that it can read what
+  *   was previously persisted. The default is the current working directory
+  *   as determined by <code>System.getProperty("user.dir")</code>.
+  *   </dd>
+  *   <dd><U>Default</U>: <code>System.getProperty("user.dir")</code></dd>
+  *   <dd><U>Since</U>: 7.0</dd>
+  * </dl>
+  *
+  * <dl>
+  *   <a name="user-command-packages"><dt>user-command-packages</dt></a>
+  *   <dd><U>Description</U>: A comma separated list of Java packages that
+  *   contain classes implementing the <code>CommandMarker</code> interface.
+  *   Matching classes will be loaded when the VM starts and will be available
+  *   in the GFSH command-line utility.
+  *   </dd>
+  *   <dd><U>Default</U>: <code>""</code></dd>
+  *   <dd><U>Since</U>: 8.0</dd>
+  * </dl>
+  * 
+  * @author Darrel Schneider
+  * @author Bruce Schuchardt
+  *
+  * @since 3.0
+  */
+ public abstract class DistributedSystem implements StatisticsFactory {
+ 
+   /** 
+    * The instances of <code>DistributedSystem</code> created in this
+    * VM. Presently only one connect to a distributed system is allowed in a VM.
+    * This set is never modified in place (it is always read only) but
+    * the reference can be updated by holders of {@link #existingSystemsLock}.
+    */
+   protected static volatile List existingSystems = Collections.EMPTY_LIST;
+   /**
+    * This lock must be changed to add or remove a system.
+    * It is notified when a system is removed.
+    * 
+    * @see #existingSystems
+    */
+   protected static final Object existingSystemsLock = new Object();
+ 
+   //public static Properties props = new Properties();
+ 
+   /**
+    * Used to indicate a reconnect is tried in case of required role
+    * loss.
+    * */
+ 
+  // public static boolean reconnect = false;
+ 
+   ////////////////////////  Static Methods  ////////////////////////
+ 
+   /**
+    * Connects to a GemFire distributed system with a configuration
+    * supplemented by the given properties.
+    * <P>The actual configuration attribute values used to connect comes
+    * from the following sources:
+    * <OL>
+    * <LI>System properties. If a system property named
+    *     "<code>gemfire.</code><em>propertyName</em>" is defined
+    *     and its value is not an empty string
+    *     then its value will be used for the named configuration attribute.
+    *
+    * <LI>Code properties. Otherwise if a property is defined in the <code>config</code>
+    *     parameter object and its value is not an empty string
+    *     then its value will be used for that configuration attribute.
+    * <LI>File properties. Otherwise if a property is defined in a configuration property
+    *     file found by this application and its value is not an empty string
+    *     then its value will be used for that configuration attribute.
+    *     A configuration property file may not exist.
+    *     See the following section for how configuration property files are found.
+    * <LI>Defaults. Otherwise a default value is used.
+    * </OL>
+    * <P>
+    * The name of the property file can be
+    * specified using the "gemfirePropertyFile" system property.
+    * If the system property is set to a relative file name then it
+    * is searched for in following locations.
+    * If the system property is set to an absolute file name then that
+    * file is used as the property file.
+    * If the system property is not set, then the name of the property
+    * file defaults to "gemfire.properties".  The configuration file is
+    * searched for in the following locations:
+    *
+    * <OL>
+    * <LI>Current directory (directory in which the VM was
+    *     launched)</LI>
+    * <LI>User's home directory</LI>
+    * <LI>Class path (loaded as a {@linkplain
+    *     ClassLoader#getResource(String) system resource})</LI>
+    * </OL>
+    *
+    * If the configuration file cannot be located, then the property
+    * will have its default value as described <a
+    * href="#configuration">above</a>.
+    *
+    * @param config
+    *        The <a href="#configuration">configuration properties</a>
+    *        used when connecting to the distributed system
+    *
+    * @throws IllegalArgumentException
+    *         If <code>config</code> contains an unknown configuration
+    *         property or a configuration property does not have an
+    *         allowed value.  Note that the values of boolean
+    *         properties are parsed using {@link Boolean#valueOf(java.lang.String)}.
+    *         Therefore all values other than "true" values will be
+    *         considered <code>false</code> -- an exception will not be
+    *         thrown.
+    * @throws IllegalStateException
+    *         If a <code>DistributedSystem</code> with a different
+    *         configuration has already been created in this VM or if
+    *         this VM is {@link
+    *         com.gemstone.gemfire.admin.AdminDistributedSystem
+    *         administering} a distributed system.
+    * @throws com.gemstone.gemfire.GemFireIOException
+    *         Problems while reading configuration properties file or
+    *         while opening the log file.
+    * @throws com.gemstone.gemfire.GemFireConfigException
+    *         The distribution transport is not configured correctly
+    *
+    * @deprecated as of 6.5 use {@link CacheFactory#create} or {@link ClientCacheFactory#create} instead.
+    *
+    * */
+   public static DistributedSystem connect(Properties config) {
+     if (config == null) {
+       // fix for bug 33992
+       config = new Properties();
+     }
+ //     {
+ //       LogWriterI18n logger =
+ //         new LocalLogWriter(LocalLogWriter.ALL_LEVEL, System.out);
+ //       logger.info("DistributedSystem: Connecting with " + config,
+ //                   new Exception("Stack trace"));
+ //     }
+     synchronized (existingSystemsLock) {
+       if (DistributionManager.isDedicatedAdminVM) {
+         // For a dedicated admin VM, check to see if there is already
+         // a connect that will suit our purposes.
+         DistributedSystem existingSystem = getConnection(config);
+         if (existingSystem != null) {
+           return existingSystem;
+         }
+ 
+       } else {
+         boolean existingSystemDisconnecting = true;
+         while (!existingSystems.isEmpty() && existingSystemDisconnecting) {
+           Assert.assertTrue(existingSystems.size() == 1);
+ 
+           InternalDistributedSystem existingSystem =
+               (InternalDistributedSystem) existingSystems.get(0);
+           existingSystemDisconnecting = existingSystem.isDisconnecting();
+           if (existingSystemDisconnecting) {
+             boolean interrupted = Thread.interrupted();
+             try {
+               // no notify for existingSystemsLock, just to release the sync
+               existingSystemsLock.wait(50);
+             } 
+             catch (InterruptedException ex) {
+               interrupted = true;
+             }
+             finally {
+               if (interrupted) {
+                 Thread.currentThread().interrupt();
+               }
+             }
+           } else if (existingSystem.isConnected()) {
+             existingSystem.validateSameProperties(config,
+                 existingSystem.isConnected());
+             return existingSystem;
+           } else {
+           // This should not happen: existingSystem.isConnected()==false && existingSystem.isDisconnecting()==false 
+             throw new AssertionError("system should not be disconnecting==false and isConnected==falsed");
+           }
+         }
+       }
+ 
+       // Make a new connection to the distributed system
+       try {
+         InternalDistributedSystem newSystem =
+           InternalDistributedSystem.newInstance(config);
+         addSystem(newSystem);
+         return newSystem;
+ 
+       }
+       catch (GemFireSecurityException ex) {
+         ex.fillInStackTrace(); // Make it harder to figure out where jgroups code lives.
+         throw ex;
+       }
+     }
+   }
+ 
+   protected static void addSystem(InternalDistributedSystem newSystem) {
+     synchronized (existingSystemsLock) {
+       int size = existingSystems.size();
+       if (size == 0) {
+         existingSystems = Collections.singletonList(newSystem);
+       }
+       else {
+         ArrayList l = new ArrayList(size+1);
+         l.addAll(existingSystems);
+         l.add(0, newSystem);
+         existingSystems = Collections.unmodifiableList(l);
+       }
+     }
+   }
+   protected static boolean removeSystem(InternalDistributedSystem oldSystem) {
+     synchronized (existingSystemsLock) {
+       ArrayList l = new ArrayList(existingSystems);
+       boolean result = l.remove(oldSystem);
+       if (result) {
+         int size = l.size();
+         if (size == 0) {
+           existingSystems = Collections.EMPTY_LIST;
+         }
+         else if (size == 1) {
+           existingSystems = Collections.singletonList(l.get(0));
+         }
+         else {
+           existingSystems = Collections.unmodifiableList(l);
+         }
+       }
+       return result;
+     }
+   }
+   
+   /**
+    * Sets the calling thread's socket policy.
+    * This value will override that default set by the
+    * <code>conserve-sockets</code> configuration property.
+    * @param conserveSockets If <code>true</code> then calling thread will share
+    *   socket connections with other threads.
+    *   If <code>false</code> then calling thread will have its own sockets.
+    * @since 4.1
+    */
+   public static void setThreadsSocketPolicy(boolean conserveSockets) {
+     if (conserveSockets) {
+       ConnectionTable.threadWantsSharedResources();
+     } else {
+       ConnectionTable.threadWantsOwnResources();
+     }
+   }
+ 
+ 
+ 
+   /**
+    * Frees up any socket resources owned by the calling thread.
+    * @since 4.1
+    */
+   public static void releaseThreadsSockets() {
+     ConnectionTable.releaseThreadsSockets();
+   }
+ 
+   /**
+    * Returns an existing connection to the distributed system
+    * described by the given properties.
+    *
+    * @since 4.0
+    */
+   private static DistributedSystem getConnection(Properties config) {
+     // In an admin VM you can have a connection to more than one
+     // distributed system.  If we are already connected to the desired
+     // distributed system, return that connection.
+     List l = existingSystems;
+     for (Iterator iter = l.iterator(); iter.hasNext(); ) {
+       InternalDistributedSystem existingSystem =
+         (InternalDistributedSystem) iter.next();
+       if (existingSystem.sameSystemAs(config)) {
+         Assert.assertTrue(existingSystem.isConnected());
+         return existingSystem;
+       }
+     }
+ 
+     return null;
+   }
+ 
+   /**
+    * Returns a connection to the distributed system that is
+    * appropriate for administration.  This method is for internal use
+    * only by the admin API.
+    *
+    * @since 4.0
+    */
+   protected static DistributedSystem connectForAdmin(Properties props) {
+     DistributedSystem existing = getConnection(props);
+     if (existing != null) {
+       return existing;
+ 
+     } else {
+       //logger.info("creating new distributed system for admin");
+       //for (java.util.Enumeration en=props.propertyNames(); en.hasMoreElements(); ) {
+       //  String prop=(String)en.nextElement();
+       //  logger.info(prop + "=" + props.getProperty(prop));
+       //}
+       props.setProperty(DistributionConfig.CONSERVE_SOCKETS_NAME, "true");
+       // LOG: no longer using the LogWriter that was passed in
+       return connect(props);
+     }
+   }
+ 
+   /**
+    * see {@link com.gemstone.gemfire.admin.AdminDistributedSystemFactory}
+    * @since 5.7
+    */
+   protected static void setEnableAdministrationOnly(boolean adminOnly) {
+     synchronized (existingSystemsLock) {
+       if( existingSystems != null && !existingSystems.isEmpty()) {
+         throw new IllegalStateException(
+           LocalizedStrings.DistributedSystem_THIS_VM_ALREADY_HAS_ONE_OR_MORE_DISTRIBUTED_SYSTEM_CONNECTIONS_0
+             .toLocalizedString(existingSystems));
+       }
+       DistributionManager.isDedicatedAdminVM = adminOnly;
+     }
+   }
+ 
+ //   /**
+ //    * Connects to a GemFire distributed system with a configuration
+ //    * supplemented by the given properties.
+ //    *
+ //    * @param config
+ //    *        The <a href="#configuration">configuration properties</a>
+ //    *        used when connecting to the distributed system
+ //    * @param callback
+ //    *        A user-specified object that is delivered with the {@link
+ //    *        com.gemstone.gemfire.admin.SystemMembershipEvent}
+ //    *        triggered by connecting.
+ //    *
+ //    * @see #connect(Properties)
+ //    * @see com.gemstone.gemfire.admin.SystemMembershipListener#memberJoined
+ //    *
+ //    * @since 4.0
+ //    */
+ //   public static DistributedSystem connect(Properties config,
+ //                                           Object callback) {
+ //     throw new UnsupportedOperationException("Not implemented yet");
+ //   }
+ 
+   //////////////////////  Constructors  //////////////////////
+ 
+   /**
+    * Creates a new instance of <code>DistributedSystem</code>.  This
+    * constructor is protected so that it may only be invoked by
+    * subclasses.
+    */
+   protected DistributedSystem() {
+ 
+   }
+ 
+   ////////////////////  Instance Methods  ////////////////////
+ 
+   /**
+    * Returns the <code>LogWriter</code> used for logging information.
+    * See <A href="#logFile">logFile</A>.
+    *
+    * @throws IllegalStateException
+    *         This VM has {@linkplain #disconnect() disconnected} from the
+    *         distributed system.
+    */
+   public abstract LogWriter getLogWriter();
+ 
+   /**
+    * Returns the <code>LogWriter</code> used for logging security related
+    * information. See <A href="#logFile">logFile</A>.
+    * 
+    * @throws IllegalStateException
+    *                 This VM has {@linkplain #disconnect() disconnected} from
+    *                 the distributed system.
+    * @since 5.5
+    */
+   public abstract LogWriter getSecurityLogWriter();
+ 
+   /**
+    * Returns the configuration properties.
+    * @return the configuration Properties
+    */
+   public abstract Properties getProperties();
+ 
+   /**
+    * Returns the security specific configuration properties.
+    * @return the configuration Properties
+    * @since 5.5
+    */
+   public abstract Properties getSecurityProperties();
+ 
+   /**
+    * 
+    * @return the cancel criterion for this system
+    */
+   public abstract CancelCriterion getCancelCriterion();
+   
+   /**
+    * Disconnects from this distributed system.  This operation will
+    * close the distribution manager and render the {@link
+    * com.gemstone.gemfire.cache.Cache Cache} and all distributed
+    * collections obtained from this distributed system inoperable.
+    * After a disconnect has completed, a VM may connect to another
+    * distributed system.
+    *
+    * <P>
+    *
+    * Attempts to access a distributed system after a VM has
+    * disconnected from it will result in an {@link
+    * IllegalStateException} being thrown.
+    * @deprecated as of 6.5 use {@link Cache#close} or {@link ClientCache#close} instead.
+    */
+   public abstract void disconnect();
+   /**
+    * Returns whether or not this <code>DistributedSystem</code> is
+    * connected to the distributed system.
+    *
+    * @see #disconnect()
+    */
+   public abstract boolean isConnected();
+ 
+   /**
+    * Returns the id of this connection to the distributed system.
+    *
+    * @deprecated {@link #getDistributedMember} provides an identity for
+    *             this connection that is unique across the entire
+    *             distributed system.
+    */
+   @Deprecated
+   public abstract long getId();
+ 
+   /**
+    * Returns a string that uniquely identifies this connection to the
+    * distributed system.
+    *
+    * @see com.gemstone.gemfire.admin.SystemMembershipEvent#getMemberId
+    *
+    * @since 4.0
+    * @deprecated as of GemFire 5.0, use {@link #getDistributedMember} instead
+    */
+   @Deprecated
+   public abstract String getMemberId();
+ 
+   /**
+    * Returns the {@link DistributedMember} that identifies this connection to
+    * the distributed system.
+    * @return the member that represents this distributed system connection.
+    * @since 5.0
+    */
+   public abstract DistributedMember getDistributedMember();
+   
+   /**
+    * Returns a set of all the other members in this distributed system.
+    * @return returns a set of all the other members in this distributed system.
+    * @since 7.0
+    */
+   public abstract Set<DistributedMember> getAllOtherMembers();
+ 
+   /**
+    * Returns a set of all the members in the given group.
+    * Members join a group be setting the "groups" gemfire property.
+    * @return returns a set of all the member in a group.
+    * @since 7.0
+    */
+   public abstract Set<DistributedMember> getGroupMembers(String group);
+   
+   
+   /**
+    * Find the set of distributed members running on a given address
+    * 
+    * @return a set of all DistributedMembers that have any interfaces
+    * that match the given IP address. May be empty if there are no members.
+    * 
+    * @since 7.1
+    */ 
+    public abstract Set<DistributedMember> findDistributedMembers(InetAddress address);
+ 
+    /**
+    * Find the distributed member with the given name
+    * 
+    * @return the distributed member that has the given name, or null if
+    * no member is currently running with the given name.
+    * 
+    * @since 7.1
+    */
+    public abstract DistributedMember findDistributedMember(String name);
+ 
+   /**
+    * Returns the <a href="#name">name</a> of this connection to the
+    * distributed system.
+    */
+   public abstract String getName();
+ 
+   /**
+    * The <code>PROPERTIES_FILE_PROPERTY</code> is the system property
+    * that can be used to specify the name of the properties file that the 
+    * connect method will check for when it looks for a properties file. Unless
+    * the value specifies the fully qualified path to the file, the file will 
+    * be searched for, in order, in the following directories:
+    * <ol>
+    * <li> the current directory
+    * <li> the home directory
+    * <li> the class path
+    * </ol>
+    * Only the first file found will be used.
+    * <p>
+    * The default value is {@link #PROPERTIES_FILE_DEFAULT}. However 
+    * if the <code>PROPERTIES_FILE_PROPERTY</code> is set then its value 
+    * will be used instead of the default. If this value is a relative file
+    * system path then the above search is done.  If it is an absolute
+    * file system path then that file must exist; no search for it is
+    * done.
+    * 
+    * @see #PROPERTIES_FILE_DEFAULT
+    * @see #getPropertiesFile()
+    * @since 9.0
+    */
+   public static final String PROPERTIES_FILE_PROPERTY = "gemfirePropertyFile";
+   
+   /** 
+    * The default value of <code>PROPERTIES_FILE_PROPERTY</code> is
+    * <code>"gemfire.properties"</code>. The location of the file will be 
+    * resolved during connect as described for {@link #PROPERTIES_FILE_PROPERTY}.
+    * 
+    * @see #PROPERTIES_FILE_PROPERTY
+    * @see #getPropertiesFile()
+    * @since 9.0
+    */
+   public static final String PROPERTIES_FILE_DEFAULT = "gemfire.properties";
+ 
+   /**
+    * Returns the current value of {@link #PROPERTIES_FILE_PROPERTY} system 
+    * property if set or the default value {@link #PROPERTIES_FILE_DEFAULT}.
+    * 
+    * @see #PROPERTIES_FILE_PROPERTY
+    * @see #PROPERTIES_FILE_DEFAULT
+    * @since 9.0
+    */
+   public static String getPropertiesFile() {
+ 	return System.getProperty(PROPERTIES_FILE_PROPERTY, PROPERTIES_FILE_DEFAULT);
+   }
+   
+   /**
+    * The <code>PROPERTY_FILE</code> is the name of the
+    * properties file that the connect method will check for when
+    * it looks for a properties file.
+    * The file will be searched for, in order, in the following directories:
+    * <ol>
+    * <li> the current directory
+    * <li> the home directory
+    * <li> the class path
+    * </ol>
+    * Only the first file found will be used.
+    * <p>
+    * The default value of PROPERTY_FILE is
+    * <code>"gemfire.properties"</code>.  However if the
+    * "gemfirePropertyFile" system property is set then its value is
+    * the value of PROPERTY_FILE. If this value is a relative file
+    * system path then the above search is done.  If it is an absolute
+    * file system path then that file must exist; no search for it is
+    * done.
+    * 
+    * @see #getPropertiesFile()
+    * @since 5.0
+    * @deprecated As of 9.0, please use {@link #getPropertiesFile()} instead. 
+    */
+   public static String PROPERTY_FILE = getPropertiesFile();
+ 
+   /**
+    * The <code>SECURITY_PROPERTIES_FILE_PROPERTY</code> is the system property
+    * that can be used to specify the name of the property file that the 
+    * connect method will check for when it looks for a property file. Unless
+    * the value specifies the fully qualified path to the file, the file will 
+    * be searched for, in order, in the following directories:
+    * <ol>
+    * <li> the current directory
+    * <li> the home directory
+    * <li> the class path
+    * </ol>
+    * Only the first file found will be used.
+    * <p>
+    * The default value is {@link #SECURITY_PROPERTIES_FILE_DEFAULT}. However 
+    * if the <code>SECURITY_PROPERTIES_FILE_PROPERTY</code> is set then its value 
+    * will be used instead of the default. If this value is a relative file
+    * system path then the above search is done.  If it is an absolute
+    * file system path then that file must exist; no search for it is
+    * done.
+    * 
+    * @see #SECURITY_PROPERTIES_FILE_DEFAULT
+    * @see #getSecurityPropertiesFile()
+    * @since 9.0
+    */
+   public static final String SECURITY_PROPERTIES_FILE_PROPERTY = "gemfireSecurityPropertyFile";
+   
+   /** 
+    * The default value of <code>SECURITY_PROPERTIES_FILE_PROPERTY</code> is
+    * <code>"gfsecurity.properties"</code>. The location of the file will be 
+    * resolved during connect as described for {@link #SECURITY_PROPERTIES_FILE_PROPERTY}.
+    * 
+    * @see #SECURITY_PROPERTIES_FILE_PROPERTY
+    * @see #getSecurityPropertiesFile()
+    * @since 9.0
+    */
+   public static final String SECURITY_PROPERTIES_FILE_DEFAULT = "gfsecurity.properties";
+ 
+   /**
+    * Returns the current value of {@link #SECURITY_PROPERTIES_FILE_PROPERTY} system 
+    * property if set or the default value {@link #SECURITY_PROPERTIES_FILE_DEFAULT}.
+    * 
+    * @see #SECURITY_PROPERTIES_FILE_PROPERTY
+    * @see #SECURITY_PROPERTIES_FILE_DEFAULT
+    * @since 9.0
+    */
+   public static String getSecurityPropertiesFile() {
+ 	return System.getProperty(SECURITY_PROPERTIES_FILE_PROPERTY, SECURITY_PROPERTIES_FILE_DEFAULT);
+   }
+   
+   /**
+    * The <code>SECURITY_PROPERTY_FILE</code> is the name of the
+    * property file that the connect method will check for when
+    * it looks for a security property file.
+    * The file will be searched for, in order, in the following directories:
+    * <ol>
+    * <li> the current directory
+    * <li> the home directory
+    * <li> th

<TRUNCATED>