#!/bin/sh

set -eu

source ./utils.sh

TIKV_ADDR="127.0.0.1:20170"
TIKV_STATUS_ADDR="127.0.0.1:20171"
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=$!

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

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

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

RESTART_TIKV_CONF=$(curl $TIKV_STATUS_ADDR/config -s | grep -Po '(?<="raft-log-gc-threshold":)[^,]+')

if [ $TIKV_CONF -ne $RESTART_TIKV_CONF ]; then
    echo "${TEST_NAME} failed!"
    echo "Lost update on raftstore.raft-log-gc-threshold after normal restart"
    print_log "$PD_DIR" "$TIKV_DIR"
    exit 1
fi

echo "abnormal restart"
kill -9 ${TIKV_SERVER_PID} || true
sleep 2
start_tikv "$TIKV_ADDR" "$TIKV_STATUS_ADDR" "$PD_ADDR" "$TIKV_DIR" "$TIKV_CONFIG"
TIKV_SERVER_PID=$!

RESTART_TIKV_CONF2=$(curl $TIKV_STATUS_ADDR/config -s | grep -Po '(?<="raft-log-gc-threshold":)[^,]+')

if [ $TIKV_CONF -ne $RESTART_TIKV_CONF2 ]; then
    echo "${TEST_NAME} failed!"
    echo "Lost update on raftstore.raft-log-gc-threshold after abnormal restart"
    print_log "$PD_DIR" "$TIKV_DIR"
    exit 1
fi

echo "${TEST_NAME} passed!"

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