#!/usr/bin/env bash
# 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.

ZOOSCRIPTS="${BASH_SOURCE-$0}"
ZOOSCRIPTS="$(dirname "${ZOOSCRIPTS}")"
ZOOSCRIPTS="$(cd "${ZOOSCRIPTS}"; pwd)"

ZKHOME="$(dirname "${ZOOSCRIPTS}")"
ZKCONFIG_FILE=$ZKHOME/conf/zookeeper.conf
ZKBIN=$ZKHOME/bin

# generate the zookeeper config based
$ZOOSCRIPTS/generate-zookeeper-config.sh $ZKCONFIG_FILE

export SERVER_JVMFLAGS="-Dnetworkaddress.cache.ttl=60"
# start zookeeper in the foreground with the generated config file
$ZKBIN/zkServer.sh start-foreground $ZKCONFIG_FILE
