<!--
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.
-->
<html>
<head>
<title>GemFire System Properties</title>
</head>
<body>
<h1>Introduction</h1>
Please edit this file by hand in order to facilitate merges!
<p>
Please keep entries in this file in alphabetical order in order to
facilitate merging!
<h1>Java Methods Swept</h1>
These are the methods that I have found that reference the system properties
table.  If you can think of others I have missed, add them (alphabetically)
to this list, perform the sweep using Eclipse and add your results.
<p>
<ul>
<li><code>Boolean#getBoolean(String)</code></li>
<li><code>Integer#getInteger(String)</code></li>
<li><code>Integer#getInteger(String, Integer)</code></li>
<li><code>Integer#getInteger(String, int)</code></li>
<li><code>Long#getLong(String)</code></li>
<li><code>Long#getLong(String, Long)</code></li>
<li><code>Long#getLong(String, long)</code></li>
<li><code>System#getProperties</code></li>
<li><code>System#getProperty(String)</code></li>
<li><code>System#getProperty(String, String)</code></li>
</ul>

<h1>Miscellaneous</h1>

DistributionConfigImpl constructor prepends <code>gemfire.</code> to each
valid attribute name, then looks for a System property with that value.  If
such a property name exists, it overrides any read from a property file or
any properties passed into the caller.
<p>
<code>org.apache.geode.internal.cache.Oplog</code> looks for properties
of the form:
<ul>

<li>fullRegionName + <code>_UNIT_BUFF_SIZE</code></li> -- <em>Integer</em>;
"Asif: The minimum unit size of the Pool created. The ByteBuffer pools
present at different indexes will be multiple of this size. Default unit
buffer size is 1024"

<li>fullRegionName + <code>_MAX_POOL_SIZE</code></li> -- <em>Integer</em>;
"The initial pool size . Default pool size is zero"

<li>fullRegionName + <code>_WAIT_TIME</code></li> -- <em>Integer</em>;
"Asif: MAX time in milliseconds for which a thread will wait for a buffer to
get freed up. If not available in that duration a buffer will be created on
the fly. The timeout has no meaning if the max pool size is -1( no upper
bound)"
</ul>
<p>

<h1>Properties, in Alphabetical Order</h1>


<dl>

<!-- -------------------------------------------------------  -->
<dt><strong>AdminDistributedSystemImpl.TIMEOUT_MS</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 60000)
<p>
See <code>org.apache.geode.admin.internal.AdminDistributedSystemImpl#TIMEOUT_MS</code>.
<p>
TBA
</dd>


<!-- -------------------------------------------------------  -->
<dt><strong>AvailablePort.fastRandom</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.AvailablePort</code>.
<p>
If true, an instance of <code>java.util.Random</code> is used instead of
<code>java.security.SecureRandom</code> to randomly select a port.
<p>
This property is available in case there is a performance issue involved
with random port selection.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>AvailablePort.timeout</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 2000)
<p>
See <code>org.apache.geode.internal.AvailablePort#isPortAvailable</code>.
<p>
When establishing a locator, this sets the <code>SO_TIMEOUT</code>
characteristic on the UDP port that we attempt to test.
<p>
Units are in milliseconds.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>Bridge.VERBOSE</strong></dt>
<dd>
<em>Public:</em> false
<p>
See <code>org.apache.geode.internal.cache.BridgeServerImpl.#VERBOSE</code>.
<p>
Enable verbose logging in the BridgeServer
<p>
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>BridgeServer.HANDSHAKE_POOL_SIZE</strong></dt>
<dd>
<em>Public:</em> true
<p>
<em>Integer</em> (default is 4)
<p>
See <code>org.apache.geode.internal.cache.tier.sockets.AcceptorImpl#HANDSHAKE_POOL_SIZE</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>BridgeServer.MAXIMUM_CHUNK_SIZE</strong></dt>
<dd>
<em>Public:</em> true
<p>
<em>Integer</em> (default is 100)
<p>
See <code>org.apache.geode.internal.cache.tier.sockets.ServerConnection#maximumChunkSize</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>BridgeServer.MAX_INCOMING_DATA</strong></dt>
<dd>
<em>Public:</em> true
<p>
<em>Integer</em> (default is -1)
<p>
See <code>org.apache.geode.internal.cache.tier.sockets.ServerConnection#MAX_INCOMING_DATA</code>.
<p>
<pre>
   Maximum number of concurrent incoming client message bytes that a bridge server will allow.
   Once a server is working on this number additional incoming client messages
   will wait until one of them completes or fails.
   The bytes are computed based in the size sent in the incoming msg header.
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>BridgeServer.MAX_INCOMING_MSGS</strong></dt>
<dd>
<em>Public:</em> true
<p>
<em>Integer</em> (default is -1)
<p>
See <code>org.apache.geode.internal.cache.tier.sockets.ServerConnection#MAX_INCOMING_MSGS</code>.
<p>
<pre>
   Maximum number of concurrent incoming client messages that a bridge server will allow.
   Once a server is working on this number additional incoming client messages
   will wait until one of them completes or fails.
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>BridgeServer.SELECTOR</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.cache.tier.sockets.AcceptorImpl#DEPRECATED_SELECTOR</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>BridgeServer.SELECTOR_POOL_SIZE</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 16)
<p>
See <code>org.apache.geode.internal.cache.tier.sockets.AcceptorImpl#DEPRECATED_SELECTOR_POOL_SIZE</code>.
<p>
<pre>
   This system property is only used if max-threads == 0.
   This is for 5.0.2 backwards compatibility.
   @deprecated since 5.1 use cache-server max-threads instead
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>BridgeServer.SOCKET_BUFFER_SIZE</strong></dt>
<dd>
<em>Public:</em> true
<p>
<em>Integer</em> (default is 32768)
<p>
See <code>org.apache.geode.internal.cache.tier.sockets.CacheClientNotifier#socketBufferSize</code>.
<p>
See <code>org.apache.geode.internal.cache.tier.sockets.CacheClientUpdater#CacheClietnUpdater(String, EndpointImpl, List, LogWriter, boolean, DistributedSystem)</code>.
<p>
<pre>
   The size of the server-to-client communication socket buffers. This can be
   modified using the BridgeServer.SOCKET_BUFFER_SIZE system property.
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>BridgeServer.acceptTimeout</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 2900)
<p>
See <code>org.apache.geode.internal.cache.tier.sockets.AcceptorImpl#acceptTimeout</code>.
<p>
Units are in milliseconds.
<p>
<pre>
  Test value for accept timeout
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>BridgeServer.backlog</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 1280)
<p>
See <code>org.apache.geode.internal.cache.tier.sockets.AcceptorImpl</code>
constructor.
<p>
This is the TCP/IP "accept" backlog for client/server communications.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>BridgeServer.handShakeTimeout</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 59000)
<p>
See <code>org.apache.geode.internal.cache.tier.sockets.AcceptorImpl#handshakeTimeout</code>.
<p>
<pre>
  Test value for handshake timeout.  Note the capital S in "handShakeTimeout".
</pre>
<p>
Units are in milliseconds.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>DataSerializer.DEBUG</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.DataSerializer#DEBUG</code>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>DataSerializer.DUMP_SERIALIZED</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.DataSerializer#DUMP_SERIALIZED</code>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>DistributedLockService.VERBOSE</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.distributed.internal.locks.DLockLogWriter#VERBOSE</code>.
<p>
Enables logging for this class.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>DistributionManager.DISCONNECT_WAIT</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Long</em> (default is 10 * 1000)
<p>
See <code>org.apache.geode.distributed.internal.InternalDistributedSystem#MAX_DISCONNECT_WAIT</code>.
<p>
<pre>
   This is how much time, in milliseconds to allow a disconnect listener
   to run before we interrupt it.
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>DistributionManager.INCOMING_QUEUE_LIMIT</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 80000)
<p>
See <code>org.apache.geode.distributed.internal.DistributionManager#INCOMING_QUEUE_LIMIT</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>DistributionManager.INCOMING_QUEUE_THROTTLE</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is INCOMING_QUEUE_LIMIT * .75)
<p>
See <code>org.apache.geode.distributed.internal.DistributionManager#INCOMING_QUEUE_THROTTLE</code>.
<p>
TBA
</dd>


<!-- -------------------------------------------------------  -->
<dt><strong>DistributionManager.MAX_FE_THREADS</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer:</em> (default is 100 or 16 * number of processors, whichever is larger)
<p>
Maximum function execution threads.
<p>
See <code>org.apache.geode.distributed.internal.DistributionManager#MAX_FE_THREADS</code>.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>DistributionManager.MAX_PR_THREADS</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 200 or 32 * number of processors, whichever is larger)
<p>
See <code>org.apache.geode.distributed.internal.DistributionManager#MAX_PR_THREADS</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>DistributionManager.MAX_SERIAL_QUEUE_THREAD</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 20)
<p>
See <code>org.apache.geode.distributed.internal.DistributionManager#MAX_SERIAL_QUEUE_THREAD</code>.
<p>
<pre>
  Max number of serial Queue executors, in case of multi-serial-queue executor
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>DistributionManager.MAX_THREADS</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 1000)
<p>
See <code>org.apache.geode.distributed.internal.DistributionManager#MAX_THREADS</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>DistributionManager.MAX_WAITING_THREADS</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is Integer.MAX_VALUE)
<p>
See <code>org.apache.geode.distributed.internal.DistributionManager#MAX_WAITING_THREADS</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>DistributionManager.OptimizedUpdateByteLimit</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 2000)
<p>
See <code>org.apache.geode.internal.cache.SearchLoadAndWriteProcessor#SMALL_BLOB_SIZE</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>DistributionManager.PUSHER_QUEUE_SIZE</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 4096)
<p>
See <code>org.apache.geode.distributed.internal.DistributionManager#PUSHER_QUEUE_SIZE</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>DistributionManager.PUSHER_THREADS</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 50)
<p>
See <code>org.apache.geode.distributed.internal.DistributionManager#PUSHER_THREADS</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>DistributionManager.SERIAL_QUEUE_BYTE_LIMIT</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 40 * 1024 * 1024)
<p>
See <code>org.apache.geode.distributed.internal.DistributionManager#SERIAL_QUEUE_BYTE_LIMIT</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>DistributionManager.SERIAL_QUEUE_SIZE_LIMIT</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 20000)
<p>
See <code>org.apache.geode.distributed.internal.DistributionManager#SERIAL_QUEUE_SIZE_LIMIT</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>DistributionManager.SERIAL_QUEUE_SIZE_THROTTLE</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is SERIAL_QUEUE_SIZE_LIMIT * THROTTLE_PERCENT)
<p>
See <code>org.apache.geode.distributed.internal.DistributionManager#SERIAL_QUEUE_THROTTLE</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>DistributionManager.SERIAL_QUEUE_THROTTLE_PERCENT</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 75)
<p>
See <code>org.apache.geode.distributed.internal.DistributionManager#THROTTLE_PERCENT</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>DistributionManager.STARTUP_TIMEOUT</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 15000)
<p>
See <code>org.apache.geode.distributed.internal.DistributionManager#STARTUP_TIMEOUT</code>.
<p>
Units are in milliseconds.  This is how long a Startup message waits before
it declares the peer to be nonresponsive.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>DistributionManager.TIMEOUT</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Long</em> (default is -1)
<p>
See <code>org.apache.geode.distributed.internal.DistributionManager#TIMEOUT</code>.
<p>
<pre>
  The number of milliseconds to wait for distribution-related
  things to happen */
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>DistributionManager.TOTAL_SERIAL_QUEUE_BYTE_LIMIT</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 80 * 1024 * 1024)
<p>
See <code>org.apache.geode.distributed.internal.DistributionManager#TOTAL_SERIAL_QUEUE_BYTE_LIMIT</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>DistributionManager.TOTAL_SERIAL_QUEUE_THROTTLE</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is SERIAL_QUEUE_BYTE_LIMIT * THROTTLE_PERCENT)
<p>
See <code>org.apache.geode.distributed.internal.DistributionManager#TOTAL_SERIAL_QUEUE_THROTTLE</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>DistributionManager.VERBOSE</strong></dt>
<dd>
<em>Public:</em> true
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.distributed.internal.DistributionManager#VERBOSE</code>.
<p>
Enables certain additional (fine-level?) logging.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>DistributionManager.VERBOSE_VIEWS</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.distributed.internal.membership.gms.GMSMembershipManager#VERBOSE_VIEWS</code>.
<p>
Enables additional info-level logging
(see <code>#addShunnedMember</code> and <code>#addSurpriseMember</code>).
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>DistributionManager.enqueueOrderedMessages</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.distributed.internal.DistributionManager#INLINE_PROCESS</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>DistributionManager.requireAllStartupResponses</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.distributed.internal.DistributionManager#sendStartupMessage</code>.
<p>
Fail distributed system join unless a startup response is received from
<em>all</em> peers.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>DistributionManager.singleSerialExecutor</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.distributed.internal.DistributionManager#MULTI_SERIAL_EXECUTORS</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>DistributionManager.syncEvents</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.distributed.internal.DistributionManager#SYNC_EVENTS</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>DynamicRegionFactory.disablePersistence</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.cache.DynamicRegionFactory#DISABLE_PERSIST_BACKUP</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>DynamicRegionFactory.disableRegisterInterest</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.cache.DynamicRegionFactory#DISABLE_REGISTER_INTEREST</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>DynamicRegionFactory.msDelay</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Long</em> (default is 250)
<p>
See <code>org.apache.geode.cache.DynamicRegionFactory#regionCreateSleepMillis</code>.
<p>
<pre>
   This controls the delay introduced to try and avoid any race conditions
   between propagation of newly created Dynamic Regions
   and the Entries put into them.
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>Gateway.EVENT_TIMEOUT</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 5 * 60 * 1000)
<p>
See <code>org.apache.geode.internal.cache.GatewayImpl.EventWrapper#EVENT_TIMEOUT</code>.
<p>
Units are in milliseconds.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>Gateway.MAXIMUM_SHUTDOWN_PEEKS</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 20)
<p>
See <code>org.apache.geode.internal.cache.GatewayImpl.#MAXIMUM_SHUTDOWN_PEEKS</code>.
<p>
<pre>
  The number of times to peek on shutdown before giving up and shutting down.
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>Gateway.QUEUE_SIZE_THRESHOLD</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 5000)
<p>
See <code>org.apache.geode.internal.cache.GatewayImpl.#QUEUE_SIZE_THRESHOLD</code>.
<p>
<pre>
  The queue size threshold used to warn the user. If the queue reaches this
  size, log a warning.
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>Gateway.TOKEN_TIMEOUT</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 15000)
<p>
See <code>org.apache.geode.internal.cache.GatewayImpl.#TOKEN_TIMEOUT</code>.
<p>
<pre>
  Timeout tokens in the unprocessedEvents map after this many milliseconds.
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>GetInitialImage.chunkSize</strong></dt>
<dd>
<em>Public:</em> true
<p>
<em>Integer</em> (default is 500 * 1024)
<p>
See <code>org.apache.geode.internal.cache.InitialImageOperation#CHUNK_SIZE_IN_BYTES</code>.
<p>
<pre>
   maximum number of bytes to put in a single message
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>GrantorRequestProcessor.ELDER_CHANGE_SLEEP</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Long</em> (default is 100)
<p>
See <code>org.apache.geode.distributed.internal.locks.GrantorRequestProcessor#ELDER_CHANGE_SLEEP</code>.
<p>
<pre>
   The number of milliseconds to sleep for elder change if current elder
   is departing (and already sent shutdown msg) but is still in the View.
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.shunned-member-timeout</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 90)
<p>
See <code>org.apache.geode.distributed.internal.membership.gms.GMSMembershipManager#isShunned</code>.
<p>
This is the length of time during which incoming messages from a departed peer
are regarded as out-of-order messages and are hence ignored (shunned).
<p>
Units are in seconds.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>Locator.forceLocatorDMType</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
Used internally by the locator. It sets it to true to tell other code
that the member type should be LOCATOR.
As of 7.0.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>Locator.inhibitDMBanner</strong></dt>
<dd>
<em>Public:</em> true
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.distributed.internal.InternalLocator#INHIBIT_DM_BANNER</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>MAX_WAIT_FOR_SPACE</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 20)
<p>
See <code>org.apache.geode.internal.cache.ComplexDiskRegion#MAX_WAIT_FOR_SPACE</code>.
<p>
Units are in seconds.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>StatArchiveReader.dump</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.StatArchiveReader(File[], ValueFilter[], boolean)</code>.
<p>
See <code>org.apache.geode.internal.StatArchiveReader#dump(PrintWriter)</code>.
<p>
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>StatArchiveReader.dumpall</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.StatArchiveReader(File[], ValueFilter[], boolean)</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>StateFlushOperation.DEBUG</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
<em>Boolean</em>
<p>
See <code>org.apache.geode.internal.cache.StateFlushOperation#DEBUG</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>ack-threshold-exception</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.distributed.internal.ReplyProcessor21#THROW_EXCEPTION_ON_TIMEOUT</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>java.util.concurrent.NanoTimerProvider</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>String</em>
<p>
Default is <code>java.util.concurrent.NanoTimerProvider</code>.
<p>
See java.util.concurrent.Utils#providerProp</code>.
<p>
This is the name of a class that implements the
<code>java.util.concurrent.helpers.NanoTimer</code>
interface.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>org.apache.geode.logging.internal.OSProcess.trace</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>String</em>
<p>
See <code>org.apache.geode.internal.OSProcess#bgexec(String[], File, File, boolean)</code>.
<p>
If this property exists and has non-zero length, additional information about
the executed command is printed to <code>System.out</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>org.apache.geode.internal.cache.PartitionedRegion-logging</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.cache.PartitionedRegion#initPrInternals</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>org.apache.geode.internal.cache.PartitionedRegionDataStore-logging (constructor)</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.cache.PartitionedRegionDataStore.PartitionedRegionDataStore(PartitionedRegion)</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>disable-intelligent-msg</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.distributed.internal.DistributionAdvisor#disabled</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>GemFire.ALWAYS_REPLICATE_UPDATES</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
If true then non-replicate regions will turn a remote update they receive
on an entry they do not have into a local create.
By default these updates would have been ignored.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.ALLOW_PERSISTENT_TRANSACTIONS</strong></dt>
<dd>
<em>Public:</em> true
<p>
<em>Boolean</em> (default is false)
<p>
If true then transactions on persistent regions are allowed.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.artificialGatewayDelay</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> -1
<p>
See <code>org.apache.geode.internal.cache.GatewayEventRemoteDispatcher#ARTIFICIAL_DELAY</code>
<p>
Introduce artificial delay (in ms) before batch sending to simulate a real WAN link
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.ASCII_STRINGS</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.tcp.MsgStreamer#ASCII_STRINGS</code>.
<p>
See <code>org.apache.geode.internal.HeapDataOutputStream#ASCII_STRINGS</code>.
<p>
Causes GemFire's implementation of writeUTF to only work for Strings that use the ASCII
character set. So Strings that use the international characters will be serialized incorrectly.
If you know your Strings only use ASCII setting this to true can improve your performance if
you are using writeUTF frequently. Most Strings are serialized using DataSerializer.writeString
which does not use writeUTF.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.AutoSerializer.SAFE</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
If set to true forces the ReflectionBasedAutoSerializer to not use the
sun.misc.Unsafe code. Using Unsafe optimizes performance but reduces
portablity.
By default ReflectionBasedAutoSerializer will attempt to use Unsafe but
silently not use it if it is not available.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.AutoSerializer.UNSAFE</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
If set to true then the ReflectionBasedAutoSerializer will throw
an exception if it is not able to use the sun.misc.Unsafe code.
Using Unsafe optimizes performance but reduces portablity.
By default ReflectionBasedAutoSerializer will attempt to use Unsafe but
silently not use it if it is not available.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.BUCKET_RECOVERY_DELAY</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Long</em> (default is 2)
<p>
See <code>org.apache.geode.internal.cache.PRHAFailureAndRecoveryPRovider#BUCKET_RECOVERY_DELAY</code>.
<p>
Mean amount of time, in seconds, to delay before starting to
recover a bucket.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.BUCKET_RECOVERY_JITTER</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Long</em> (default is 200)
<p>
See <code>org.apache.geode.internal.cache.PRHAFailureAndRecoveryPRovider#BUCKET_RECOVERY_JITTER</code>.
<p>
<pre>
   Maximum additional amount of time, in milliseconds, to skew bucket creation, 
   to stagger recovery and creation in a starting system. 
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.BucketAdvisor.getPrimaryTimeout</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Long</em> (default is 1000 * 60)
<p>
See <code>org.apache.geode.internal.cache.BucketAdvisor#GET_PRIMARY_TIMEOUT</code>.
<p>
<pre>
   Specifies the timeout to wait for a primary when calling {@link 
   #getPrimary()} 
</pre>
<p>
Units are in milliseconds.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.Cache.ASYNC_EVENT_LISTENERS</strong></dt>
<dd>
<em>Public:</em> true
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.cache.GemFireCache#ASYNC_EVENT_LISTENERS</code>.
<p>
If true then cache event listeners will be invoked by a background thread.
By default they are invoked by the same thread that is doing the cache operation.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.Cache.EVENT_QUEUE_LIMIT</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 4096)
<p>
See <code>org.apache.geode.internal.cache.GemFireCache#EVENT_QUEUE_LIMIT</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.Cache.defaultLockLease</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 120)
<p>
See <code>org.apache.geode.internal.cache.GemFireCache#DEFAULT_LOCK_LEASE</code>.
<p>
<pre>
  The default duration (in seconds) of a lease on a distributed lock
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.Cache.defaultLockTimeout</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 60)
<p>
See <code>org.apache.geode.internal.cache.GemFireCache#DEFAULT_LOCK_TIMEOUT</code>.
<p>
<pre>
  The default number of seconds to wait for a distributed lock
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.Cache.defaultSearchTimeout</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 300)
<p>
See <code>org.apache.geode.internal.cache.GemFireCache#DEFAULT_SEARCH_TIMEOUT</code>.
<p>
<pre>
  The default amount of time to wait for a <code>netSearch</code> to
  complete
</pre>
<p>
Units are in seconds.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.Cache.startSerialNumber</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is Integer.MAX_VALUE - 10)
<p>
See <code>org.apache.geode.internal.cache.GemFireCache#START_SERIAL_NUMBER</code>.
<p>
<pre>
  Specifies the starting serial number for the {@link #serialNumberSequencer
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.CacheDistributionAdvisor.rolloverThreshold</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 1000)
<p>
See <code>org.apache.geode.internal.cache.CacheDistributionAdvisor#ROLLOVER_THRESHOLD</code>.
<p>
<pre>
  Used to compare profile versioning numbers against 
  {@link Integer#MAX_VALUE} and {@link Integer#MIN_VALUE} to determine
  if a rollover has occurred.
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.Capacity</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 230000)
<p>
See <code>org.apache.geode.internal.cache.ha.HARegionQueueAttributes#BLOCKING_QUEUE_CAPACITY</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.DEBUG_EXPIRATION</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.cache.ExpirationScheduler#DEBUG</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.DEFAULT_MAX_OPLOG_SIZE</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Long</em> (default is 1024 * 1024 * 1024)
<p>
See <code>org.apache.geode.internal.cache.DiskWriteAttributesImpl#DEFAULT_MAX_OPLOG_SIZE</code>.
<p>
<pre>
  default max in bytes
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.DLockService.automateFreeResources</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See org.apache.geode.distributed.internal.locks.DLockService.DLockService(String, DistributedSystem, boolean, boolean, boolean).
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.DLockService.LockGrantorId.rolloverMargin</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 10000)
<p>
See <code>org.apache.geode.distributed.internal.locks.LockGrantorId#ROLLOVER_MARGIN</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.DLockService.debug.disallowLockRequestLoop</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.distributed.internal.locks.DLockService#DEBUG_LOCK_REQUEST_LOOP</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.DLockService.debug.disallowLockRequestLoopCount</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 20)
<p>
See <code>org.apache.geode.distributed.internal.locks.DLockService#DEBUG_LOCK_REQUEST_LOOP_COUNT</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.DLockService.debug.disallowNotHolder</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.distributed.internal.locks.DLockService#DEBUG_DISALLOW_NOT_HOLDER</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.DLockService.debug.enforceSafeExit</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.distributed.internal.locks.DLockService#DEBUG_ENFORCE_SAFE_EXIT</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.DLockService.debug.nonGrantorDestroyLoop</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.distributed.internal.locks.DLockService#DEBUG_NONGRANTOR_DESTROY_LOOP</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.DLockService.debug.nonGrantorDestroyLoopCount</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 20)
<p>
See <code>org.apache.geode.distributed.internal.locks.DLockService#DEBUG_NONGRANTOR_DESTROY_LOOP_COUNT</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.DLockService.notGrantorSleep</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Long</em> (default is 2000)
<p>
See <code>org.apache.geode.distributed.internal.locks.DLockService#NOT_GRANTOR_SLEEP</code>.
<p>
Units are in milliseconds.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.DistributedLockService.startSerialNumber</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is Integer.MAX_VALUE - 10)
<p>
See <code>org.apache.geode.distributed.internal.locks.DLockService#START_SERIAL_NUMBER</code>.
<p>
<pre>
  Specifies the starting serial number for the {@link #serialNumberSequencer}
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.DO_EXPENSIVE_VALIDATIONS</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.cache.LocalRegion#DO_EXPENSIVE_VALIDATIONS</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.DistributionAdvisor.startVersionNumber</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is Integer.MAX_VALUE - 10)
<p>
See <code>org.apache.geode.distributed.internal.DistributionAdvisor#START_VERSION_NUMBER</code>.
<p>
<pre>
   Specifies the starting version number for the {@link 
   #profileVersionSequencer}.
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.EXPIRY_THREADS</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 0)
<p>
See <code>org.apache.geode.internal.cache.ExpiryTask class init</code>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.EXPIRY_UNITS_MS</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.cache.LocalRegion#EXPIRY_UNITS_MS</code>.
<p>
<pre>
   Used by unit tests to set expiry to milliseconds instead of the default
   seconds. Used in ExpiryTask.
</pre>
<p>
TBA
</dd>


<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.IDLE_THREAD_TIMEOUT</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 15000)
<p>
See <code>org.apache.geode.distributed.internal.PooledExecutorWithDMStats#PooledExecutorWithDMStats(BlockingQueue, int, PoolStatHelper, ThreadFactory)</code>.
<p>
Units are in milliseconds.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.isDedicatedServer</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
Tell admin API whether the member is a dedicated cache server
</dd>

<!-- -------------------------------------------------------  -->
    <dt><strong>gemfire.locator-load-imbalance-threshold</strong></dt>
    <dd>
        <em>Public:</em> true
        <p>
            <em>Float</em> (default is 10.0)
        <p>
            See <code>org.apache.geode.distributed.internal.LocatorLoadSnapshot</code>
        <p>
            Sets the connection count threshold for rebalancing clients.  When a
        client asks the locator whether it should switch to a less loaded server
        the locator will respond "no" if the connection-count gap between the
        highest-loaded server and the least-loaded server is within this threshold.
        If the threshold is reached the locator will aggressivley reassign clients
        until balance is re-established.
    </dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.memoryEventTolerance</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default for Sun/Oracle is 1 and for others 5)
<p>
See <code>org.apache.geode.internal.cache.control.InternalResourceManager.#MEMORY_EVENT_TOLERANCE</code>
<p>
Number of memory events that ResourceManager will tolerate before throwing a LME. Useful with JVM 1.7
</dd>


<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.MAX_PENDING_CANCELS</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 10000)
<p>
See <code>org.apache.geode.internal.cache.ExpirationScheduler#MAX_PENDING_CANCELS</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.MIN_BUCKET_SIZE</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 1)
<p>
See <code>org.apache.geode.internal.cache.partitioned.SizedBasedLoadProbe.#MIN_BUCKET_SIZE</code>
<p>
Allows setting the minimum bucket size to be used during rebalance
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.DISABLE_MOVE_PRIMARIES_ON_STARTUP</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
If true then pr primary buckets will not be balanced when a new member is started.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.MessageTimeToLive</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 180)
<p>
See <code>org.apache.geode.internal.cache.ha.HARegionQueue#REGION_ENTRY_EXPIRY_TIME</code>.
<p>
<pre>
   Constant used to set region entry expiry time using system property.
</pre>
<p>
Units are in seconds.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.ON_DISCONNECT_CLEAR_PDXTYPEIDS</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.cache.client.internal.PoolImpl</code>
<p>
Clear pdxType ids when client disconnects from servers
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.PRDebug</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.admin.GemFireMonitorService#processGetValCommand</code>.
<p>
See <code>org.apache.geode.admin.remote.RemoteCacheInfo.RemoteCacheInfo(GemFireCache)</code>.
<p>
See <code>org.apache.geode.admin.remote.RootRegionResponse#create(DistributionManager, InternalDistributedMember)</code>.
<p>
See <code>org.apache.geode.internal.cache.PartitionedRegionDataStore#createBucketRegion(int)</code>.
<p>
See <code>org.apache.geode.internal.cache.PartitionedRegionHelper#getPRConfigRegion(Region, Cache)</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.PREFER_DESERIALIZED</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.cache.CachedDeserializableFactory#PREFER_DESERIALIZED</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.PREFER_SERIALIZED</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<P>
See <code>org.apache.geode.internal.cache.CachedDeserializableFactory.#PREFER_DESERIALIZED</code>
<p>
Enable storing the values in serialized form
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.PRSanityCheckDisabled</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.cache.partitioned.PRSanityCheckMessage#schedule</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.PRSanityCheckInterval</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 5000)
<p>
See <code>org.apache.geode.internal.cache.partitioned.PRSanityCheckMessage#schedule</code>.
<p>
Units are in milliseconds.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.PartitionedRegionRandomSeed</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Long</em> (defaults to NanoTimer.getTime())
<p>
See <code>org.apache.geode.internal.cache.PartitionedRegion#rand</code>.
<p>
Seed for the random number generator in this class.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.Query.COMPILED_QUERY_CLEAR_TIME</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (defaults to 10 * 60 * 1000)
<p>
See <code>org.apache.geode.cache.query.internal.DefaultQuery.#COMPILED_QUERY_CLEAR_TIME</code>
<p>
Frequency of clean up compiled queries
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.Query.VERBOSE</strong></dt>
<dd>
<em>Public:</em> false
<p>
<p>
See <code>org.apache.geode.cache.query.internal.DefaultQuery.#QUERY_VERBOSE</code><em>Boolean</em> (defaults to false)
<p>
Enable verbose logging in the query execution
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.QueryService.QueryHeterogeneousObjects</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (defaults to true)
<p>
See <code>org.apache.geode.cache.query.internal.DefaultQueryService.#QUERY_HETEROGENEOUS_OBJECTS</code>
<p>
Allow query on region with heterogeneous objects
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.randomizeOnMember</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (defaults to false)
<p>
See <code>org.apache.geode.internal.cache.execute.InternalFunctionExecutionServiceImpl.#RANDOM_onMember</code>
<p>
When set, onMember execution will be executed on a random member.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.RegionAdvisor.volunteeringThreadCount</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 1)
<p>
See <code>org.apache.geode.internal.cache.partitioned.RegionAdvisor#VOLUNTERING_THREAD_COUNT</code>.
<p>
<pre>
  Number of threads allowed to concurrently volunteer for bucket primary.
</pre>
<p>
TBA
</dd>


<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.VM_OWNERSHIP_WAIT_TIME</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Long</em> (default is Long.MAX_VALUE)
<p>
See <code>org.apache.geode.internal.cache.PartitionedRegion#VM_OWNERSHIP_WAIT_TIME</code>
<p>
<pre>
  Time to wait for for acquiring distributed lock ownership
</pre>
<p>
Time is specified in milliseconds.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.asynchronous-gateway-distribution-enabled</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.cache.GatewayHubImpl#USE_ASYNCHRONOUS_DISTRIBUTION</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.bridge.disableShufflingOfEndpoints</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.cache.tier.sockets.ConnectionProxyImpl#disableShufflingOfEndpoints</code>.
<p>
<pre>
   A debug flag, which can be toggled by tests to disable/enable shuffling of
   the endpoints list
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.bridge.suppressIOExceptionLogging</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>ConnectionProxyImpl</code>,
<code>ServerConnection</code>, and
<code>ServerMonitor</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.BridgeServer.FORCE_LOAD_UPDATE_FREQUENCY</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> 10
<p>
See <code>org.apache.geode.internal.cache.BridgeServerImpl.#FORCE_LOAD_UPDATE_FREQUENCY</code>
<p>
How often to force a BridgeServer load message to be sent
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.BucketRegion.alwaysFireLocalListeners</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> default is false
<p>
See <code>org.apache.geode.internal.cache.BucketRegion.#FORCE_LOCAL_LISTENERS_INVOCATION</code>
<p>
Enable invocation of listeners in both primary and secondary buckets
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.Cache.MAX_QUERY_EXECUTION_TIME</strong></dt>
<dd>
<em>Public:</em> true
<p>
<em>Integer</em> default is -1
<p>
See <code>org.apache.geode.internal.cache.GemFireCacheImpl.#MAX_QUERY_EXECUTION_TIME</code>
<p>
Limit the max query execution time (ms)
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.CLIENT_FUNCTION_TIMEOUT</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> default is 0
<p>
See <code>org.apache.geode.cache.client.internal.ConnectioImpl.#CLIENT_FUNCTION_TIMEOUT</code>
<p>
Timeout to set for client function execution
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.clientMonitorLogFile</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>String</em> (default is unset, to use System.out)
<p>
See <code>org.apache.geode.admin.GemFireClientAdminTool#logFileName</code>.
<p>
This is a file name.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.clientSocketFactory</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>String</em>
<p>
See <code>org.apache.geode.internal.SocketCreator</code>
<p>
Non-standard Socket creator
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.cq.EXECUTE_QUERY_DURING_INIT</strong></dt>
<dd>
<em>Public:</em> true
<p>
<em>Boolean</em> true
<p>
See <code>org.apache.geode.cache.query.internal.CqService.#EXECUTE_QUERY_DURING_INIT</code>
<p>
When set to false, avoid query execution during CQ when initial results are not required
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.debug</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.SharedLibrary#getName</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.disableAccessTimeUpdateOnPut</strong></dt>
<dd>
<em>Public:</em> true
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.cache.entries.AbstractRegionEntry.#DISABLE_ACCESS_TIME_UPDATE_ON_PUT</code>
<p>
Disable access time updates on put event
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.disable-event-old-value</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.cache.EntryEventImpl#EVENT_OLD_VALUE</code>.
<p>
Discussing EVENT_OLD_VALUE = !Boolean.getBoolean():
<pre>
   If true (the default) then preserve old values in events.
   If false then mark non-null values as being NOT_AVAILABLE.
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.disablePartitionedRegionBucketAck</strong></dt>
<dd>
<em>Public:</em> true
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.cache.PartitionedRegion.#DISABLE_SECONDARY_BUCKET_ACK</code>
<p>
Enable no-ack replication in bucket regions
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.disable-udp-direct-ack</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.cache.DistributedCacheOperation#UDP_DISABLE_DIRECT_ACK</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.disableNotificationWarnings</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.cache.tier.sockets.CacheClientProxy#LOG_DROPPED_MSGS</code>.
<p>
Discussing LOG_DROPPED_MSGS = !Boolean.getBoolean():
<pre>
   Defaults to true; meaning do some logging of dropped client notification
   messages. Set the system property to true to cause dropped messages to NOT
   be logged.
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.disableShutdownHook</strong></dt>
<dd>
<em>Public:</em> true
<p>
<em>Boolean</em> (default is false)
<p>
If true then the shutdown hooks of the DistributedSystem, Locator, and Agent
are not run on shutdown. This was added for bug 38407.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.disallowMcastDefaults</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
Used by unit tests to make sure the GemFire mcast-port has been configured
to a non-default value.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.disk.recoverValues</strong></dt>
<dd>
<em>Public:</em> true
<p>
<em>Boolean</em> (default is true)
<p>
See <code>org.apache.geode.internal.cache.SimpleDiskRegion</code>.
<p>
<pre>
  Whether to get the values from disk to memory on recovery
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.EXPIRATIONS_CAUSE_CONFLICTS</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.cache.LocalRegion.#EXPIRATIONS_CAUSE_CONFLICTS</code>
<p>
Allow expirations to be done by multiple threads, avoiding the 
pendingExpires list (set in conjunction with gemfire.EXPIRY_THREADS)
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.enableCpuTime</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
This property causes the per thread stats to also measure cpu time.
This property is ignored unless "gemfire.enableThreadStats" is also set to true.
See java.lang.management.ThreadMXBean.setThreadCpuTimeEnabled(boolean)
for more information.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.enableContentionTime</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
This property causes the per thread stats to also measure contention.
This property is ignored unless "gemfire.enableThreadStats" is also set to true.
See java.lang.management.ThreadMXBean.setThreadContentionMonitoringEnabled(boolean)
for more information.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.enableThreadStats</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
This property causes the per thread stats to be collected.
See java.lang.management.ThreadMXBean
for more information.
</dd>


<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.gateway-conserve-sockets-allowed</strong></dt>
<dd>
<em>Public:</em> true
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.cache.GatewayHubImpl#ALLOW_CONSERVE_SOCKETS</code>.
<p>
<pre>
   A boolean that defines whether the value of the conserve-sockets property
   in the gemfire.properties file is preserved. By default, the value in
   gemfire.properties is overridden so that queue ordering is preserved. If
   ALLOW_CONSERVE_SOCKETS=true, then the conserve-sockets property is
   used and queue ordering may not be preserved. This property can be set
   using the System property called 'gemfire.gateway-conserve-sockets-allowed'.
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.gateway-queue-no-ack</strong></dt>
<dd>
<em>Public:</em> true
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.cache.SingleWriteSingleReadRegionQueue#NO_ACK</code>.
<p>
<pre>
   Whether the <code>Gateway</code> queue should be no-ack instead of ack.
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.GatewayReceiver.ApplyRestries</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
If true causes the GatewayReceiver will apply batches it has already received.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.gateway.ApplyRetries</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.cache.tier.sockets.ServerConnection#APPLY_RETRIES</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.GetInitialImage.CHUNK_PERMITS</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 16)
<p>
See <code>org.apache.geode.internal.cache.InitialImageOperation.#CHUNK_PERMITS</code>
<p>
Allowed number of in-flight initial image chunks. This property controls how many requests for GII chunks can be handled simultaneously.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.GetInitialImage.MAX_PARALLEL_GIIS</strong></dt>
<dd>
<em>Public:</em> true
<p>
<em>Integer</em> (default is 5)
<p>
See <code>org.apache.geode.internal.cache.InitialImageOperation.#MAX_PARALLEL_GIIS </code>
<p>
Allowed number of GIIs in parallel. This property controls how many regions can do GII simultaneously. Each replicated region and partitioned region bucket counts against this number.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.haltOnAssertFailure</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.Assert#debug</code>.
<p>
Causes VM to hang on assertion failure (to allow a debugger to be attached)
instead of exiting the process.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.jg-can_bind_to_mcast_addr</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
On OSes that support it bind to the mcast_addr to prevent traffic on 
different addresses, but on the same port.
Setting to true can avoid cross address chatter.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.launcher.registerSignalHandlers</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
Causes the code used by gfsh to launch a server or locator to install
signal handlers using sun.misc.Signal.
</dd>


<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.loadLibrary.debug</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.PureJavaMode#debug</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.locatorXms</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>String</em>
<p>
See <code>org.apache.geode.internal.gui.RemoteCommandManager#getLocatorStart</code>.
<p>
See <code>org.apache.geode.internal.gui.StartStopManager#startLocalLocator</code>.
<p>
A JVM property, esp. "-Xms150m".
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.locatorXmx</strong></dt>
<em>String</em>
<p>
<dd>
<em>Public:</em> false
<p>
See <code>org.apache.geode.internal.gui.RemoteCommandManager#getLocatorStart</code>.
<p>
See <code>org.apache.geode.internal.gui.StartStopManager#startLocalLocator</code>.
<p>
A JVM property, esp. "-Xmx400m"
</p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.locators</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>String</em>
<p>
See the constructor for <code>org.apache.geode.distributed.internal.InternalLocator</code>.
<p>
If this property is not found in gemfire.properties, the system property
of the same name is used.
</dd>


<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.lru.maxSearchEntries</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is -1)
<p>
See <code>org.apache.geode.internal.cache.lru.NewLRUClockHand#maxEntries</code>.
<p>
This is the maximum number of "good enough" entries to pass over for eviction
before settling on the next acceptable entry.  This prevents excessive cache
processing to find a candidate for eviction.
<p>
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.order-pr-gets</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.cache.partitioned.GetMessage#ORDER_PR_GETS</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.partitionedRegionRetryTimeout</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 60 * 60 * 1000)
<p>
See <code>org.apache.geode.internal.cache.PartitionedRegion#retryTimeout</code>
<p>
<pre>
  The maximum milliseconds for retrying operations
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.PRQueryProcessor.numThreads</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> 1+ (default is 2)
<p>
See <code>org.apache.geode.internal.cache.PRQueryProcessor#executeQuery</code>
<p>
<pre>
  The number of concurrent threads to use within a single VM to execute queries
  on a Partitioned Region. If set to 1 (or less) then queries are run
  sequentially with a single thread.
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.pureJavaMode</strong></dt>
<dd>
<em>Public:</em> true
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.PureJavaMode class init</code>.
<p>
Force use of "pure" Java mode (native libraries will not be loaded)
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.SPECIAL_DURABLE</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.cache.client.internal.PoolImpl.#SPECIAL_DURABLE</code>
<p>
Makes multiple durable subscriptions from same client unique. on java client ensures only a single server proxy is created but will limit the client to a single active client pool at a time
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.statsDisabled</strong></dt>
<dd>
<em>Public:</em> true
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.distributed.internal.InternalDistributedSystem#statsDisabled</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.statusPollingDelay</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Long</em> (default is 5000)
<p>
See <code>org.apache.geode.admin.GemFireClientAdminTool#_statusPollingDelay</code>.
<p>
Units are in milliseconds.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.syncWrites</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em>
<p>
See <code>org.apache.geode.internal.cache.Oplog#SYNC_WRITES</code>.
<p>
<pre>
   This system property instructs that writes be synchronously written to disk
   and not to file system. (Use rwd instead of rw - RandomAccessFile property)
</pre>
<p>
TBA
</dd>
	
<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.TcpServer.MAX_POOL_SIZE</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em>
<p>
<pre>
   This property limits the number of threads that the locator will
	use for processing messages.
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
    <dt><strong>gemfire.TcpServer.BACKLOG</strong></dt>
    <dd>
        <em>Public:</em> false
        <p>
            <em>Integer</em> default is 1280 but is limited by the OS somaxconn setting
        <p>
        <pre>
   This property establishes a Locator's TCP/IP "accept" backlog
   for locator communications.
</pre>
        <p>
            TBA
    </dd>
<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.validateMessageSize</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.distributed.internal.DistributionConfig#VALIDATE</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.validateMessageSizeCeiling</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 8 * 1024 * 1024)
<p>
See <code>org.apache.geode.distributed.internal.DistributionConfig#VALIDATE_CEILING</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfirePropertyFile</strong></dt>
<dd>
<em>Public:</em> true
<p>
<em>String</em>
<p>
See <code>org.apache.geode.distributed.DistributedSystem#PROPERTY_FILE</code>.
<p>
<pre>
     The <code>PROPERTY_FILE</code> is the name of the
     property file that the connect method will check for when
     it looks for a property 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.
     </p>
     @since GemFire 5.0
</pre>
<p>
TBA
</p>
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemstone.MAX_BUCKET_GRAB_ATTEMPTS</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 20)
<p>
See <code>org.apache.geode.internal.cache.PartitionedRegionDataStore.BucketRecoverer#grabBuckets</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gfAgentDebug</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em>
<p>
See <code>org.apache.geode.admin.jmx.internal.AgentImpl#checkDebug</code>.
<p>
<pre>
  Enables mx4j tracing if Agent debugging is enabled.
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gfAgentPropertyFile</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>String</em>
<p>
See <code>org.apache.geode.admin.jmx.internal.AgentConfigImpl#retrievePropertyFile</code>.
<p>
<pre>
   The <code>propertyFile</code> is the name of the property file that will 
   be loaded on startup of the Agent.
   <p>
   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 propertyFile is <code>"agent.properties"</code>. However 
   if the "gfAgentPropertyFile" system property is set then its value is the 
   value of propertyFile. If this value is a relative file system path then 
   the above search is done. If its an absolute file system path then that 
   file must exist; no search for it is done.
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gfc.propertyfile.init</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>String</em>
<p>
See <code>org.apache.geode.internal.gui.Service#initProps()</code>.
<p>
This is name of a <code>Properties</code> file read at startup.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gfc.propertyfile.onclose</strong></dt>
<em>String</em>
<p>
See <code>org.apache.geode.internal.gui.Service#saveProps</code>.
<dd>
<em>Public:</em> false
<p>
This is the name of a <code>Properties</code> file to which some properties
are saved a close.
<p>
TBA
</dd>


<!-- -------------------------------------------------------  -->
<dt><strong>install</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.gui.NavigationPane#NavigationPane()</code>.
<p>
See <code>org.apache.geode.internal.gui.Service#Service()</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>jta.VERBOSE</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em>
<p>
See <code>org.apache.geode.internal.jta.GlobalTransaction#VERBOSE</code>.
<p>
See <code>org.apache.geode.internal.jta.TransactionManagerImpl#VERBOSE</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>jta.defaultTimeout</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 600)
<p>
See <code>org.apache.geode.internal.jta.TransactionManagerImpl#DEFAULT_TRANSACTION_TIMEOUT</code>.
<p>
Units are in seconds.
<p>
TBA Is this a standard JTA property?
</dd>


<!-- -------------------------------------------------------  -->
<dt><strong>mergelogs.TRIM_TIMESTAMPS</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.LogFileParser#TRIM_TIMESTAMPS</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>org.apache.commons.logging.log</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>String</em> (default is org.apache.commons.logging.impl.SimpleLog)
<p>
See <code>org.apache.geode.admin.jmx.internal.AgentImpl class init</code>.
<p>
This is the name of a class.
<p>
This property is also used by commons-logging.jar (and
discussed below).  It is called out here
because of its explicit use in the JMX Agent.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>osStatsDisabled</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.GemFireStatSampler#osStatsDisabled</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>p2p.DEBUG</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.tcp.TCPConduit#DEBUG</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>p2p.VERBOSE</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.tcp.TCPConduit#QUIET</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>p2p.backlog</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 1280 but limited by OS somaxconn setting)
<p>
See <code>org.apache.geode.internal.tcp.TCPConduit#BACKLOG</code>.
<p>
<pre>
  backlog is the TCP/IP "accept" backlog configuration parameter for cluster
  communications
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>p2p.batchBufferSize</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 1024 * 1024)
<p>
See <code>org.apache.geode.internal.tcp.Connection#BATCH_BUFFER_SIZE</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>p2p.batchFlushTime</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> in Connection.
<p>
See <code>org.apache.geode.internal.tcp.Connection#BATCH_FLUSH_MS</code>.
(Default is 50)
<pre>
    Max number of milliseconds until queued messages are sent. Messages are
    sent when max_bundle_size or
    max_bundle_timeout has been exceeded (whichever occurs faster)
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>p2p.batchSends</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.tcp.Connection#BATCH_SENDS</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>p2p.defaultLogLevel</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>String</em> (one of "config", "fine", "finer", or "finest")
<p>
See <code>org.apache.geode.internal.tcp.TCPConduit#getLogger</code>.
<p>
Used only if this class needs to create a logger.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>p2p.disableSocketWrite</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (defaults to false)
<p>
See <code>org.apache.geode.internal.tcp.Connection#SOCKET_WRITE_DISABLED</code>.
<p>
<pre>
  use to test message prep overhead (no socket write).
  WARNING: turning this on completely disables distribution of batched sends
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>p2p.disconnectDelay</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 3000)
<p>
See <code>org.apache.geode.distributed.internal.membership.gms.GMSMembershipManager#destroyMember</code>.
<p>
TBA Workaround for bug 34010: small pause inserted before closing
reader threads for a departed member.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>p2p.handshakeTimeoutMs</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 59000)
<p>
See <code>org.apache.geode.internal.tcp.Connection#HANDSHAKE_TIMEOUT_MS</code>.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>p2p.HANDSHAKE_POOL_SIZE</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 10)
<p>
See <code>org.apache.geode.internal.tcp</code>.
</dd>


<!-- -------------------------------------------------------  -->
<dt><strong>p2p.joinTimeout</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Long</em> (default is 60000 for a server and 24000 for a locator)
<p>
    See <code>org.apache.geode.distributed.internal.membership.adapter.ServiceConfig</code>.
<p>
    Establishes the timeout for waiting for a join response when connecting to
    the cluster
<p>
Units are in milliseconds.
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>p2p.lingerTime</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 5000)
<p>
See <code>org.apache.geode.internal.tcp.Connection#Connection(ConnectionTable, Socket)</code>.
<p>
Sets the <code>SO_LINGER</code> time on direct channel TCP sockets.
Units are in milliseconds.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>p2p.listenerCloseTimeout</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 60000)
<p>
See <code>org.apache.geode.internal.tcp.TCPConduit#LISTENER_CLOSE_TIMEOUT</code>.
<p>
<pre>
  max amount of time (ms) to wait for listener threads to stop
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>p2p.maxGroupSenders</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is p2p.defaultConcurrencyLevel)
<p>
See <code>org.apache.geode.distributed.internal.direct.DirectChannel#MAX_GROUP_SENDERS</code>.
<p>
<pre>
  The maximum number of concurrent senders sending a message to a group of
  recipients.
</pre>
<p>
TBA
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>gemfire.BufferPool.useHeapBuffers</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.net.BufferPool#useDirectBuffers</code>.
<p>
<pre>
  use java "heap" ByteBuffers instead of direct ByteBuffers for NIO operations.  Recommended if TLSv1
    is being used or if you find you are running out of direct-memory and do not want to
    increase the amount of direct-memory available to the JVM.  Use of heap buffers can
    reduce performance in some cases.
</pre>
<p>
TBA
</dd>


<!-- -------------------------------------------------------  -->
<dt><strong>p2p.oldIO</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.geode.internal.tcp.TCPConduit#useNIO</code>.
<p>
If set, don't use java.nio.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>p2p.readerBufferSize</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 32768)
<p>
See <code>org.apache.geode.internal.tcp.Connection#INITIAL_CAPACITY</code>.
<p>
TBA
</dd>


<!-- -------------------------------------------------------  -->
<dt><strong>p2p.tcpBufferSize</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 32768)
<p>
See TCPConduit.
<p>
Any value smaller than 1024 will be set to 1024.
If the gemfire property socket-buffer-size is set to a value other than 32768
then this system property will be ignored.
Otherwise this system property sets the p2p socket-buffer-size.
<p>
Units are are bytes.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>p2p.test.inhibitAcceptor</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See org.apache.geode.internal.tcp.TCPConduit#startAcceptor(int, int, InetAddress).
<p>
TBA 
</dd>


<!-- -------------------------------------------------------  -->
<dt><strong>query.disableIndexes</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See org.apache.geode.cache.query.internal.index.IndexUtils#indexesEnabled.
<p>
TBA 
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>remote.call.popup</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 10, unless the Integer.parseInt throws a NumberFormatException in which case, the value is 5)
<p>
See org.apache.geode.internal.admin.remote.RemoteCall#getPopupTime.
<p>
Units are in seconds.
<p>
TBA 
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>remote.call.timeout</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 1800)
<p>
See org.apache.geode.internal.admin.remote.AdminWaiters#getWaitTimeout.
<p>
Units are in seconds.
<p>
TBA 
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>skipConnection</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
Removed in Geode 1.0 with removal of deprecated Bridge classes.
</p>
TBA 
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>slowStartTimeForTesting</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Long</em> (default is 5000)
<p>
See org.apache.geode.internal.cache.tier.sockets.CacheClientProxy.MessageDispatcher#slowStartTimeForTesting.
<p>
Units are in milliseconds.
<p>
TBA 
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>stats.archive-file</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>String</em>
<p>
See org.apache.geode.internal.SimpleStatSampler#archiveFileName.
<p>
This is a filename.
<p>
TBA 
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>stats.disable</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See org.apache.geode.internal.LocalStatisticsFactory#statsDisabled.
<p>
TBA 
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>stats.disk-space-limit</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Long</em> (default is 1024 * 1024)
<p>
See org.apache.geode.internal.SimpleStatSampler#archiveDiskSpaceLimit.
<p>
TBA 
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>stats.file-size-limit</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Long</em> (default is 0)
<p>
See org.apache.geode.internal.SimpleStatSampler#archiveFileSizeLimit.
<p>
Units are in megabytes
<p>
TBA 
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>stats.log-level</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>String</em> (See LogWriterImpl.levelNameToCode)
<p>
See org.apache.geode.internal.LocalStatisticsFactory#logLevel.
<p>
TBA 
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>stats.name</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>String</em>
<p>
See org.apache.geode.internal.LocalStatisticsFactory#name.
<p>
TBA 
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>stats.sample-rate</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is 1000)
<p>
See org.apache.geode.internal.SimpleStatSampler#sampleRate.
<p>
Units are in milliseconds.
<p>
TBA 
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>target.override</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em>
<p>
See org.apache.geode.internal.gui.Service#Service().
<p>
<pre>
      A multicast port for a distributed system that will
      automatically be created by the console.  Its value can be set
      via a system property.  It is used only for testing.
</pre>
<p>
TBA 
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>tcpServerPort</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Integer</em> (default is the tcp-port property in the distribution config)
<p>
See org.apache.geode.distributed.internal.direct.DirectChannel#DirectChannel(MembershipManager, DistributedMembershipListener, DistributionConfig, LogWriter, Properties).
<p>
TBA 
</dd>

</dl>

<h1>Other Jars</h1>

<h2>commons-logging-1.1.1.jar</h2>

Miscellaneous: org.apache.commons.logging.log.<em>logName</em>, where
the name is the String passed to the SimpleLog constructor:  This is a String
used to set the logging level of the logger.

<dl>
<!-- -------------------------------------------------------  -->
<dt><strong>org.apache.commons.logging.log</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>String</em>
<p>
Default is org.apache.commons.logging.impl.Log4JLogger (if available),
else org.apache.commons.logging.impl.Jdk14Logger,
else org.apache.commons.logging.impl.SimpleLog.
<p>
See <code>org.apache.commons.logging.impl.LogFactoryImpl#LOG_PROPERTY</code>
<p>
<pre>
    The name of the system property identifying our {@link Log}
    implementation class.
</pre>
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>org.apache.commons.logging.simplelog.dateformat</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>String</em> (default is "yyyy/MM/dd HH:mm:ss:SSS zzz")
<p>
String format derived from SimpleDateFormat.
<p>
See <code>org.apache.commons.logging.impl.SimpleLog class init</code>.
<p>
"Used to format times"
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>org.apache.commons.logging.simplelog.showDateTime</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.commons.logging.impl.SimpleLog class init</code>.
<p>
Include the current time in the log message
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>org.apache.commons.logging.simplelog.showLogName</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>Boolean</em> (default is false)
<p>
See <code>org.apache.commons.logging.impl.SimpleLog class init</code>.
<p>
"Include the instance name in the log message?"
</dd>


<!-- -------------------------------------------------------  -->
<dt><strong>org.apache.commons.logging.simplelog.showShortName</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>String</em> (default is true)
<p>
See <code>org.apache.commons.logging.impl.SimpleLog class init</code>.
<p>
Include the short name ( last component ) of the logger in the log message. 
Default to true - otherwise we'll be lost in a flood of messages without 
knowing who sends them.

</dd>

</dl>

<h2>jta-1_0_1B.jar</h2>
TBA

<h2>rt.jar</h2>
TBA
<h2>sunrsasign.jar</h2>
TBA
<h2>jsse.jar</h2>

<dl>
<!-- -------------------------------------------------------  -->
<dt><strong>cert.provider.x509v1security</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>String</em>
<p>
X509Certificate implementation.  See the JSSE documentation.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>java.protocol.handler.pkgs</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>String</em>
<p>
HTTPS protocol implementation.  See the JSSE documentation.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>java.security.debug</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>String</em>
<p>
Geniric dynamic debug tracing support.  See the JSSE documentation.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>javax.net.debug</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>String</em>
<p>
JSSE-specific dynamic debug tracing support.  See the JSSE documentation.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>javax.net.ssl.keyStore</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>String</em>
<p>
default keystore.  See the JSSE documentation.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>javax.net.ssl.keyStoreType</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>String</em>
<p>
default keystore type.  See the JSSE documentation.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>javax.net.ssl.keyStorePassword</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>String</em>
<p>
default keystore password.  See the JSSE documentation.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>javax.net.ssl.trustStore></strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>String</em>
<p>
If the system property javax.net.ssl.trustStore is
defined, then the TrustManagerFactory attempts to find a file using the
filename specified by that system property, and uses that file for the
KeyStore. If that file does not exist, then a default TrustManager using an
empty keystore is created.
</dd>

<!-- -------------------------------------------------------  -->
<dt><strong>javax.net.ssl.trustStorePassword</strong></dt>
<dd>
<em>Public:</em> false
<p>
<em>String</em>
<p>
default truststore password.  See the JSSE documentation.
</dd>

</dl>

<h2>jce.jar</h2>

(none found)

<h2>charsets.jar</h2>

(none found)

<h2>localedata.jar</h2>
TBA
<h2>ldapsec.jar</h2>
TBA

<h2>sunjce_provider.jar</h2>

(none found)

<!-- -------------------------------------------------------  -->
</body>
</html>
