---
title: alter
---

<!--
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.
-->
<a id="topic_9323467A645D4F2B82EC236448030D14"></a>


Modify an existing <%=vars.product_name%> resource.

-   **[alter async-event-queue](#topic_alter_async_event_queue)**

    Modifies attributes of an async event queue

-   **[alter disk-store](#topic_99BCAD98BDB5470189662D2F308B68EB)**

    Modifies or removes a region from an offline disk-store.

-   **[alter region](#topic_E74ED23CB60342538B2175C326E7D758)**

    Alters the configuration of a region.

-   **[alter runtime](#topic_7E6B7E1B972D4F418CB45354D1089C2B)**

    Alters configuration properties for all members or a subset of members while the member or members are running.

## <a id="topic_alter_async_event_queue" class="no-quick-link"></a>alter async-event-queue

Alter attributes of a specified asynchronous event queue. Each server hosting the specified async event queue must be restarted for the new attribute
settings to take effect on that server.

**Availability:** Online. You must be connected in <span class="keyword parmname">gfsh</span> to a JMX Manager member to use this command.

**Syntax:**

``` pre
alter async-event-queue --id=value [--batch-size=value] [--batch-time-interval=value]
    [--max-queue-memory=value] [--if-exists(=value)] [--pause-event-processing(=value)]
```

The required option, `--id`, identifies the async event queue to be altered.

**Parameters, alter async-event-queue**

| Name | Description |
|------|-------------|
| &#8209;&#8209;id   | _Required._ ID of the async event queue to be changed |
| &#8209;&#8209;batch&#8209;size | Maximum number of events that a batch can contain |
| &#8209;&#8209;batch&#8209;time&#8209;interval | Maximum amount of time, in ms, that can elapse before a batch is delivered |
| &#8209;&#8209;max&#8209;queue&#8209;memory | Maximum amount of memory, in megabytes, that the queue can consume before overflowing to disk |
| &#8209;&#8209;if&#8209;exists | If the specified async event queue does not exist, gfsh responds with a message to that effect. If this parameter is true, the response is prefixed with the label "Skipping: ". Useful for scripted tests. Default (if the parameter is not specified): false. Default (if the parameter is specified without value): true. |
| &#8209;&#8209;pause&#8209;event&#8209;processing | Specifies whether event dispatching from the queue to the listener(s) will be paused when the AsyncEventQueue is started. Default (if the parameter is not specified): false. Default (if the parameter is specified without value): true.

**Example Commands:**

``` pre
alter async-event-queue --id=myAsyncEventQueue --batch-size=50 --if-exists
```

## <a id="topic_99BCAD98BDB5470189662D2F308B68EB" class="no-quick-link"></a>alter disk-store

Modify or remove a region from an offline disk-store.

When modifying a region's configuration, it is customary to take the region off-line and restart using the new configuration. You can use the `alter disk-store` command to change the configuration of the region stored in the disk-store to match the configuration you will use at restart.

**Availability:** Offline.

**Syntax:**

``` pre
alter disk-store --name=value --region=value --disk-dirs=value(,value)*
    [--compressor(=value)] [--concurrency-level=value]
    [--enable-statistics=value] [--initial-capacity=value] [--load-factor=value]
    [--lru-algorithm=value] [--lru-action=value] [--lru-limit=value]
    [--off-heap(=value)] [--remove(=value)]
```

The three required options, `--name`, `--region`, and `--disk-dirs`, identify the disk store and region to be altered. If no additional options are specified, `gfsh` displays the current configuration without making any changes.

**Parameters, alter disk-store**

<table>
<colgroup>
<col width="50%" />
<col width="50%" />
</colgroup>
<thead>
<tr class="header">
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><span class="keyword parmname">\-\-name</span></td>
<td><em>Required</em>. Name of the disk-store whose contents will be altered.</td>
</tr>
<tr class="even">
<td><span class="keyword parmname">\-\-region</span></td>
<td><em>Required</em>. Name (including path) of the region using the disk store.</td>
</tr>
<tr class="odd">
<td><span class="keyword parmname">\-\-disk-dirs</span></td>
<td><em>Required</em>. Directories where the data for the disk store was previously written.</td>
</tr>
<tr class="even">
<td><span class="keyword parmname">\-\-compressor</span></td>
<td>The fully-qualified class name of the compressor to use when compressing region entry values. A value of <code class="ph codeph">none</code> removes the compressor.</td>
</tr>
<tr class="odd">
<td><span class="keyword parmname">\-\-concurrency-level</span></td>
<td>An estimate of the maximum number of application threads that will concurrently access a region entry. Together with <span class="keyword parmname">\-\-initial-capacity</span> and <span class="keyword parmname">\-\-load-factor</span>, sets the parameters on the underlying <code class="ph codeph">java.util.ConcurrentHashMap</code> used for storing region entries. This attribute does not apply to partitioned regions.</td>
</tr>
<tr class="even">
<td><span class="keyword parmname">\-\-enable-statistics</span></td>
<td>Enables statistics for the region specified by the <code>--region</code> option. Valid values are true or false. If the parameter is specified without a value, the value of true is used.</td>
</tr>
<tr class="odd">
<td><span class="keyword parmname">\-\-initial-capacity</span></td>
<td>Together with <span class="keyword parmname">\-\-concurrency-level</span> and <span class="keyword parmname">\-\-load-factor</span>, sets the parameters on the underlying <code class="ph codeph">java.util.ConcurrentHashMap</code> used for storing region entries.</td>
</tr>
<tr class="even">
<td><span class="keyword parmname">\-\-load-factor</span></td>
<td>Together with <span class="keyword parmname">\-\-concurrency-level</span> and <span class="keyword parmname">\-\-initial-capacity</span>, sets the parameters on the underlying <code class="ph codeph">java.util.ConcurrentHashMap</code> used for storing region entries. This must be a floating point number between 0 and 1, inclusive.</td>
</tr>
<tr class="odd">
<td><span class="keyword parmname">\-\-lru-action</span></td>
<td>Action to take when evicting entries from the region. Valid values are:
<ul>
<li><code class="ph codeph">none</code></li>
<li><code class="ph codeph">overflow-to-disk</code></li>
<li><code class="ph codeph">local-destroy</code></li>
</ul></td>
</tr>
<tr class="even">
<td><span class="keyword parmname">\-\-lru-algorithm</span></td>
<td>Least recently used eviction algorithm. Valid types are:
<ul>
<li><code class="ph codeph">none</code></li>
<li><code class="ph codeph">lru-entry-count</code></li>
<li><code class="ph codeph">lru-heap-percentage</code></li>
<li><code class="ph codeph">lru-memory-size</code></li>
</ul></td>
</tr>
<tr class="odd">
<td><span class="keyword parmname">\-\-lru-limit</span></td>
<td>Number of entries allowed in the region before eviction occurs.</td>
</tr>
<tr class="even">
<td><span class="keyword parmname">\-\-off-heap</span></td>
<td>Specifies whether the region values are in heap memory or off-heap memory. When true, region values are in off-heap memory. If the parameter is specified without a value, the value of true is used.</td>
</tr>
<tr class="odd">
<td><span class="keyword parmname">\-\-remove</span></td>
<td>Specifies whether to remove the region from the disk-store. If the parameter is specified without a value, the value of true is used. Note: <span class="keyword parmname">\-\-remove</span> deletes all persistent data for the region. Consider copying the disk store files to a backup before using this option if you might want to retrieve the data at a later date.</td>
</tr>
</tbody>
</table>

**Example Commands:**

``` pre
alter disk-store --name=DiskStore1 --region=region1 --disk-dirs=/Disks/DiskStore1 --off-heap
alter disk-store --name=DiskStore1 --region=region1 --disk-dirs=/Disks/DiskStore1 --remove
```

## <a id="topic_E74ED23CB60342538B2175C326E7D758" class="no-quick-link"></a>alter region

Alters the configuration of a region.

See [Specifying JSON within Command-Line Options](../json_in_gfsh.html)
for syntax details.

**Availability:** Online. You must be connected in <span class="keyword parmname">gfsh</span> to a JMX Manager member to use this command.

**Syntax:**

``` pre
alter region --name=value [--groups=value(,value)*]
    [--entry-idle-time-expiration=value]
    [--entry-idle-time-expiration-action(=value)?]
    [--entry-time-to-live-expiration=value]
    [--entry-time-to-live-expiration-action(=value)?]
    [--entry-idle-time-custom-expiry=value] [--entry-time-to-live-custom-expiry=value]
    [--region-idle-time-expiration=value]
    [--region-idle-time-expiration-action(=value)?]
    [--region-time-to-live-expiration=value]
    [--region-time-to-live-expiration-action(=value)?]
    [--cache-listener=value(,value)*] [--cache-loader=value]
    [--cache-writer=value] [--async-event-queue-id=value(,value)*]
    [--gateway-sender-id=value(,value)*] [--enable-cloning(=value)?]
    [--eviction-max(=value)?]
```

**Parameters, alter region**

<table>
<colgroup>
<col width="25%" />
<col width="60%" />
<col width="15%" />
</colgroup>
<thead>
<tr class="header">
<th>Name</th>
<th>Description</th>
<th>Default Value</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><span class="keyword parmname">\-\-async-event-queue-id</span></td>
<td>IDs of the Async Event Queues that will be used for write-behind operations.</td>
<td> </td>
</tr>
<tr class="even">
<td><span class="keyword parmname">\-\-cache-listener</span></td>
<td>Fully qualified class name of a plug-in to be instantiated for receiving after-event notification of changes to the region and its entries. Any number of cache listeners can be configured. A fully qualified class name may be appended with a JSON specification that will be parsed to become the fields of the parameter to the <code>init()</code> method for a class that implements the <code>Declarable</code> interface.</td>
<td> </td>
</tr>
<tr class="odd">
<td><span class="keyword parmname">\-\-cache-loader</span></td>
<td>Fully qualified class name of a plug-in to be instantiated for receiving notification of cache misses in the region. At most, one cache loader can be defined in each member for the region. For distributed regions, a cache loader may be invoked remotely from other members that have the region defined. A fully qualified class name may be appended with a JSON specification that will be parsed to become the fields of the parameter to the <code>initialize()</code> method for a class that implements the <code>Declarable</code> interface.</td>
<td></td>
</tr>
<tr class="even">
<td><span class="keyword parmname">\-\-cache-writer</span></td>
<td>Fully qualified class name of a plug-in to be instantiated for receiving before-event notification of changes to the region and its entries. The plug-in may cancel the event. At most, one cache writer can be defined in each member for the region. A fully qualified class name may be appended with a JSON specification that will be parsed to become the fields of the parameter to the <code>init()</code> method for a class that implements the <code>Declarable</code> interface.</td>
<td></td>
</tr>
<tr class="odd">
<td><span class="keyword parmname">\-\-enable-cloning</span></td>
<td><p>Determines how <code class="ph codeph">fromDelta</code> applies deltas to the local cache for delta propagation. When true, the updates are applied to a clone of the value and then the clone is saved to the cache. When false, the value is modified in place in the cache.</p></td>
<td><code class="ph codeph">false</code></td>
</tr>
<tr class="even">
<td><span class="keyword parmname">\-\-entry-idle-time-expiration</span></td>
<td>Number of seconds before a region or an entry expires. Specify <code class="ph codeph">-1</code> to indicate that there is no expiration of this type</td>
<td>-1</td>
</tr>
<tr class="odd">
<td><span class="keyword parmname">\-\-entry-idle-time-expiration-action</span></td>
<td>Action that should take place when a region or an entry expires.
<div class="p">
Select one of the following expiration actions:
<table>
<tbody>
<tr class="odd">
<td><span class="keyword option">local-destroy</span></td>
<td>Removes the region or entry from the local cache, but does not distribute the removal operation to remote members. You cannot use this action on partitioned region entries.</td>
</tr>
<tr class="even">
<td><span class="keyword option">destroy</span></td>
<td>Removes the region or entry completely from the cache. Destroy actions are distributed according to the region's distribution settings. Use this option when the region or entry is no longer needed for any application in the cluster.</td>
</tr>
<tr class="odd">
<td><span class="keyword option">invalidate</span></td>
<td>Default expiration action. Marks an entry or all entries in the region as invalid. Distributes the invalidation according to the region's scope. This is the proper choice when the region or the entry is no longer valid for any application in the cluster.</td>
</tr>
<tr class="even">
<td><span class="keyword option">local-invalidate</span></td>
<td>Marks an entry or all entries in the region as invalid but does not distribute the operation. You cannot use this action on partitioned region entries. Local region invalidation is only supported for regions that are not configured as replicated regions.</td>
</tr>
</tbody>
</table>
</div></td>
<td><code class="ph codeph">invalidate</code></td>
</tr>
<tr class="even">
<td><span class="keyword parmname">\-\-entry-time-to-live-expiration</span></td>
<td>Number of seconds before a region or an entry expires. Specify <code class="ph codeph">-1</code> to indicate that there is no expiration of this type.</td>
<td>-1</td>
</tr>
<tr class="odd">
<td><span class="keyword parmname">\-\-entry-time-to-live-expiration-action</span></td>
<td>Action that should take place when a region or an entry expires.
<div class="p">
Select one of the following expiration actions:
<table>
<tbody>
<tr class="odd">
<td><span class="keyword option">local-destroy</span></td>
<td>Removes the region or entry from the local cache, but does not distribute the removal operation to remote members. You cannot use this action on partitioned region entries.</td>
</tr>
<tr class="even">
<td><span class="keyword option">destroy</span></td>
<td>Removes the region or entry completely from the cache. Destroy actions are distributed according to the region's distribution settings. Use this option when the region or entry is no longer needed for any application in the cluster.</td>
</tr>
<tr class="odd">
<td><span class="keyword option">invalidate</span></td>
<td>Default expiration action. Marks an entry or all entries in the region as invalid. Distributes the invalidation according to the region's scope. This is the proper choice when the region or the entry is no longer valid for any application in the cluster.</td>
</tr>
<tr class="even">
<td><span class="keyword option">local-invalidate</span></td>
<td>Marks an entry or all entries in the region as invalid but does not distribute the operation. You cannot use this action on partitioned region entries. Local region invalidation is only supported for regions that are not configured as replicated regions.</td>
</tr>
</tbody>
</table>
</div></td>
<td><code class="ph codeph">invalidate</code></td>
</tr>
<tr class="odd">
<td><span class="keyword parmname">\-\-entry-idle-time-custom-expiry</span></td>
<td>The name of a class implementing CustomExpiry for entry idle time. Append a JSON string for initialization properties.</td>
<td></td>
</tr>
<tr class="odd">
<td><span class="keyword parmname">\-\-entry-time-to-live-custom-expiry</span></td>
<td>The name of a class implementing CustomExpiry for entry time to live. Append a JSON string for initialization properties.</td>
<td></td>
</tr>
<tr class="even">
<td><span class="keyword parmname">\-\-eviction-max</span></td>
<td>Maximum value for the Eviction Attributes that the eviction algorithm uses to determine when to perform its eviction action. The unit of the maximum value is determined by the Eviction Algorithm.</td>
<td>0</td>
</tr>
<tr class="odd">
<td><span class="keyword parmname">\-\-gateway-sender-id</span></td>
<td>IDs of the Gateway Senders where data is routed.</td>
<td> </td>
</tr>
<tr class="even">
<td><span class="keyword parmname">\-\-groups</span></td>
<td>Group(s) of members where the region will be altered.</td>
<td> </td>
</tr>
<tr class="odd">
<td><span class="keyword parmname">\-\-name</span></td>
<td>Required. Name (including path) of the region.</td>
<td> </td>
</tr>
<tr class="even">
<td><span class="keyword parmname">\-\-region-idle-time-expiration</span></td>
<td>Number of seconds before a region or an entry expires. If timeout is not specified, it defaults to zero (which means no expiration).</td>
<td>-1</td>
</tr>
<tr class="odd">
<td><span class="keyword parmname">\-\-region-idle-time-expiration-action</span></td>
<td>Action that should take place when a region or an entry expires.
<div class="p">
Select one of the following expiration actions:
<table>
<tbody>
<tr class="odd">
<td><span class="keyword option">local-destroy</span></td>
<td>Removes the region or entry from the local cache, but does not distribute the removal operation to remote members. You cannot use this action on partitioned region entries.</td>
</tr>
<tr class="even">
<td><span class="keyword option">destroy</span></td>
<td>Removes the region or entry completely from the cache. Destroy actions are distributed according to the region's distribution settings. Use this option when the region or entry is no longer needed for any application in the cluster.</td>
</tr>
<tr class="odd">
<td><span class="keyword option">invalidate</span></td>
<td>Default expiration action. Marks an entry or all entries in the region as invalid. Distributes the invalidation according to the region's scope. This is the proper choice when the region or the entry is no longer valid for any application in the cluster.</td>
</tr>
<tr class="even">
<td><span class="keyword option">local-invalidate</span></td>
<td>Marks an entry or all entries in the region as invalid but does not distribute the operation. You cannot use this action on partitioned region entries. Local region invalidation is only supported for regions that are not configured as replicated regions.</td>
</tr>
</tbody>
</table>
</div></td>
<td><code class="ph codeph">invalidate</code></td>
</tr>
<tr class="even">
<td><span class="keyword parmname">\-\-region-time-to-live-expiration </span></td>
<td>Number of seconds before a region or an entry expires. If timeout is not specified, it defaults to zero (which means no expiration).</td>
<td>-1</td>
</tr>
<tr class="odd">
<td><span class="keyword parmname">\-\-region-time-to-live-expiration-action</span></td>
<td>Action that should take place when a region or an entry expires.
<div class="p">
Select one of the following expiration actions:
<table>
<tbody>
<tr class="odd">
<td><span class="keyword option">local-destroy</span></td>
<td>Removes the region or entry from the local cache, but does not distribute the removal operation to remote members. You cannot use this action on partitioned region entries.</td>
</tr>
<tr class="even">
<td><span class="keyword option">destroy</span></td>
<td>Removes the region or entry completely from the cache. Destroy actions are distributed according to the region's distribution settings. Use this option when the region or entry is no longer needed for any application in the cluster.</td>
</tr>
<tr class="odd">
<td><span class="keyword option">invalidate</span></td>
<td>Default expiration action. Marks an entry or all entries in the region as invalid. Distributes the invalidation according to the region's scope. This is the proper choice when the region or the entry is no longer valid for any application in the cluster.</td>
</tr>
<tr class="even">
<td><span class="keyword option">local-invalidate</span></td>
<td>Marks an entry or all entries in the region as invalid but does not distribute the operation. You cannot use this action on partitioned region entries. Local region invalidation is only supported for regions that are not configured as replicated regions.</td>
</tr>
</tbody>
</table>
</div></td>
<td><code class="ph codeph">invalidate</code></td>
</tr>
</tbody>
</table>

**Example Commands:**

``` pre
alter region --name=region1 --eviction-max=5000 [-group=all]
```

**Sample Output:**

``` pre
gfsh>alter region --name=customer --eviction-max=5000
Member  | Status
------- | ----------------------------------
server1 | Region "/customer" altered on "server1"
```

## <a id="topic_7E6B7E1B972D4F418CB45354D1089C2B" class="no-quick-link"></a>alter runtime

Alters configuration properties for all members or a subset of members while the member or members are running.

For more information on these configuration properties, see [cache.xml](../../../reference/topics/chapter_overview_cache_xml.html#cache_xml) and configuration parameter reference.

**Availability:** Online. You must be connected in `gfsh` to a JMX Manager member to use this command.

**Syntax:**

``` pre
alter runtime [--members=value(,value)*] [--groups=value(,value)*]
    [--archive-disk-space-limit=value]
    [--archive-file-size-limit=value] [--log-disk-space-limit=value]
    [--log-file-size-limit=value] [--log-level=value]
    [--statistic-archive-file=value] [--statistic-sample-rate=value]
    [--enable-statistics=value] [--copy-on-read(=value)?] [--lock-lease=value]
    [--lock-timeout=value] [--message-sync-interval=value] [--search-timeout=value]
```

**Parameters, alter runtime**
<table>
<colgroup>
<col width="25%" />
<col width="50%" />
<col width="25%" />
</colgroup>
<thead>
<tr class="header">
<th>Name</th>
<th>Description</th>
<th>Default Value</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><span class="keyword parmname">\-\-members</span></td>
<td>Name or ID of the member(s) whose configuration is to be altered at runtime. If you do not specify this parameter, the configuration properties are modified for all cluster members using the cluster configuration service.</td>
<td>If not specified, all members using the cluster configuration service</td>
</tr>
<tr class="even">
<td><span class="keyword parmname">\-\-groups</span></td>
<td>Name of the group(s) whose members's runtime configuration is to be altered. If you do not specify this parameter, the configuration properties are modified for all cluster members using the cluster configuration service.</td>
<td>If not specified, all members using the cluster configuration service</td>
</tr>
<tr class="odd">
<td><span class="keyword parmname">\-\-archive-disk-space-limit</span></td>
<td>Archive disk space limit. Maximum size (in megabytes) of all inactive statistic archive files combined. If this limit is exceeded, inactive archive files are deleted, oldest first, until the total size is within the limit. If set to zero, disk space use is unlimited. Valid values are (in megabytes): 0 - 1000000.</td>
<td>0</td>
</tr>
<tr class="even">
<td><span class="keyword parmname">\-\-archive-file-size-limit</span></td>
<td>Archive file size limit. The maximum size (in megabytes) of a single statistic archive file. Once this limit is exceeded, a new statistic archive file is created, and the current archive file becomes inactive. If set to zero, file size is unlimited. Valid values are (in megabytes): 0 - 1000000.</td>
<td>0</td>
</tr>
<tr class="odd">
<td><span class="keyword parmname">\-\-log-disk-space-limit </span></td>
<td>Log disk space limit. Maximum size in megabytes of all inactive log files combined. If this limit is exceeded, inactive log files are deleted, oldest first, until the total size is within the limit. If set to zero, disk space use is unlimited. Valid values are (in megabytes): 0 - 1000000.</td>
<td>0</td>
</tr>
<tr class="even">
<td><span class="keyword parmname">\-\-log-file-size-limit</span></td>
<td>Log file size limit. Maximum size in megabytes of a log file before it is closed and logging rolls on to a new (child) log file. If set to zero, log rolling is disabled. Valid values are (in megabytes): 0 - 1000000.</td>
<td>0</td>
</tr>
<tr class="odd">
<td><span class="keyword parmname">\-\-loglevel </span></td>
<td>The new log level. This option is required and you must specify a value.
Valid values are: `ALL`, `TRACE`, `DEBUG`, `INFO`, `WARN`, `ERROR`, `FATAL`, `OFF`. 
<td>INFO</td>
</tr>
<tr class="even">
<td><span class="keyword parmname">\-\-statistic-archive-file </span></td>
<td>The file to which the running system member writes statistic samples. For example: &quot;StatisticsArchiveFile.gfs&quot;. Must be defined to store the archiving to a file. Adding the <code>.gz</code> suffix to the file name causes it to be compressed. See <a href="../../../managing/statistics/chapter_overview.html">Statistics</a>.</td>
<td><em>not set</em></td>
</tr>
<tr class="odd">
<td><span class="keyword parmname">\-\-statistic-sample-rate </span></td>
<td>Statistic sampling rate. Valid values are (in milliseconds): 100 - 60000. See <a href="../../../managing/statistics/chapter_overview.html">Statistics</a>.</td>
<td>1000</td>
</tr>
<tr class="even">
<td><span class="keyword parmname">\-\-enable-statistics</span></td>
<td>Whether statistic sampling should be enabled. Specify <code>--statistic-archive-file</code> to store the statistics to a file. Valid values are: <code class="ph codeph">true</code> and <code class="ph codeph">false</code>. See <a href="../../../managing/statistics/chapter_overview.html">Statistics</a>.</td>
<td>false</td>
</tr>
<tr class="odd">
<td><span class="keyword parmname">\-\-copy-on-read</span></td>
<td>True or false. Sets the &quot;copy on read&quot; feature for cache read operations. See <a href="../../../basic_config/data_entries_custom_classes/managing_data_entries.html#managing_data_entries__section_A0E0F889AC344EFA8DF304FD64418809">Safe Entry Modification</a>.</td>
<td>false</td>
</tr>
<tr class="even">
<td><span class="keyword parmname">\-\-lock-lease</span></td>
<td>Sets the length, in seconds, of distributed lock leases obtained by this cache. See <a href="../../../managing/monitor_tune/performance_controls_setting_cache_timeouts.html#perf">Setting Cache Timeouts</a>.</td>
<td>120</td>
</tr>
<tr class="odd">
<td><span class="keyword parmname">\-\-lock-timeout</span></td>
<td>Sets the number of seconds a cache operation may wait to obtain a distributed lock lease before timing out.  See <a href="../../../managing/monitor_tune/performance_controls_setting_cache_timeouts.html#perf">Setting Cache Timeouts</a>.</td>
<td>60</td>
</tr>
<tr class="even">
<td><span class="keyword parmname">\-\-message-sync-interval</span></td>
<td>Sets the frequency (in seconds) at which a message will be sent by the primary cache-server node to all the secondary cache-server nodes to remove the events which have already been dispatched from the queue. See <a href="../../../developing/events/ha_event_messaging_whats_next.html#ha_event_messaging_whats_next__section_741052B413F24F47A14F5B7D7955F0AA">Change Server Queue Synchronization Frequency</a>.</td>
<td>1</td>
</tr>
<tr class="odd">
<td><span class="keyword parmname">\-\-search-timeout</span></td>
<td>Sets the number of seconds a cache get operation can spend searching for a value. See <a href="../../../managing/monitor_tune/performance_controls_setting_cache_timeouts.html#perf">Setting Cache Timeouts</a>.</td>
<td>300</td>
</tr>
</tbody>
</table>

**Example Commands:**

``` pre
alter runtime --members=server1 --loglevel=WARN --enable-statistics=true
```

**Sample Output:**

``` pre
gfsh>alter runtime --members=server1 --loglevel=WARN --enable-statistics=true
Runtime configuration altered successfully for the following member(s)
192.0.2.0(server1:240)<v1>:64871
```
