---
title: create
---

<!--
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.
-->

Create async-event-queues, disk-stores, gateway receivers, gateway senders, indexes, and regions.

-   **[create async-event-queue](#topic_ryz_pb1_dk)**

    Creates an asynchronous event queue for batching events before they are delivered by a gateway sender.

-   **[create defined indexes](#topic_w2t_l3m_qq)**

    Creates all the defined indexes.

-   **[create disk-store](#topic_bkn_zty_ck)**

    Defines a pool of one or more disk stores, which can be used by regions and client subscription queues, and gateway sender queues for WAN distribution.

-   **[create gateway-receiver](#topic_a4x_pb1_dk)**

    Creates a gateway receiver. You can only have one gateway receiver on each member, and unlike a gateway sender, you do not need to specify an identifier for the gateway receiver .

-   **[create gateway-sender](#topic_hg2_bjz_ck)**

    Creates a gateway sender on one or more members of a cluster.

-   **[create index](#topic_960A5B6FD3D84E1881EE118E299DD12D)**

    Create an index that can be used when executing queries.

-   **[create jndi-binding](#create_jndi-binding)**

    Create a JNDI binding that specifies resource attributes which describe a JDBC connection.

-   **[create lucene index](#create_lucene_index)**

    Create a region with given path and configuration.

-   **[create region](#topic_54B0985FEC5241CA9D26B0CE0A5EA863)**

    Create a region with given path and configuration.

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

Creates an asynchronous event queue for batching events before they are delivered by a gateway sender.

See [Configuring Multi-Site (WAN) Event Queues](../../../developing/events/configure_multisite_event_messaging.html#configure_multisite_event_messaging).

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

**Syntax:**

``` pre
create async-event-queue --id=value --listener=value [--groups=value(,value)*]
    [--parallel(=value)?] [--enable-batch-conflation(=value)?] [--batch-size=value]
    [--batch-time-interval=value] [--persistent(=value)?] [--disk-store=value]
    [--disk-synchronous(=value)?] [--max-queue-memory=value]
    [--dispatcher-threads=value] [--order-policy=value]
    [--gateway-event-filter=value(,value)*]
    [--gateway-event-substitution-filter=value]
    [--listener-param=value(,value)*] [--forward-expiration-destroy(=value)?]
    [--pause-event-processing(=value)?]
```

**Parameters, create async-event-queue:**
<table>
<colgroup>
<col width="33%" />
<col width="34%" />
<col width="33%" />
</colgroup>
<thead>
<tr class="header">
<th>Name</th>
<th>Description</th>
<th>Default Value</th>
</tr>
</thead>
<tbody>
<tr>
<td><span class="keyword parmname">\-\-id</span></td>
<td><em>Required</em>. ID of the asynchronous event queue</td>
<td> </td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-groups</span></td>
<td>The queue is created on all members of the group(s). If you do not specify a group, the queue is created on all members.</td>
<td> </td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-parallel</span></td>
<td>Specifies whether the queue is parallel.</td>
<td>false</td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-enable-batch-conflation</span></td>
<td>Enables batch conflation.</td>
<td>false</td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-batch-size</span></td>
<td>Maximum number of messages that a batch can contain.</td>
<td>100</td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-batch-time-interval</span></td>
<td>Maximum amount of time, in ms, that can elapse before a batch is delivered.</td>
<td>5</td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-persistent</span></td>
<td>Boolean value that determines whether <%=vars.product_name%> persists this queue.</td>
<td>false
<p>If specified with out a value, default is true.</p></td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-disk-store</span></td>
<td>Named disk store to use for storing queue overflow, or for persisting the queue. If you specify a value, the named disk store must exist. If you specify a null value, <%=vars.product_name%> uses the default disk store for overflow and queue persistence.</td>
<td> </td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-disk-synchronous</span></td>
<td>Specifies whether disk writes are synchronous.</td>
<td>true</td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-max-queue-memory</span></td>
<td>Maximum amount of memory in megabytes that the queue can consume before overflowing to disk.</td>
<td>100</td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-dispatcher-threads</span></td>
<td>Number of threads used for sending events.</td>
<td>5</td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-order-policy</span></td>
<td>Policy for dispatching events when \-\-dispatcher-threads is &gt; 1. Possible values are <code class="ph codeph">THREAD</code>, <code class="ph codeph">KEY</code>, <code class="ph codeph">PARTITION</code>.</td>
<td>KEY</td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-gateway-event-filter</span></td>
<td>List of fully qualified class names of GatewayEventFilters for this queue. These classes filter events before dispatching to remote servers.</td>
<td> </td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-gateway-event-substitution-filter</span></td>
<td>Fully-qualified class name of the <code class="ph codeph">GatewayEventSubstitutionFilter</code> for this queue.</td>
<td> </td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-listener</span></td>
<td><em>Required.</em> Fully-qualified class name of Async Event Listener for this queue</td>
<td> </td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-listener-param</span></td>
<td>Parameter name and value to be passed to the Async Event Listener class. Optionally, you can specify a value by following the parameter name with the # character and the value. For example:
<pre class="pre codeblock"><code>--listener-param=myParam#24</code></pre></td>
<td> </td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-forward-expiration-destroy</span></td>
<td>Enables forwarding of expiration destroy operations to AsyncEventListener instances. If specified without a value, this parameter is set to “false”.</td>
<td>false</td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-pause-event-processing</span></td>
<td>Specifies whether event dispatching from the queue to the listener(s) will be paused when the AsyncEventQueue is started. If specified without a value, this parameter is set to "true".</td>
<td>false</td>
</tr>
</tbody>
</table>

**Example Commands:**

``` pre
create async-event-queue --id=myAEQ --listener=myApp.myListener
```

## <a id="topic_w2t_l3m_qq" class="no-quick-link"></a>create defined indexes

Creates all the defined indexes.

See also [define index](define.html) and [clear defined indexes](clear.html).

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

**Syntax:**

``` pre
create defined indexes [--members=value(,value)*] [--groups=value(,value)*]
```

**Parameters, create defined indexes:**

| Name                                           | Description                                                        | Default |
|------------------------------------------------|--------------------------------------------------------------------|---------|
| <span class="keyword parmname">\\-\\-members</span> | Name/Id of the member(s) on which index will be created.              |         |
| <span class="keyword parmname">\\-\\-groups</span>  | The index will be created on all the members in the member group(s). |         |


**Example Commands:**

``` pre
create defined indexes
```

**Sample Output:**

``` pre
gfsh>create defined indexes
Indexes successfully created. Use list indexes to get details.
1. ubuntu(server1:17682)<v1>:27574
```

If index creation fails, you may receive an error message in gfsh similar to the following:

``` pre
gfsh>create defined indexes
Exception : org.apache.geode.cache.query.RegionNotFoundException , 
Message : Region ' /r3' not found: from  /r3Occurred on following members
1. india(s1:17866)<v1>:27809
```

## <a id="topic_bkn_zty_ck" class="no-quick-link"></a>create disk-store

Defines a pool of one or more disk stores, which can be used by regions and client subscription queues, and gateway sender queues for WAN distribution.

See [Disk Storage](../../../managing/disk_storage/chapter_overview.html)

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

**Syntax:**

``` pre
create disk-store --name=value --dir=value(,value)* [--allow-force-compaction(=value)?] 
[--auto-compact(=value)?] [--compaction-threshold=value] [--max-oplog-size=value]
[--queue-size=value] [--time-interval=value] [--write-buffer-size=value]
[--groups=value(,value)*]
[--disk-usage-warning-percentage=value] [--disk-usage-critical-percentage=value]
```


**Parameters, create disk-store:**

<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>
<td><span class="keyword parmname">\-\-name</span></td>
<td><em>Required.</em> The name of this disk store.</td>
<td> </td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-dir</span></td>
<td><em>Required.</em> One or more directory names where the disk store files are written. Optionally, directory names may be followed by <code class="ph codeph">#</code> and the maximum number of megabytes that the disk store can use in the directory. For example:
<pre class="pre codeblock"><code>--dir=/data/ds1 
--dir=/data/ds2#5000</code></pre>
If the specified directory does not exist, the command will create the directory for you.</td>
<td> </td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-allow-force-compaction</span></td>
<td>Set to true to allow disk compaction to be forced on this disk store.</td>
<td>false</td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-auto-compact</span></td>
<td>Set to true to automatically compact the disk files.</td>
<td>true</td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-compaction-threshold</span></td>
<td>Percentage of non-garbage remaining, below which the disk store is eligible for compaction.</td>
<td>50</td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-max-oplog-size</span></td>
<td>Maximum size, in megabytes, for an oplog file. When the oplog file reaches this size, the file is rolled over to a new file.</td>
<td>1024</td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-queue-size</span></td>
<td>Maximum number of operations that can be asynchronously queued to be written to disk.</td>
<td>0</td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-time-interval</span></td>
<td>The number of milliseconds that can elapse before unwritten data is written to disk.</td>
<td>1000</td>
</tr>
<tr>
<td><span class="keyword parmname"> --groups</span></td>
<td>The disk store is created on all members of the group(s). If no group is specified, the disk store is created on all members.</td>
<td> </td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-write-buffer-size</span></td>
<td>The size of the write buffer that this disk store uses when writing data to disk. Larger values may increase performance but use more memory. The disk store allocates one direct memory buffer of this size.</td>
<td>32768</td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-disk-usage-warning-percentage</span></td>
<td>Disk usage above this threshold generates a warning message. For example, if the threshold is set to 90%, then on a 1 TB drive falling under 100 GB of free disk space generates the warning.
<p>Set to &quot;0&quot; (zero) to disable.</p></td>
<td>90</td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-disk-usage-critical-percentage</span></td>
<td>Disk usage above this threshold generates an error message and shuts down the member's cache. For example, if the threshold is set to 99%, then falling under 10 GB of free disk space on a 1 TB drive generates the error and shuts down the cache.
<p>Set to &quot;0&quot; (zero) to disable.</p></td>
<td>99</td>
</tr>
</tbody>
</table>

**Example Commands:**

``` pre
create disk-store --name-store1 --dir=/data/ds1
```

**Sample Output:**

``` pre
gfsh>create disk-store --name-store1 --dir=/data/ds1
Member  | Result
------- | -------
server1 | Success
```

## <a id="topic_a4x_pb1_dk" class="no-quick-link"></a>create gateway-receiver

Creates gateway receivers. You can only have one gateway receiver on each member, and unlike a gateway sender, you do not need to specify an identifier for the gateway receiver.

The create occurs on all servers,
unless the `--groups` or `--members` option is specified.

If the gateway receiver creation succeeds on at least one member,
this `gfsh` command exits with an exit code indicating success.


Outputs a tabular format status of each member's gateway receiver,
independent of the success or failure of the creation.

See [Gateway Receivers](../../../topologies_and_comm/topology_concepts/multisite_overview.html).

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

**Syntax:**

``` pre
create gateway-receiver [--groups=value(,value)*] [--members=value(,value)*] 
  [--manual-start=(value)?] [--start-port=value] [--end-port=value] [--bind-address=value] 
  [--maximum-time-between-pings=value] [--socket-buffer-size=value]
  [--gateway-transport-filter=value(,value)*] [--hostname-for-senders=value]
  [--if-not-exists=(value)?]
```

**Parameters, create gateway-receiver:**

<table>
<colgroup>
<col width="25%" />
<col width="65%" />
<col width="10%" />
</colgroup>
<thead>
<tr class="header">
<th>Name</th>
<th>Description</th>
<th>Default Value</th>
</tr>
</thead>
<tbody>
<tr>
<td><span class="keyword parmname">\-\-groups</span></td>
<td>Gateway receivers are created on the members of the group(s).</td>
<td> </td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-members</span></td>
<td>Name of the member(s) on which to create the gateway receiver.
For backward compatibility, no gateway receiver configuration is persisted
if this option is specified and cluster configuration is enabled.
</td>
<td> </td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-manual-start</span></td>
<td>Boolean value that specifies whether you need to manually start the gateway receiver. When specified without providing a boolean value or when specified and set to &quot;true&quot;, the gateway receiver must be started manually.</td>
<td>false</td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-start-port</span></td>
<td><p>Starting port number to use when specifying the range of possible port numbers this gateway receiver will use to connects to gateway senders in other sites. <%=vars.product_name%> chooses an unused port number in the specified port number range to start the receiver. If no port numbers in the range are available, an exception is thrown.</p>
<p>The <code class="ph codeph">STARTPORT</code> value is inclusive while the <code class="ph codeph">ENDPORT</code> value is exclusive. For example, if you specify <code class="ph codeph">STARTPORT=&quot;50510&quot;</code> and <code class="ph codeph">ENDPORT=&quot;50520&quot;</code>, <%=vars.product_name%> chooses a port value from 50510 to 50519.</p></td>
<td>5000</td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-end-port</span></td>
<td><p>Defines the upper bound port number to use when specifying the range of possible port numbers this gateway receiver will use to for connections from gateway senders in other sites. <%=vars.product_name%> chooses an unused port number in the specified port number range to start the receiver. If no port numbers in the range are available, an exception is thrown.</p>
<p>The <code class="ph codeph">ENDPORT</code> value is exclusive while the <code class="ph codeph">STARTPORT</code> value is inclusive. For example, if you specify <code class="ph codeph">STARTPORT=&quot;50510&quot;</code> and <code class="ph codeph">ENDPORT=&quot;50520&quot;</code>, <%=vars.product_name%> chooses a port value from 50510 to 50519.</p></td>
<td>5500</td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-bind-address</span></td>
<td>Network address for connections from gateway senders in other sites. Specify the address as a literal string value.</td>
<td> </td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-socket-buffer-size</span></td>
<td>An integer value that sets the buffer size (in bytes) of the socket connection for this gateway receiver. This value should match the <code class="ph codeph">socket-buffer-size</code> setting of gateway senders that connect to this receiver.</td>
<td>32768</td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-gateway-transport-filter</span></td>
<td>The fully qualified class name of the GatewayTransportFilter to be added to the Gateway receiver.</td>
<td> </td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-maximum-time-between-pings</span></td>
<td>Integer value that specifies the time interval (in milliseconds) to use between pings to connected WAN sites. This value determines the maximum amount of time that can elapse before a remote WAN site is considered offline.</td>
<td>60000</td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-hostname-for-senders</span></td>
<td>The host name or IP address told to gateway senders as the address for them to connect to. The locator informs gateway senders of this value.</td>
<td> </td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-if-not-exists</span></td>
<td>When specified without providing a boolean value or when specified and set to &quot;true&quot;, gateway receivers will not be created if they already exist. Command output reports the status of each creation attempt.
</td>
<td>false</td>
</tr>

</tbody>
</table>

**Example Commands:**

``` pre
gfsh>create gateway-receiver --members=server1
```

**Sample Output:**

``` pre
gfsh>create gateway-receiver --members=server1
Member  | Status
------- | ---------------------------------------------------------------------------
server1 | GatewayReceiver created on member "server1" and will listen on the port "0"
```

## <a id="topic_hg2_bjz_ck" class="no-quick-link"></a>create gateway-sender

Creates a gateway sender on one or more members of a cluster.

See [Gateway Senders](../../../topologies_and_comm/topology_concepts/multisite_overview.html).

**Note:**
The gateway sender configuration for a specific sender `id` must be identical on each <%=vars.product_name%> member that hosts the gateway sender.

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

**Syntax:**

``` pre
create gateway-sender --id=value --remote-distributed-system-id=value 
   [--groups=value(,value)*] [--members=value(,value)*] [--parallel(=value)?]
   [--manual-start=value] [--socket-buffer-size=value] [--socket-read-timeout=value] 
   [--enable-batch-conflation=value] [--batch-size=value] [--batch-time-interval=value]
   [--enable-persistence=value] [--disk-store-name=value] [--disk-synchronous=value] 
   [--maximum-queue-memory=value] [--alert-threshold=value] [--dispatcher-threads=value] 
   [--order-policy=value][--gateway-event-filter=value(,value)*]
   [--gateway-transport-filter=value(,value)*]
   [--group-transaction-events(=value)?]
```

**Parameters, create gateway-sender:**

<table>
<colgroup>
<col width="30%" />
<col width="50%" />
<col width="20%" />
</colgroup>
<thead>
<tr class="header">
<th>Name</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr>
<td><span class="keyword parmname">\-\-id</span></td>
<td><em>Required.</em> Unique identifier for the gateway sender, usually an identifier associated with a physical location.</td>
<td> </td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-remote-distributed-system-id</span></td>
<td><em>Required.</em> ID of the remote cluster where this gateway sender sends events.</td>
<td> </td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-groups</span></td>
<td>Gateway senders are created on the members of the group(s).</td>
<td> </td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-members</span></td>
<td>Name of the member(s) on which to create the gateway sender.</td>
<td> </td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-parallel</span></td>
<td>When set to true, specifies a parallel Gateway Sender.</td>
<td>false</td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-enable-batch-conflation</span></td>
<td>Boolean value that determines whether <%=vars.product_name%> should conflate messages.</td>
<td>false</td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-manual-start</span></td>
<td><b>Deprecated.</b> Boolean value that specifies whether you need to manually start the gateway sender. If you supply a null value, the default value of false is used, and the gateway sender starts automatically. <em>A manual start is likely to cause data loss, so manual start should never be used in a production system.</em></td>
<td>false</td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-socket-buffer-size</span></td>
<td>Size of the socket buffer that sends messages to remote sites. This size should match the size of the <code class="ph codeph">socket-buffer-size</code> attribute of remote gateway receivers that process region events.</td>
<td>32768</td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-socket-read-timeout</span></td>
<td>Amount of time in milliseconds that the gateway sender will wait to receive an acknowledgment from a remote site. By default this is set to 0, which means there is no timeout. If you do set this timeout, you must set it to a minimum of 30000 (milliseconds). Setting it to a lower number will generate an error message and reset the value to the default of 0.</td>
<td>0</td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-batch-size</span></td>
<td>Maximum number of messages that a batch can contain.</td>
<td>100</td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-batch-time-interval</span></td>
<td>Maximum number of milliseconds that can elapse between sending batches.</td>
<td>1000</td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-enable-persistence</span></td>
<td>Boolean value that determines whether <%=vars.product_name%> persists the gateway queue.</td>
<td>false</td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-disk-store-name</span></td>
<td>Named disk store to use for storing the queue overflow, or for persisting the queue. If you specify a value, the named disk store must exist. If you specify a null value, <%=vars.product_name%> uses the default disk store for overflow and queue persistence. For parallel gateway senders, set this to the same disk store the region uses.</td>
<td> </td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-disk-synchronous</span></td>
<td>For regions that write to disk, boolean that specifies whether disk writes are done synchronously for the region.</td>
<td>true</td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-maximum-queue-memory</span></td>
<td>Maximum amount of memory in megabytes that the queue can consume before overflowing to disk.</td>
<td>100 MB</td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-alert-threshold</span></td>
<td>Maximum number of milliseconds that a region event can remain in the gateway sender queue before <%=vars.product_name%> logs an alert.</td>
<td>0</td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-dispatcher-threads</span></td>
<td>Number of dispatcher threads that are used to process region events from a gateway sender queue or asynchronous event queue.</td>
<td>5</td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-order-policy</span></td>
<td>When the <code class="ph codeph">dispatcher-threads</code> attribute is greater than 1, <code class="ph codeph">order-policy</code> configures the way in which multiple dispatcher threads process region events from a serial gateway queue or serial asynchronous event queue. This attribute can have one of the following values:
<dt><b>key</b></dt>
<dd>When distributing region events from the local queue, multiple dispatcher threads preserve the order of key updates.</dd>
<dt><b>thread</b></dt>
<dd>When distributing region events from the local queue, multiple dispatcher threads preserve the order in which a given thread added region events to the queue.</dd>
<dt><b>partition</b></dt>
<dd>When distributing region events from the local queue, multiple dispatcher threads preserve the order in which region events were added to the local queue. For a partitioned region, this means that all region events delivered to a specific partition are delivered in the same order to the remote <%=vars.product_name%> site. For a distributed region, this means that all key updates delivered to the local gateway sender queue are distributed to the remote site in the same order.</dd>

<p>You cannot configure the <code class="ph codeph">order-policy</code> for a parallel event queue, because parallel queues cannot preserve event ordering for regions. Only the ordering of events for a given partition (or in a given queue of a distributed region) can be preserved.</p></td>
<td>key</td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-gateway-event-filter</span></td>
<td>A list of fully-qualified class names of GatewayEventFilters (separated by commas) to be associated with the GatewaySender. This serves as a callback for users to filter out events before dispatching to a remote cluster. For example:
<pre class="pre codeblock"><code>gateway-event-filter=com.user.filters.MyFilter1,com.user.filters.MyFilters2</code></pre></td>
<td> </td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-gateway-transport-filter</span></td>
<td>The fully-qualified class name of the GatewayTransportFilter to be added to the GatewaySender.</td>
<td> </td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-group-transaction-events</span></td>
<td>Boolean value to ensure that all the events of a transaction are sent in the same batch, i.e., they are never spread across different batches.
<p>Only allowed to be set on gateway senders with the <code class="ph codeph">parallel</code> attribute set to false and <code class="ph codeph">dispatcher-threads</code> attribute equal to 1, or on gateway senders with the <code class="ph codeph">parallel</code> attribute set to true. Also, the  <code class="ph codeph">enable-batch-conflation</code> attribute of the gateway sender must be set to false.</p>
<p><b>Note:</b> In order to work for a transaction, the regions to which the transaction events belong must be replicated by the same set of senders with this flag enabled.</p>
<p><b>Note:</b> If the above condition is not fulfilled or under very high load traffic conditions, it may not be guaranteed that all the events for a transaction will be sent in the same batch, even if <code class="ph codeph">group-transaction-events</code> is enabled. The number of batches sent with incomplete transactions can be retrieved from the <code class="ph codeph">GatewaySenderMXBean</code> bean.</p></td>
</td>
<td>false</td>
</tr>
</tbody>
</table>

**Example Commands:**

``` pre
gfsh>create gateway-sender --remote-distributed-system-id="2" --id="sender2"
```

**Sample Output:**

``` pre
gfsh>create gateway-sender --remote-distributed-system-id="2" --id="sender2"
Member  | Status
------- | --------------------------------------------
server1 | GatewaySender "sender2" created on "server1"
```

## <a id="topic_960A5B6FD3D84E1881EE118E299DD12D" class="no-quick-link"></a>create index

Create an index that can be used when executing queries.

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

See [Working with Indexes](../../../developing/query_index/query_index.html).

**Syntax:**

``` pre
create index --name=value --expression=value --region=value 
[--members=value(,value)*] [--type=value] [--groups=value(,value)*]
```

**Parameters, create index:**

| Name                                               | Description                                                                            | Default |
|----------------------------------------------------|----------------------------------------------------------------------------------------|---------|
| <span class="keyword parmname">\\-\\-name</span>       | *Required.* Name of the index to create.                                               |         |
| <span class="keyword parmname">&#8209;&#8209;expression</span> | *Required.* Field of the region values that are referenced by the index.               |         |
| <span class="keyword parmname">\\-\\-region</span>     | *Required.* Name/Path of the region which corresponds to the "from" clause in a query. |         |
| <span class="keyword parmname">\\-\\-members</span>     | Name/Id of the member(s) on which index will be created.                                  |         |
| <span class="keyword parmname">\\-\\-type</span>       | Type of the index. Valid values are: `range` and `key`. (A third type, `hash`, is still recognized but hash indexes are deprecated.)                       | `range` |
| <span class="keyword parmname">\\-\\-groups</span>      | The index will be created on all the members in the group(s).                     |         |


**Example Commands:**

``` pre
create index --name=myKeyIndex --expression=region1.Id --region=region1 --type=key
```

**Sample Output:**

``` pre
gfsh>create index --name=myKeyIdex --expression=region1.Id --region=region1 --type=key
Index successfully created with following details
Name       : myKeyIdex
Expression : region1.Id
RegionPath : /region1
Members which contain the index
1. ubuntu(server1:17682)<v1>:27574

gfsh>create index --name=myIndex2 --expression=exp2 --region=/exampleRegion
Failed to create index "myIndex2" due to following reasons
Index "myIndex2" already exists.  Create failed due to duplicate name.
Occurred on following members
1. ubuntu(server1:17682)<v1>:27574
```

## <a id="create_jndi-binding" class="no-quick-link"></a>create jndi-binding

Create a JNDI binding that specifies resource attributes which describe a
JDBC connection.

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

**Syntax:**

``` pre
create jndi-binding --name=value --url=value
 [--jdbc-driver-class=value] [--type=value] [--blocking-timeout-seconds=value]
 [--conn-pooled-datasource-class=value] [--idle-timeout-seconds=value]
 [--init-pool-size=value] [--login-timeout-seconds=value]
 [--managed-conn-factory-class=value] [--max-pool-size=value] [--password=value]
 [--transaction-type=value] [--username=value] [--xa-datasource-class=value]
 [--if-not-exists(=value)?] [--datasource-config-properties=value(,value)*]
```

**Parameters, create jndi-binding:**

| Name                                               | Description                                                                            | Default |
|----------------------------------------------------|----------------------------------------------------------------------------------------|---------|
| <span class="keyword parmname">\\-\\-name</span>       | *Required.* Name of the binding to create.                                               |         |
| <span class="keyword parmname">&#8209;&#8209;url or &#8209;&#8209;connection-url</span>       | *Required.* the JDBC driver connection URL string. For example, `jdbc:hsqldb:hsql://localhost:1701`.              |         |
| <span class="keyword parmname">\\-\\-jdbc-driver-class</span>       | The fully qualified name of the JDBC driver class.              |         |
| <span class="keyword parmname">\\-\\-type</span>       | Type of the XA datasource. One of: `MANAGED`, `SIMPLE`, `POOLED`, or `XAPOOLED`. If `--type=POOLED` and a `--conn-pooled-datasource-class` option is not specified, a pool will be created using Hikari. For more information on Hikari, see [https://brettwooldridge.github.io/HikariCP](https://brettwooldridge.github.io/HikariCP).    | `SIMPLE` |
| <span class="keyword parmname">\\-\\-blocking-timeout-seconds</span>       | Specifies the maximum time, in seconds, to block while waiting for a connection before throwing an exception.                                        |         |
| <span class="keyword parmname">\\-\\-conn-pooled-datasource-class</span>   | The fully qualified name of the connection pool implementation that holds XA datasource connections. If `--type=POOLED`, then this class must implement `org.apache.geode.datasource.PooledDataSourceFactory`.                                                 |         |
| <span class="keyword parmname">\\-\\-idle-timeout-seconds</span>   | Specifies the time, in seconds, that a connection may be idle before being closed. |         |
| <span class="keyword parmname">\\-\\-init-pool-size</span>   | Specifies the initial number of connections the pool should hold.                  |         |
| <span class="keyword parmname">\\-\\-login-timeout-seconds</span>   | The quantity of seconds after which the client thread will be disconnected due to inactivity. |         |
| <span class="keyword parmname">\\-\\-managed-conn-factory-class</span>   | The fully qualified name of the connection factory implementation.     |         |
| <span class="keyword parmname">\\-\\-max-pool-size</span>   | The maximum number of connections that may be created in a pool.                    |         |
| <span class="keyword parmname">\\-\\-password</span>   | The default password used when creating a new connection.                                |         |
| <span class="keyword parmname">\\-\\-transaction-type</span>   | Type of the transaction. One of `XATransaction`, `NoTransaction`, or `LocalTransaction`. |         |
| <span class="keyword parmname">\\-\\-username</span>   | Specifies the user name to be used when creating a new connection. When specified, if the `--password` option is not also specified, gfsh will prompt for the password. |         |
| <span class="keyword parmname">\\-\\-xa-datasource-class</span>   | The fully qualified name of the `javax.sql.XADataSource` implementation class. |         |
| <span class="keyword parmname">\\-\\-if-not-exists</span>   | When true, a duplicate jndi binding will not be created if one with the same name already exists.  When false, an attempt to create a duplicate jndi binding results in an error. The option is set to true if the option is specified without a value. | false   |
| <span class="keyword parmname">\\-\\-datasource-config-properties</span>   | Properties for the custom `XADataSource` driver. Append a JSON string containing a (name, type, value) tuple to set any property. If `--type=POOLED`, the properties will configure the database data source. If `--type=POOLED` and the value of a name within the tuple begins with the string "pool.", then the properties will configure the pool data source. For example: `--datasource-config-properties={'name':'name1','type':'type1','value':'value1'},{'name':'pool.name2','type':'type2','value':'value2'}`         |         |

**Example Commands:**

``` pre
gfsh>create jndi-binding --name=jndi1 --type=SIMPLE \
  --jdbc-driver-class=org.apache.derby.jdbc.EmbeddedDriver \
  --url="jdbc:derby:newDB;create=true"
```

## <a id="create_lucene_index" class="no-quick-link"></a>create lucene index

Create a Lucene index. For details on Lucene index creation, see [Apache Lucene Integration](../../../tools_modules/lucene_integration.html).

For additional Lucene-related gfsh commands, see [describe lucene index](describe.html#describe_lucene_index), [destroy lucene index](destroy.html#destroy_lucene_index), [list lucene indexes](list.html#list_lucene_indexes) and [search lucene](search.html#search_lucene).

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

**Syntax:**

``` pre
create lucene index --name=value --region=value --field=value(,value)*
  [--analyzer=value(,value)*] [--serializer=value] [--group=value(,value)*]
```

**Parameters, create lucene index:**

| Name                                               | Description                                                                            | Default |
|----------------------------------------------------|----------------------------------------------------------------------------------------|---------|
| <span class="keyword parmname">\\-\\-name</span>       | *Required.* Name of the index to create.                                               |         |
| <span class="keyword parmname">\\-\\-region</span>     | *Required.* Name/Path of the region on which to define the index. |         |
| <span class="keyword parmname">\\-\\-field</span>      | *Required.* Field(s) of the region values that are referenced by the index, specified as a comma-separated list. To treat the entire value as a single field, specify `__REGION_VALUE_FIELD`. |         |
| <span class="keyword parmname">&#8209;&#8209;analyzer</span>   | Analyzer(s) to extract terms from text, specified as a comma-separated list. If not specified, the default analyzer is used for all fields. If specified, the number of analyzers must exactly match the number of fields specified. When listing analyzers, use the keyword `DEFAULT` for any field that will use the default analyzer.                                  | Lucene `StandardAnalyzer`        |
| <span class="keyword parmname">&#8209;&#8209;serializer</span>   | Fully qualified class name of the serializer to be used with this index. The serializer must implement the `LuceneSerializer` interface. You can use the built-in `org.apache.geode.cache.lucene.FlatFormatSerializer` to index and search collections and nested fields. If not specified, the simple default serializer is used, which indexes and searches only the top level fields of the region objects.   | simple serializer        |
| <span class="keyword parmname">\\-\\-group</span>      | The index will be created on all the members in the specified member groups.                     |         |


**Example Commands:**

``` pre
gfsh>create lucene index --name=customerIndex --region=/Customer 
   --field=__REGION_VALUE_FIELD

gfsh>create lucene index --name=analyzerIndex --region=/Person 
     --field=name,email,address,revenue 
     --analyzer=DEFAULT,org.apache.lucene.analysis.core.KeywordAnalyzer,
                examples.MyCharacterAnalyzer,DEFAULT
```

**Sample Output:**

``` pre
gfsh>create lucene index --name=testIndex --region=testRegion
    --field=__REGION_VALUE_FIELD
               Member                  | Status
-------------------------------------- | ---------------------------------
192.168.1.23(server505:17200)<v1>:1025 | Successfully created lucene index
```

## <a id="topic_54B0985FEC5241CA9D26B0CE0A5EA863" class="no-quick-link"></a>create region

Create a region with given path and configuration.

You must specify either a `--type` or a `--template-region` for initial configuration when creating a region. Specifying a `--key-constraint` and `--value-constraint` makes object type information available during querying and indexing.

See [Region Data Storage and Distribution](../../../developing/region_options/chapter_overview.html).

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

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

**Syntax:**

``` pre
 create region --name=value [--type=value] [--template-region=value]
    [--groups=value(,value)*] [--if-not-exists(=value)?]
    [--key-constraint=value] [--value-constraint=value]
    [--enable-statistics=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] [--disk-store=value]
    [--enable-synchronous-disk=value] [--enable-async-conflation=value]
    [--enable-subscription-conflation=value] [--cache-listener=value(,value)*]
    [--cache-loader=value] [--cache-writer=value]
    [--async-event-queue-id=value(,value)*]
    [--gateway-sender-id=value(,value)*] [--enable-concurrency-checks=value]
    [--enable-cloning=value] [--concurrency-level=value]
    [--colocated-with=value] [--local-max-memory=value]
    [--recovery-delay=value] [--redundant-copies=value]
    [--startup-recovery-delay=value] [--total-max-memory=value]
    [--total-num-buckets=value] [--compressor=value] [--off-heap(=value)?]
    [--partition-resolver=value] [--eviction-entry-count=value]
    [--eviction-max-memory=value] [--eviction-action=value] [--eviction-object-sizer=value]
```

**Parameters, create region:**

<table>
<colgroup>
<col width="20%" />
<col width="50%" />
<col width="30%" />
</colgroup>
<thead>
<tr class="header">
<th>Name</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr>
<td><span class="keyword parmname">\-\-name</span></td>
<td><em>Required.</em> Name/Path of the region to be created.</td>
<td> </td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-type</span></td>
<td><em>Required</em> (if template-region is not specified.) Type of region to create. Options include: PARTITION, PARTITION_REDUNDANT, REPLICATE, LOCAL, etc.
<p>To get a list of of all region type options, add the <span class="keyword parmname">\-\-type</span> parameter and then select the TAB key to display a full list.</p></td>
<td> </td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-template-region </span></td>
<td><em>Required</em> (if type is not specified.) Name/Path of the region whose attributes should be duplicated when creating this region.</td>
<td> </td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-groups</span></td>
<td>Group(s) of members on which the region will be created.</td>
<td> </td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-if-not-exists</span></td>
<td>A new region will not be created if a region with the same name already exists. By default, an attempt to create a duplicate region is reported as an error.
If this option is specified without a value or is specified with a value of <code>true</code>, then gfsh displays a "Skipping..." acknowledgement, but does not throw an error.</td>
<td>false</td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-key-constraint</span></td>
<td>Fully qualified class name of the objects allowed as region keys. Ensures that keys for region entries are all of the same class.</td>
<td> </td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-value-constraint </span></td>
<td>Fully qualified class name of the objects allowed as region values. If not specified, then region values can be of any class.</td>
<td> </td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-enable-statistics</span></td>
<td>Whether to gather statistics for the region. Must be true to use expiration on the region.</td>
<td> </td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-entry-idle-time-expiration</span></td>
<td>How long, in seconds, the region's entries can remain in the cache without being accessed.</td>
<td>no expiration</td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-entry-idle-time-expiration-action </span></td>
<td>Action to be taken on an entry that has exceeded the idle expiration. Valid expiration actions include destroy, local-destroy, invalidate (default), local-invalidate.</td>
<td> </td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-entry-time-to-live-expiration</span></td>
<td>How long, in seconds, the region's entries can remain in the cache without being accessed or updated. The default is no expiration of this type.</td>
<td>no expiration</td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-entry-time-to-live-expiration-action</span></td>
<td>Action to be taken on an entry that has exceeded the TTL expiration. Valid expiration actions include destroy, local-destroy, invalidate (default), local-invalidate.</td>
<td> </td>
</tr>
<tr>
<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>
<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>
<td><span class="keyword parmname">\-\-region-idle-time-expiration</span></td>
<td>How long, in seconds, the region can remain in the cache without its entries being accessed. The default is no expiration of this type.</td>
<td></td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-region-idle-time-expiration-action</span></td>
<td>Action to be taken on a region that has exceeded the idle expiration. Valid expiration actions include destroy, local-destroy, invalidate (default), local-invalidate. The destroy and local-destroy actions destroy the region. The invalidate and local-invalidate actions leave the region in place, but invalidate all of its entries.</td>
<td> </td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-region-time-to-live-expiration</span></td>
<td>How long, in seconds, the region can remain in the cache without its entries being accessed or updated. The default is no expiration of this type.</td>
<td>no expiration</td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-region-time-to-live-expiration-action</span></td>
<td>Action to be taken on a region that has exceeded the TTL expiration. Valid expiration actions include destroy, local-destroy, invalidate (default), local-invalidate. The destroy and local-destroy actions destroy the region. The invalidate and local-invalidate actions leave the region in place, but invalidate all of its entries.</td>
<td> </td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-disk-store</span></td>
<td>Disk Store to be used by this region. The <a href="list.html#topic_BC14AD57EA304FB3845766898D01BD04">list disk-stores</a> command can be used to display existing disk stores.</td>
<td> </td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-enable-synchronous-disk</span></td>
<td>Whether writes are done synchronously for regions that persist data to disk.</td>
<td> </td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-enable-async-conflation</span></td>
<td>Whether to allow aggregation of asynchronous TCP/IP messages sent by the producer member of the region. A false value causes all asynchronous messages to be sent individually.</td>
<td> </td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-enable-subscription-conflation</span></td>
<td>Whether the server should conflate its messages to the client. A false value causes all server-client messages to be sent individually.</td>
<td> </td>
</tr>
<tr>
<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>
<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>
<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>
<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>
<td><span class="keyword parmname">\-\-gateway-sender-id</span></td>
<td>IDs of the Gateway Senders to which data will be routed.</td>
<td> </td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-enable-concurrency-checks</span></td>
<td>Whether Region Version Vectors are implemented. Region Version Vectors are an extension to the versioning scheme that aid in synchronization of replicated regions.</td>
<td> </td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-enable-cloning</span></td>
<td>Determines how fromDelta 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.</td>
<td> </td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-concurrency-level </span></td>
<td>Estimate of the maximum number of application threads that will concurrently access a region entry at one time. This attribute does not apply to partitioned regions.</td>
<td> </td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-colocated-with </span></td>
<td>Central Region with which this region should be colocated.</td>
<td> </td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-local-max-memory</span></td>
<td>Maximum amount of memory, in megabytes, to be used by the region in this process. (The default is 90% of available heap.)</td>
<td> </td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-recovery-delay </span></td>
<td>Delay in milliseconds that existing members will wait after a member crashes before restoring this region's redundancy on the remaining members. The default value (-1) indicates that redundancy will not be recovered after a failure.</td>
<td> </td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-redundant-copies </span></td>
<td>Number of extra copies of buckets desired. Extra copies allow for both high availability in the face of VM departure (intended or unintended) and load balancing read operations. (Allowed values: 0, 1, 2 and 3)</td>
<td> </td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-startup-recovery-delay </span></td>
<td>Delay in milliseconds that new members will wait before assuming their share of cluster-level redundancy. This allows time for multiple regions to start before the redundancy workload is parceled out to the new members. A value of -1 indicates that adding new members will not trigger redundancy recovery.</td>
<td>The default is to recover redundancy immediately when a new member is added.</td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-total-max-memory </span></td>
<td>Maximum amount of memory, in megabytes, to be used by the region in all processes.</td>
<td> </td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-total-num-buckets </span></td>
<td>Total number of hash buckets to be used by the region in all processes.</td>
<td>113</td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-compressor</span></td>
<td>Java class name that implements compression for the region. You can write a custom compressor that implements <code class="ph codeph">org.apache.geode.compression.Compressor</code> or you can specify the Snappy compressor (<code class="ph codeph">org.apache.geode.compression.SnappyCompressor</code>), which is bundled with <%=vars.product_name%>. See <a href="../../../managing/region_compression.html">Region Compression</a>.</td>
<td>no compression</td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-off-heap</span></td>
<td>Specifies whether the region values are stored 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>
<td>false</td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-partition-resolver</span></td>
<td>Specifies the full path to a custom partition resolver. Specify <code class="ph codeph">org.apache.geode.cache.util.StringPrefixPartitionResolver</code> to use the included string prefix partition resolver.</td>
<td></td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-eviction-entry-count</span></td>
<td>Enables eviction, where the eviction policy is based on the number of entries in the region.</td>
<td></td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-eviction-max-memory</span></td>
<td>Enables eviction, where the eviction policy is based on the amount of memory consumed by the region, specified in megabytes.</td>
<td></td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-eviction-action</span></td>
<td>Action to take when the eviction threshold is reached.
<div class="p">
<table>
<tbody>
<tr>
<td>local-destroy</td>
<td>Entry is destroyed locally. Use with caution - may lead to inconsistencies.</td>
</tr>
<tr>
<td>overflow-to-disk</td>
<td>Entry is overflowed to disk. For partitioned regions, this provides the most reliable read behavior across the region.</td>
</tr>
</tbody>
</table>
</div>
</td>
<td></td>
</tr>
<tr>
<td><span class="keyword parmname">\-\-eviction-object-sizer</span></td>
<td>Specifies your implementation of the ObjectSizer interface to measure the size of objects in the region.
The sizer applies only to heap and memory based eviction.</td>
<td></td>
</tr>
</tbody>
</table>

**Example Commands:**

``` pre
create region --name=region1 --type=REPLICATE_PERSISTENT \
--cache-writer=org.apache.geode.examples.MyCacheWriter \
--group=Group1 --disk-store=DiskStore1

create region --name=region12 --template-region=/region1

create region --name=region2 --type=REPLICATE \
--cache-listener=org.apache.geode.examples.MyCacheListener1,\
org.apache.geode.examples.MyCacheListener2 \
--group=Group1,Group2

create region --name=region3 --type=PARTITION_PERSISTENT --redundant-copies=2 \
--total-max-memory=1000 --startup-recovery-delay=5 --total-num-buckets=100 \
--disk-store=DiskStore2 --cache-listener=org.apache.geode.examples.MyCacheListener3 \
--group=Group2 

create region --name=region4 --type=REPLICATE_PROXY \
--cache-listener=org.apache.geode.examples.MyCacheListener1 --group=Group1,Group2

create region --name=myRegion --type=REPLICATE --eviction-max-memory=100 \
--eviction-action=overflow-to-disk --eviction-object-sizer=my.company.geode.MySizer

create region --name=r1 --type=PARTITION \
--cache-loader=org.example.myLoader{'URL':'jdbc:cloudscape:rmi:MyData'}
```

**Sample Output:**

``` pre
gfsh>create region --name=myRegion --type=LOCAL
Member  | Status
------- | ---------------------------------------
server1 | Region "/myRegion" created on "server1"
```


