#!/bin/sh

set -eu

source ./utils.sh
source ./common_tests/tikv_config_list.sh

TIKV_ADDR="127.0.0.1:20270"
TIKV_STATUS_ADDR="127.0.0.1:20271"
TIKV_DIR="${TEST_DIR}/${TEST_NAME}/tikv"
PD_DIR="${TEST_DIR}/${TEST_NAME}/pd"

start_pd "$PD_CONFIG" "$PD_DIR"
PD_SERVER_PID=$!

start_tikv "$TIKV_ADDR" "$TIKV_STATUS_ADDR" "$PD_ADDR" "$TIKV_DIR" "$TIKV_CONFIG"
TIKV_SERVER_PID=$!

LEN=${#TIKV_DYNAMIC_CONFIG[*]}
update_cfg() {
    echo "update config"
    i=0
    until [ ! $i -lt $LEN ]; do
        echo "--pd $PD_ADDR component set $TIKV_ADDR ${TIKV_DYNAMIC_CONFIG[$i]} ${TIKV_CONFIG_VALUE[$i]}" | ${PD_CTL_BIN}
        i=$(expr $i + 1)
        sleep 0.05
    done
}

update_cfg &
UPDATE_CFG=$!

echo "restart"
kill -1 ${TIKV_SERVER_PID}
sleep 2
start_tikv "$TIKV_ADDR" "$TIKV_STATUS_ADDR" "$PD_ADDR" "$TIKV_DIR" "$TIKV_CONFIG"
TIKV_SERVER_PID=$!

wait ${UPDATE_CFG}
sleep 0.5

i=0
until [ ! $i -lt $LEN ]; do
    MATCH=\(\?\<\=\"${TIKV_CONFIG_VALIDATE[$i]}\"\:\)\[\^\,\}\]\+
    CONF=$(curl $TIKV_STATUS_ADDR/config -s | grep -Po ''${MATCH}'' | sed 's/\"//g')
    echo ${TIKV_CONFIG_VALUE[$i]} $CONF
    if [ $CONF != ${TIKV_CONFIG_VALUE[$i]} ]; then
        echo "${TEST_NAME} failed!"
        echo "Config ${TIKV_DYNAMIC_CONFIG[$i]} did not update"
        print_log "$PD_LOG" "$TIKV_DIR"
        exit 1
    fi
    i=$(expr $i + 1)
done

kill -9 ${TIKV_SERVER_PID} || true
kill -9 ${PD_SERVER_PID} || true
