blob: 3ed0f59eb72fc1470e52514841c42d7309f56add [file] [log] [blame]
#!/usr/bin/env bash
## ==================================================================
## Required: regression database generated from src/test/regress
##
## Test binary swap from current Cloudberry install to another
## Cloudberry install. The flow goes like this:
## 1. Run pg_dumpall on current database
## 2. Start binaries provided by -b (required)
## 3. Run pg_dumpall on other binary and diff dumps
## 4. Run some inserts and do another pg_dumpall
## 5. Start binaries provided by -c (default current $GPHOME).
## 6. Run pg_dumpall on current binary and diff dumps
## 7. Run some more inserts and run another pg_dumpall
##
## Providing the binaries can be interchangeable between -b and -c
## but technically shouldn't matter. However, the binary provided in
## -c will be the active binary at the end of the run.
## ==================================================================
## Clean previous generated test output
clean_output()
{
rm -rf results
rm -f dump_current.sql dump_other.sql
}
## Run tests via pg_regress with given schedule name
run_tests()
{
SCHEDULE_NAME=$1
../regress/pg_regress --dbname=binswap_connect --init-file=../regress/init_file --schedule=${SCHEDULE_NAME}
if [ $? != 0 ]; then
exit 1
fi
}
## Start up a Cloudberry binary using same $MASTER_DATA_DIRECTORY
start_binary()
{
BINARY_PATH=$1
gpstop -ai
source $BINARY_PATH/greenplum_path.sh
gpstart -a
echo "Select our Cloudberry version just to be sure..."
psql -c "select version()" postgres
}
usage()
{
appname=`basename $0`
echo "$appname usage:"
echo " -b <dir> Cloudberry install path for another binary to test upgrade/downgrade from (Required User Input)"
echo " -c <dir> Cloudberry install path for current binary to test upgrade/downgrade to (Default: \$GPHOME)"
echo " -m <dir> Cloudberry Master Data Directory (Default: \$MASTER_DATA_DIRECTORY)"
echo " -p <port> Cloudberry Master Port (Default: \$PGPORT)"
echo " -v <variant> Variant of the test plan (Default: '')"
exit 0
}
while getopts ":c:b:m:p:v:" opt; do
case ${opt} in
c)
GPHOME_CURRENT=$OPTARG
;;
b)
GPHOME_OTHER=$OPTARG
;;
m)
MDD_CURRENT=$OPTARG
;;
p)
PGPORT_CURRENT=$OPTARG
;;
v)
VARIANT=$OPTARG
;;
*)
usage
;;
esac
done
## Main script
## ==================================================
## Argument checking
GPHOME_CURRENT=${GPHOME_CURRENT:=$GPHOME}
MDD_CURRENT=${MDD_CURRENT:=$MASTER_DATA_DIRECTORY}
PGPORT_CURRENT=${PGPORT_CURRENT:=$PGPORT}
if [ "${GPHOME_OTHER}x" == "x" ] || ! [ -f $GPHOME_OTHER/greenplum_path.sh ]; then
echo "Use -b to provide a valid Cloudberry install path to upgrade/downgrade from"
exit 1
fi
if [ "${GPHOME_CURRENT}x" == "x" ] || ! [ -f $GPHOME_CURRENT/greenplum_path.sh ]; then
echo "Use -c to provide a valid Cloudberry install path to upgrade/downgrade to (Default: \$GPHOME)"
exit 1
fi
if [ "${MDD_CURRENT}x" == "x" ]; then
echo "Use -m to provide a valid Cloudberry Master Data Directory (Default: \$MASTER_DATA_DIRECTORY)"
exit 1
fi
if [ "${PGPORT_CURRENT}x" == "x" ]; then
echo "Use -p to provide a valid Cloudberry Master Port (Default: \$PGPORT)"
exit 1
fi
if ! [ -e schedule1${VARIANT} -a \
-e schedule2${VARIANT} -a \
-e schedule3${VARIANT} ]; then
echo "Use -v to provide a valid variant of the test plan (Default: '')"
exit 1
fi
## Grab the Cloudberry versions of each binary for display
CURRENT_VERSION=`$GPHOME_CURRENT/bin/gpstart --version | awk '{ for (i=3; i<NF; i++) printf $i " "; print $NF }'`
OTHER_VERSION=`$GPHOME_OTHER/bin/gpstart --version | awk '{ for (i=3; i<NF; i++) printf $i " "; print $NF }'`
echo "Binary Swap tests"
echo "=================================================="
echo "Current binaries: ${CURRENT_VERSION}"
echo " ${GPHOME_CURRENT}"
echo " Other binaries: ${OTHER_VERSION}"
echo " ${GPHOME_OTHER}"
echo " Variant: ${VARIANT}"
echo "=================================================="
## Clean our directory of any previous test output
clean_output
## Start/restart current Cloudberry and do initial dump to compare against
start_binary $GPHOME_CURRENT
run_tests schedule1${VARIANT}
## Change the binary, dump, and then compare the two dumps generated
## by both binaries. Then we do some inserts and dump again. We source
## $GPHOME_CURRENT/greenplum_path.sh here after starting Cloudberry
## with $GPHOME_OTHER to use latest pg_dumpall to prevent catching
## diffs due to changes made to pg_dump. The running binaries are
## still from $GPHOME_OTHER. Only pg_regress, pg_dumpall, psql, and
## gpcheckcat should be from $GPHOME_CURRENT during the pg_regress
## test.
start_binary $GPHOME_OTHER
source $GPHOME_CURRENT/greenplum_path.sh
run_tests schedule2${VARIANT}
## Change the binary back, dump, and then compare the two new dumps
## generated by both binaries. Then we do some inserts and check to see
## if dump still works fine.
start_binary $GPHOME_CURRENT
run_tests schedule3${VARIANT}
## Print unnecessary success output
echo "SUCCESS! Provided binaries are swappable."