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

current_path=$(cd $(dirname $0);pwd)
start_what=$1

function on_stop(){
    echo "#### on_stop $start_what ####"
    if [[ "$start_what" != "confignode" ]]; then
        echo "###### manually flush ######";
        start-cli.sh -e "flush;" || true
        stop-datanode.sh
        echo "##### done ######";
    else
        stop-confignode.sh;
    fi
}

trap 'on_stop' SIGTERM SIGKILL SIGQUIT


replace-conf-from-env.sh

case "$1" in
   datanode)
       exec start-datanode.sh
       ;;
   confignode)
       exec start-confignode.sh
       ;;
   all)
       start-confignode.sh > /dev/null 2>&1 &
       sleep 5
       exec start-datanode.sh
       ;;
   *)
       echo "bad parameter!"
       exit -1
       ;;
esac
