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

# Required. Comma-separated list of servers to connect to in format "host:port".
ignite.client.servers=localhost:11211

# Optional. Default client load balancer. Default value is "".
# Balancer may be "random", "roundrobin" or full class name for "your.balancer.ImplementationClass"
#ignite.client.balancer=

# Optional. Socket connect timeout (ms). Default value is "0".
#ignite.client.connectTimeout=10000

# Optional. Credentials if grid requires authentication. Default value is "".
#ignite.client.credentials=

# Optional. Flag indicating whether topology cache is enabled. Default value is "false".
#ignite.client.cacheTop=false

# Optional. Max time of connection idleness (ms). Default value is "30000".
#ignite.client.idleTimeout=30000

# Optional. Client protocol, one of TCP or HTTP. Default value is "TCP".
#ignite.client.protocol=TCP

# Optional. TCP_NODELAY communication flag. Default value is "true".
#ignite.client.tcp.noDelay=true

# Optional. Topology refresh frequency (ms). Default value is "2000".
#ignite.client.topology.refresh=2000

#
# Data configurations.
#

# Optional. List of comma-separated names of data configurations. Default value is "".
#ignite.client.data.configurations=cfg1, cfg2

# Optional. Cache name (space) to work with (for configuration 'cfg1').
#ignite.client.data.cfg1.name=

# Optional. Specific load balancer for configuration 'cfg1'. Default value is "".
# Balancer may be "random", "roundrobin" or full class name for "your.balancer.ImplementationClass"
#ignite.client.data.cfg1.balancer=random

# Optional. Specific affinity for configuration 'cfg1'. Default value is "".
# Affinity may be "" (no affinity), "partitioned" or full class name for "your.affinity.ImplementationClass"
#ignite.client.data.cfg1.affinity=

# Optional. Cache name (space) to work with (for configuration 'cfg2').
#ignite.client.data.cfg2.name=partitioned

# Optional. Specific load balancer for configuration 'cfg2'. Default value is "".
# Balancer may be "random", "roundrobin" or full class name for "your.balancer.ImplementationClass"
#ignite.client.data.cfg2.balancer=roundrobin

# Optional. Specific affinity for configuration 'cfg2'. Default value is "".
# Affinity may be "" (no affinity), "partitioned" or full class name for "your.affinity.ImplementationClass"
#ignite.client.data.cfg2.affinity=partitioned

#
# SSL configuration.
#

# Optional. SSL enabled. Default value is "false".
#ignite.client.ssl.enabled=false

# Optional. SSL protocol. Default value is "TLS".
#ignite.client.ssl.protocol=TLS

# Optional. Key manager algorithm. Default value is "SunX509".
#ignite.client.ssl.key.algorithm=SunX509

# Optional. Keystore to be used by client to connect with Ignite topology over SSL. Default value is "".
#ignite.client.ssl.keystore.location=

# Optional. Default value is "".
#ignite.client.ssl.keystore.password=

# Optional. Default value is "jks".
#ignite.client.ssl.keystore.type=jks

# Optional. Truststore to be used by client to connect with Ignite topology over SSL. Default value is "".
#ignite.client.ssl.truststore.location=

# Optional. Default value is "".
#ignite.client.ssl.truststore.password=

# Optional. Default value is "jks".
#ignite.client.ssl.truststore.type=jks
