添加清理级联备复制槽用例

This commit is contained in:
xue_meng_en
2024-06-12 16:01:05 +08:00
committed by yaoxin
parent 4a7be5319f
commit f8e60d72f7
2 changed files with 86 additions and 37 deletions

View File

@ -104,11 +104,18 @@ function query_standby2()
function query_standby3()
{
echo query standby2
echo query standby3
gs_ctl query -D $data_dir/datanode3_standby
}
function query_standby4()
{
echo query standby4
gs_ctl query -D $standby4_data_dir
}
function check_primary_startup()
{
echo checking primary startup

View File

@ -1,52 +1,94 @@
# This use case is used to test whether the primary can properly clean up the replication slots corresponding to the cascade standby.
#!/bin/sh
source ./util.sh
function check_select_result()
standby_mounted_cascade_datadir=""
standby_mounted_cascade_port=""
ports=($dn1_primary_port $standby1_port $standby2_port $standby3_port $standby4_port)
datadirs=($primary_data_dir $standby1_data_dir $standby2_data_dir $standby3_data_dir $standby4_data_dir)
function query_standby_mounted_cascade()
{
if [ $(echo $result | grep "${1}" | wc -l) -eq 1 ]; then
echo "remote read successful"
standby_mounted_cascade_datadir=""
standby_mounted_cascade_port=""
for (( i=0; i<5; i++ )); do
local result=`gsql -tA -d $db -p ${ports[i]} -c "select count(*) from pg_get_replication_slots() where slot_name='dn_s4' and active='t';"`
if [[ X"${result}" = X"1" ]]; then
standby_mounted_cascade_datadir=${datadirs[i]}
standby_mounted_cascade_port=${ports[i]}
break
fi
done
}
function check_clean_cascade_slot_result()
{
local port=$1
local result=`gsql -tA -d $db -p $port -c "select count(*) from pg_get_replication_slots() where slot_name='dn_s4' and active='f';"`
if [[ "${result}" = "0" ]]; then
echo "primary cleaned cascade slot successfully."
else
echo "remote read failed $failed_keyword with [$result]"
echo "cascade slot still exists in primary! "
echo "clean cascade slot test failed $failed_keyword with [$result]."
echo "cascade slot info:"
gsql -d $db -p $port -c "select * from pg_get_replication_slots() where slot_name='dn_s4' and active='f';"
exit 1
fi
}
function check_select_no_result()
{
if [ $(echo $result | grep "${1}" | wc -l) -eq 0 ]; then
echo "remote read successful"
else
echo "remote read failed $failed_keyword with [$result]"
exit 1
fi
}
function test_cascade_standby_clean_slot_func()
{
set_default
# The initial state of the cluster is 1 primary and 4 standbies.
# start standby4 as cascade
echo "base"
result=`gsql -d $db -p $dn1_primary_port -c "select * from pg_get_replication_slots();"`
check_select_result "dn_s2"
kill_cascade_cluster
start_cascade_cluster
result=`gsql -d $db -p $dn1_primary_port -c "select * from pg_get_replication_slots();"`
check_select_no_result "dn_s2"
switchover_to_cascade_standby
result=`gsql -d $db -p $dn1_primary_port -c "select * from pg_get_replication_slots();"`
check_select_no_result "dn_s1"
gs_ctl build -D $standby4_data_dir -M cascade_standby
sleep 1
query_primary
query_multi_standby
# case 1
check_clean_cascade_slot_result $dn1_primary_port
echo "case 1 passed"
# case 2 https://gitee.com/opengaussorg/dashboard?issue_id=I9JWCD
query_standby_mounted_cascade
gs_ctl switchover -D $standby_mounted_cascade_datadir
sleep 3
check_clean_cascade_slot_result $standby_mounted_cascade_port
sleep 1
gs_ctl switchover -D $primary_data_dir
sleep 3
check_clean_cascade_slot_result $dn1_primary_port
echo "case 2 passed"
# case 3 https://gitee.com/opengaussorg/dashboard?issue_id=I9VA9H&from=project-issue
query_primary
query_multi_standby
query_standby_mounted_cascade
gs_ctl stop -D $standby_mounted_cascade_datadir
sleep 1
query_standby4
gs_ctl start -D $standby_mounted_cascade_datadir -M standby
sleep 3
local result=`gsql -tA -d $db -p $standby_mounted_cascade_port -c "select count(*) from pg_get_replication_slots() where slot_name='dn_s4' and active='f';"`
if [[ "$result" != "1" ]]; then
echo "$failed_keyword with [$result]"
exit 1
fi
gs_ctl switchover -D $standby_mounted_cascade_datadir
sleep 3
check_clean_cascade_slot_result $standby_mounted_cascade_port
echo "case 3 passed"
}
function tear_down() {
set_cascade_default
set_default
}
test_cascade_standby_clean_slot_func
tear_down