#!/bin/bash # Assemble the GreptimeDB binary download URL for a specific version. binary_url() { local ver="$1" local bin_tar="greptime-$(uname -s | tr '[:upper:]' '[:lower:]')-amd64-v$ver.tar.gz" echo "https://github.com/GreptimeTeam/greptimedb/releases/download/v$ver/$bin_tar" } # Download a specific version of GreptimeDB binary tar file, untar it to folder `./bins/$ver`. # `ver` is semver without prefix `v` download_binary() { local ver="$1" local url="$(binary_url $ver)" local bin_tar="greptime-$(uname -s | tr '[:upper:]' '[:lower:]')-amd64-v$ver.tar.gz" if [ -f ./bins/$ver/greptime ]; then echo " === binaries exist: $(ls ./bins/$ver/* | tr '\n' ' ')" chmod +x ./bins/$ver/* return fi if [ -f "$bin_tar" ]; then echo " === tar file exists: $bin_tar" else echo " === Download binary ver: $ver" echo " === Download binary url: $url" curl --connect-timeout 5 --retry 5 --retry-delay 1 -L "$url" -o "$bin_tar" fi mkdir -p ./bins/$ver tar -xf "$bin_tar" --strip-components=1 -C ./bins/$ver echo " === unpacked: ./bins/$ver:" ls -lh ./bins/$ver chmod +x ./bins/$ver/* } # Test data compatibility that: # - the data written by an old version of GreptimeDB can be read by the current one # - the data written by the current version of GreptimeDB can be read by an old one ("forward" compatibility) run_test() { local old_ver="$1" local forward="$2" local write_case_dir="./tests/compat/case/write" local read_case_dir="./tests/compat/case/read" local bin_old="./bins/$old_ver/greptime" local bin_new="./bins/current/greptime" local runner="./bins/current/sqlness-runner" echo " === Test with:" echo " === old greptimedb version:" "$bin_old" --version echo " === new greptimedb version:" "$bin_new" --version # "forward" means we are testing forward compatibility: # the data generated by current version GreptimeDB can be used by old. # So we run new GreptimeDB binary first to write, then run old to read. # And the opposite for backward compatibility. if [ "$forward" == "forward" ] then echo " === Running forward compat test ..." echo " === Run test: write with current GreptimeDB" $runner bare --bins-dir $(dirname $bin_new) --case-dir $write_case_dir else echo " === Running backward compat test ..." echo " === Run test: write with old GreptimeDB" $runner bare --bins-dir $(dirname $bin_old) --case-dir $write_case_dir fi if [ "$forward" == 'forward' ] then echo " === Run test: read with old GreptimeDB" $runner bare --bins-dir $(dirname $bin_old) --case-dir $read_case_dir else echo " === Run test: read with current GreptimeDB" $runner bare --bins-dir $(dirname $bin_new) --case-dir $read_case_dir fi }