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

############################
# Fluo Connection properties
############################

# NOTE - All properties that have a default are set with it.  Uncomment
# a property if you want to use a value different than the default.
# Properties that have no default are uncommented and must be set by
# the user.

## Zookeeper connection string specifying host and chroot where Fluo stores data.
## A chroot directory suffix must be specified but doesn't need to be named
## '/fluo'.  If not specified, a Fluo application cannot be initialized.
fluo.connection.zookeepers={{ zookeeper_connect }}/fluo
## Zookeeper timeout
#fluo.connection.zookeeper.timeout=30000
## Connection retry timeout (in milliseconds). Set to -1 to retry forever.
#fluo.connection.retry.timeout.ms=-1
## Set this property before initialization and Fluo will lock down all zookeeper
## using this secret.  After initialization, the same secret must always be
## supplied for any connection or services.  If not set, then all data in
## zookeeper will be world readable.  It's a good idea to set this property.
## Could use the command : head -c 9 /dev/random | base64
#fluo.connection.zookeeper.secret=
