#!/bin/sh

set -eu

source ./utils.sh

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

start_pd "$PD_CONFIG_ENABLE" "$PD_DIR"
PD_SERVER_PID=$!

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

echo "update config"
echo "--pd $PD_ADDR component set $TIKV_ADDR raftstore.raft-log-gc-threshold 150" | ${PD_CTL_BIN}
sleep 1

TIKV_CONF=$(curl $TIKV_STATUS_ADDR/config -s | grep -Po '(?<="raft-log-gc-threshold":)[^,]+')
if [ $TIKV_CONF -ne 150 ]; then
    echo "${TEST_NAME} failed!"
    echo "Config raftstore.raft-log-gc-threshold did not update"
    print_log "$PD_DIR" "$TIKV_DIR"
    exit 1
fi

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

echo "check config after disabling dynamic config"
start_pd "$PD_CONFIG_DISABLE" "$PD_DIR"
PD_SERVER_PID=$!

TIKV_CONFIG="./compatibility_tests/tikv_50.toml"
start_tikv "$TIKV_ADDR" "$TIKV_STATUS_ADDR" "$PD_ADDR" "$TIKV_DIR" "$TIKV_CONFIG"
TIKV_SERVER_PID=$!

TIKV_CONF=$(curl $TIKV_STATUS_ADDR/config -s | grep -Po '(?<="raft-log-gc-threshold":)[^,]+')
if [ $TIKV_CONF -ne 50 ]; then
    echo "${TEST_NAME} failed!"
    echo "Config raftstore.raft-log-gc-threshold in config file doesn't work"
    print_log "$PD_DIR" "$TIKV_DIR" "$TIDB_DIR"
    exit 1
fi

kill -1 ${TIKV_SERVER_PID} || true
sleep 2

echo "normal restart with config file change"
TIKV_CONFIG="./compatibility_tests/tikv_200.toml"
start_tikv "$TIKV_ADDR" "$TIKV_STATUS_ADDR" "$PD_ADDR" "$TIKV_DIR" "$TIKV_CONFIG"
TIKV_SERVER_PID=$!

TIKV_CONF=$(curl $TIKV_STATUS_ADDR/config -s | grep -Po '(?<="raft-log-gc-threshold":)[^,]+')
if [ $TIKV_CONF -ne 200 ]; then
    echo "${TEST_NAME} failed!"
    echo "Config raftstore.raft-log-gc-threshold in config file doesn't work"
    print_log "$PD_DIR" "$TIKV_DIR"
    exit 1
fi

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

echo "check config after enabling dynamic config"
start_pd "$PD_CONFIG_ENABLE" "$PD_DIR"
PD_SERVER_PID=$!

TIKV_CONFIG="./compatibility_tests/tikv_50.toml"
start_tikv "$TIKV_ADDR" "$TIKV_STATUS_ADDR" "$PD_ADDR" "$TIKV_DIR" "$TIKV_CONFIG"
TIKV_SERVER_PID=$!

TIKV_CONF=$(curl $TIKV_STATUS_ADDR/config -s | grep -Po '(?<="raft-log-gc-threshold":)[^,]+')
if [ $TIKV_CONF -ne 200 ]; then
    echo "${TEST_NAME} failed!"
    echo "Config raftstore.raft-log-gc-threshold in config file doesn't work"
    print_log "$PD_DIR" "$TIKV_DIR"
    exit 1
fi

kill -1 ${TIKV_SERVER_PID} || true
sleep 2

echo "normal restart with config file change"
TIKV_CONFIG="./compatibility_tests/tikv_100.toml"
start_tikv "$TIKV_ADDR" "$TIKV_STATUS_ADDR" "$PD_ADDR" "$TIKV_DIR" "$TIKV_CONFIG"
TIKV_SERVER_PID=$!

TIKV_CONF=$(curl $TIKV_STATUS_ADDR/config -s | grep -Po '(?<="raft-log-gc-threshold":)[^,]+')
if [ $TIKV_CONF -ne 200 ]; then
    echo "${TEST_NAME} failed!"
    echo "Config raftstore.raft-log-gc-threshold in config file doesn't work"
    print_log "$PD_DIR" "$TIKV_DIR"
    exit 1
fi

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