---
title:  Pool Configuration Example and Settings
---

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

Connection pools require a standard client/server distributed system and cache configuration settings. You must also configure settings for the locator, server, and pool elements.

-   Locator. Host and port where a server locator is listening.
-   Server. Host and port where a server is listening.
-   Pool. Client/server connection pool.

This page shows examples of creating a pool configuration programmatically using C++ code, and declaratively using XML.

## Programmatic Pool Configuration

This example shows a programmatic pool configuration. For a list of the attributes you can configure, see `PoolFactory` in the API docs.

```cpp
cache.getPoolManager()
      .createFactory()
      .addLocator("localhost", 34756)
      .setFreeConnectionTimeout(std::chrono::milliseconds(12345))
      .setIdleTimeout(std::chrono::milliseconds(5555))
      .setLoadConditioningInterval(std::chrono::milliseconds(23456))
      .setMaxConnections(7)
      .setMinConnections(3)
      .setPingInterval(std::chrono::milliseconds(12345))
      .setReadTimeout(std::chrono::milliseconds(23456))
      .setRetryAttempts(3)
      .setServerGroup("ServerGroup1")
      .setSocketBufferSize(32768)
      .setStatisticInterval(std::chrono::milliseconds(10123))
      .setSubscriptionAckInterval(std::chrono::milliseconds(567))
      .setSubscriptionEnabled(true)
      .setSubscriptionMessageTrackingTimeout(std::chrono::milliseconds(900123))
      .setSubscriptionRedundancy(0)
      .setThreadLocalConnections(true)
      .create("test_pool_1");
```


## Declarative (File-based) Pool Configuration

This example shows a file-based pool configuration using an XML configuration file. Following the example is a table that describes the XML pool attributes you can configure.

**Note:**
You create an instance of `PoolFactory` through `PoolManager`.

``` pre
<pool free-connection-timeout="12345" idle-timeout="5555"
      load-conditioning-interval="23456"
      max-connections="7" min-connections="3"
      name="test_pool_1" ping-interval="12345"
      read-timeout="23456" retry-attempts="3" server-group="ServerGroup1"
      socket-buffer-size="32768" statistic-interval="10123"
      subscription-ack-interval="567" subscription-enabled="true"
      subscription-message-tracking-timeout="900123"
      subscription-redundancy="0" thread-local-connections="true">
   <locator host="localhost" port="34756"/>
</pool>
```

## <a id="configuring-pools__section_E7AA69F3BB6C4FEA8094E2BC5278A349" class="no-quick-link"></a>Pool Attributes

<table>
<colgroup>
<col width="25%" />
<col width="50%" />
<col width="25%" />
</colgroup>
<thead>
<tr class="header">
<th>Attribute Name</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><code class="ph codeph">free-connection-timeout</code></td>
<td><p>Number of milliseconds (ms) that the client waits for a free connection if <code class="ph codeph"> max-connections</code> limit is configured and all connections are in use.</p></td>
<td><p>10000 ms</p></td>
</tr>
<tr class="even">
<td><p><code class="ph codeph">idle-timeout</code></p></td>
<td><p>Number of milliseconds to wait for a connection to become idle for load balancing</p></td>
<td><p>5000 ms</p></td>
</tr>
<tr class="odd">
<td><code class="ph codeph">load-conditioning-interval</code></td>
<td><p>Interval in which the pool checks to see if a connection to a specific server should be moved to a different server to improve the load balance.</p></td>
<td><p>300000 ms (5 minutes)</p></td>
</tr>
<tr class="even">
<td><code class="ph codeph">max-connections</code></td>
<td><p>Maximum number of connections that the pool can create. If all connections are in use, an operation requiring a client-to server-connection is blocked until a connection is available or the <code class="ph codeph"> free-connection-timeout</code> is reached. If set to -1, there is no maximum. The setting must indicate a cap greater than <code class="ph codeph"> min-connections</code>.</p>
<div class="note note">
<b>Note:</b>
<p>If you use this setting to cap your pool connections, disable the pool attribute <code class="ph codeph"> pr-single-hop-enabled</code>. Leaving single hop enabled can increase thrashing and lower performance.</p>
</div></td>
<td><p>-1</p></td>
</tr>
<tr class="odd">
<td><p><code class="ph codeph">min-connections</code></p></td>
<td><p>Number of connections that must be created initially.</p></td>
<td><p>5</p></td>
</tr>
<tr class="even">
<td><p><code class="ph codeph">name</code></p></td>
<td><p>Pool name.</p></td>
<td><p></p></td>
</tr>
<tr class="odd">
<td><p><code class="ph codeph">ping-interval</code></p></td>
<td><p>Interval between pinging the server to show the client is alive, set in milliseconds. Pings are only sent when the <code class="ph codeph">ping-interval</code> elapses between normal client messages. This must be set lower than the server’s <code class="ph codeph">maximum-time-between-pings</code>.</p></td>
<td><p>10000 ms</p></td>
</tr>
<tr class="even">
<td><p><code class="ph codeph">pr-single-hop-enabled</code></p></td>
<td><p>Setting used for single-hop access to partitioned region data in the servers for some data operations. See <a href="../client-cache-ref.html#partition-resolver-ref">PartitionResolver</a>. See note in <code class="ph codeph">thread-local-connections</code> below.</p></td>
<td><p>True</p></td>
</tr>
<tr class="odd">
<td><p><code class="ph codeph">read-timeout</code></p></td>
<td><p>Number of milliseconds to wait for a response from a server before the connection times out.</p></td>
<td><p>10000</p></td>
</tr>
<tr class="even">
<td><p><code class="ph codeph">retry-attempts</code></p></td>
<td><p>Number of times to retry an operation after a time-out or exception for high availability. If set to -1, the pool tries every available server once until it succeeds or has tried all servers.</p></td>
<td><p>-1</p></td>
</tr>
<tr class="odd">
<td><p><code class="ph codeph">server-group</code></p></td>
<td><p>Server group from which to select connections. If not specified, the global group of all connected servers is used.</p></td>
<td><p>empty</p></td>
</tr>
<tr class="even">
<td><p><code class="ph codeph">socket-buffer-size</code></p></td>
<td><p>Size of the socket buffer, in bytes, on each connection established.</p></td>
<td><p>32768</p></td>
</tr>
<tr class="odd">
<td><p><code class="ph codeph">statistic-interval</code></p></td>
<td><p>Default frequency, in milliseconds, with which the client statistics are sent to the server. A value of <code class="ph codeph">-1</code> indicates that the statistics are not sent to the server.</p></td>
<td><p>-1</p></td>
</tr>
<tr class="even">
<td><p><code class="ph codeph">subscription-ack-interval</code></p></td>
<td><p>Number of milliseconds to wait before sending an acknowledgment to the server about events received from the subscriptions.</p></td>
<td><p>100</p></td>
</tr>
<tr class="odd">
<td><p><code class="ph codeph">subscription-enabled</code></p></td>
<td><p>Whether to establish a server to client subscription.</p></td>
<td><p>False</p></td>
</tr>
<tr class="even">
<td><p><code class="ph codeph">subscription-message-tracking-timeout</code></p></td>
<td><p>Number of milliseconds for which messages sent from a server to a client are tracked. The tracking is done to minimize duplicate events.</p></td>
<td><p>90000</p></td>
</tr>
<tr class="odd">
<td><p><code class="ph codeph">subscription-redundancy</code></p></td>
<td><p>Redundancy for servers that contain subscriptions established by the client. A value of <code class="ph codeph">-1</code> causes all available servers in the specified group to be made redundant.</p></td>
<td><p>0</p></td>
</tr>
<tr class="even">
<td><p><code class="ph codeph">thread-local-connections</code></p></td>
<td><p>Whether the connections must have affinity to the thread that last used them.</p>
<div class="note note">
<b>Note:</b>
<p>To set this to <code class="ph codeph">true</code>, also set <code class="ph codeph">pr-single-hop-enabled</code> to <code class="ph codeph">false</code>. A <code class="ph codeph">true</code> value in <code class="ph codeph">pr-single-hop-enabled</code> automatically assigns a <code class="ph codeph">false</code> value to <code class="ph codeph">thread-local-connections</code>...</p>
</div></td>
<td><p>False</p></td>
</tr>
<tr class="odd">
<td><code class="ph codeph">update-locator-list-interval</code></td>
<td>An integer number of milliseconds defining the interval between locator list updates. If the value is less than or equal to 0, the update will be disabled.</td>
<td>5000</td>
</tr>
</tbody>
</table>


