blob: 1617442d179372ded18c224b0609e56df52c62f4 [file] [log] [blame]
#!/usr/bin/env bash
#
#/**
# * Copyright 2007 The Apache Software Foundation
# *
# * 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.
# */
source ${SCRIPTS_DIR}/common.sh
function wait_for_zookeeper() {
echo "wait for zookeeper"
until zk-shell --run-once "ls /" ${BK_zkServers}; do sleep 5; done
}
function create_zk_root() {
if [ "x${BK_CLUSTER_ROOT_PATH}" != "x" ]; then
echo "create the zk root dir for bookkeeper at '${BK_CLUSTER_ROOT_PATH}'"
zk-shell --run-once "create ${BK_CLUSTER_ROOT_PATH} '' false false true" ${BK_zkServers}
fi
}
function init_cluster() {
zk-shell --run-once "ls ${BK_zkLedgersRootPath}/available/readonly" ${BK_zkServers}
if [ $? -eq 0 ]; then
echo "Cluster metadata already exists"
else
# Create an ephemeral zk node `bkInitLock` for use as a lock.
lock=`zk-shell --run-once "create ${BK_CLUSTER_ROOT_PATH}/bkInitLock '' true false false" ${BK_zkServers}`
if [ -z "$lock" ]; then
echo "znodes do not exist in Zookeeper for Bookkeeper. Initializing a new Bookkeekeper cluster in Zookeeper."
/opt/bookkeeper/bin/bookkeeper shell initnewcluster
if [ $? -eq 0 ]; then
echo "initnewcluster operation succeeded"
else
echo "initnewcluster operation failed. Please check the reason."
echo "Exit status of initnewcluster"
echo $?
exit
fi
else
echo "Others may be initializing the cluster at the same time."
tenSeconds=1
while [ ${tenSeconds} -lt 100 ]
do
sleep 10
zk-shell --run-once "ls ${BK_zkLedgersRootPath}/available/readonly" ${BK_zkServers}
if [ $? -eq 0 ]; then
echo "Waited $tenSeconds * 10 seconds. Successfully listed ''${BK_zkLedgersRootPath}/available/readonly'"
break
else
echo "Waited $tenSeconds * 10 seconds. Continue waiting."
(( tenSeconds++ ))
continue
fi
done
if [ ${tenSeconds} -eq 100 ]; then
echo "Waited 100 seconds for bookkeeper cluster to initialize, but to no avail. Something is wrong, please check."
exit
fi
fi
fi
}
function init_bookie() {
# create dirs if they don't exist
create_bookie_dirs
# wait zookeeper to run
wait_for_zookeeper
# create zookeeper root
create_zk_root
# init the cluster
init_cluster
}