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

# The number of milliseconds of each tick
tickTime=2000

# The number of ticks that the initial 
# synchronization phase can take
initLimit=10

# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
syncLimit=30

# the directory where the snapshot is stored.
dataDir=data/zookeeper

# where txlog  are written
dataLogDir=data/zookeeper/txlog

# the port at which the clients will connect
clientPort=2181

# limit on queued clients - default: 1000
globalOutstandingLimit=1000

# number of transactions before snapshots are taken - default: 100000
snapCount=100000

# the maximum number of client connections.
# increase this if you need to handle more clients
#
# - 0==unlimited
maxClientCnxns=100

# Election implementation to use. A value of "0" corresponds to the original
# UDP-based version, "1" corresponds to the non-authenticated UDP-based
# version of fast leader election, "2" corresponds to the authenticated
# UDP-based version of fast leader election, and "3" corresponds to TCP-based
# version of fast leader election. Currently, only 0 and 3 are supported,
# 3 being the default
electionAlg=3

# Leader accepts client connections. Default value is "yes". The leader
# machine coordinates updates. For higher update throughput at thes slight
# expense of read throughput the leader can be configured to not accept
# clients and focus on coordination.
leaderServes=yes

# Skips ACL checks. This results in a boost in throughput, but opens up full
# access to the data tree to everyone.
skipACL=no

# Be sure to read the maintenance section of the 
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
autopurge.snapRetainCount=3

# Purge txn logs every hour. Before 3.4.x this was done with an external cron
# job, now we can do it internally.
#
# Set to "0" to disable auto purge feature
autopurge.purgeInterval=1

# Prior to version 3.4 ZooKeeper has always used NIO directly, however in
# versions 3.4 and later Netty is supported as an option to NIO (replaces).
# serverCnxnFactory=org.apache.zookeeper.server.NIOServerCnxnFactory

# zookeeper cluster

standaloneEnabled=true
# ZooKeeper Dynamic Reconfiguration
# See: https://zookeeper.apache.org/doc/trunk/zookeeperReconfig.html
#
# standaloneEnabled=false
# dynamicConfigFile=/path/to/zoo.cfg.dynamic
#
dynamicConfigFile=conf/zookeeper.conf.dynamic
