forked from Deuxfleurs/garage
add upgrade test for garage 0.8 -> 0.9
This commit is contained in:
parent
897cbf2c27
commit
9ac1d5be0e
5 changed files with 133 additions and 19 deletions
|
@ -42,6 +42,12 @@ steps:
|
||||||
- nix-build --no-build-output --attr clippy.amd64 --argstr git_version ${DRONE_TAG:-$DRONE_COMMIT}
|
- nix-build --no-build-output --attr clippy.amd64 --argstr git_version ${DRONE_TAG:-$DRONE_COMMIT}
|
||||||
- nix-shell --attr integration --run ./script/test-smoke.sh || (cat /tmp/garage.log; false)
|
- nix-shell --attr integration --run ./script/test-smoke.sh || (cat /tmp/garage.log; false)
|
||||||
|
|
||||||
|
- name: upgrade tests
|
||||||
|
image: nixpkgs/nix:nixos-22.05
|
||||||
|
commands:
|
||||||
|
- nix-build --no-build-output --attr clippy.amd64 --argstr git_version ${DRONE_TAG:-$DRONE_COMMIT}
|
||||||
|
- nix-shell --attr integration --run "./script/test-upgrade.sh v0.8.4 x86_64-unknown-linux-musl" || (cat /tmp/garage.log; false)
|
||||||
|
|
||||||
trigger:
|
trigger:
|
||||||
event:
|
event:
|
||||||
- custom
|
- custom
|
||||||
|
@ -285,6 +291,6 @@ trigger:
|
||||||
|
|
||||||
---
|
---
|
||||||
kind: signature
|
kind: signature
|
||||||
hmac: 24aebbcdba84fd0cdf963061d7bb72ae5b915bfdd0f50c7b019001126fb7fa56
|
hmac: dcf68ed6536e3fd9b359377e4c6c1d321fa9cc0f6fe5645d69c8f1d604569b4c
|
||||||
|
|
||||||
...
|
...
|
||||||
|
|
|
@ -9,11 +9,22 @@ GARAGE_RELEASE="${REPO_FOLDER}/target/release/"
|
||||||
NIX_RELEASE="${REPO_FOLDER}/result/bin/"
|
NIX_RELEASE="${REPO_FOLDER}/result/bin/"
|
||||||
PATH="${GARAGE_DEBUG}:${GARAGE_RELEASE}:${NIX_RELEASE}:$PATH"
|
PATH="${GARAGE_DEBUG}:${GARAGE_RELEASE}:${NIX_RELEASE}:$PATH"
|
||||||
|
|
||||||
garage -c /tmp/config.1.toml bucket create eprouvette
|
if [ -z "$GARAGE_BIN" ]; then
|
||||||
KEY_INFO=$(garage -c /tmp/config.1.toml key create opérateur)
|
GARAGE_BIN=$(which garage || exit 1)
|
||||||
|
echo -en "Found garage at: ${GARAGE_BIN}\n"
|
||||||
|
else
|
||||||
|
echo -en "Using garage binary at: ${GARAGE_BIN}\n"
|
||||||
|
fi
|
||||||
|
|
||||||
|
$GARAGE_BIN -c /tmp/config.1.toml bucket create eprouvette
|
||||||
|
if [ "$GARAGE_08" = "1" ]; then
|
||||||
|
KEY_INFO=$($GARAGE_BIN -c /tmp/config.1.toml key new --name opérateur)
|
||||||
|
else
|
||||||
|
KEY_INFO=$($GARAGE_BIN -c /tmp/config.1.toml key create opérateur)
|
||||||
|
fi
|
||||||
ACCESS_KEY=`echo $KEY_INFO|grep -Po 'GK[a-f0-9]+'`
|
ACCESS_KEY=`echo $KEY_INFO|grep -Po 'GK[a-f0-9]+'`
|
||||||
SECRET_KEY=`echo $KEY_INFO|grep -Po 'Secret key: [a-f0-9]+'|grep -Po '[a-f0-9]+$'`
|
SECRET_KEY=`echo $KEY_INFO|grep -Po 'Secret key: [a-f0-9]+'|grep -Po '[a-f0-9]+$'`
|
||||||
garage -c /tmp/config.1.toml bucket allow eprouvette --read --write --owner --key $ACCESS_KEY
|
$GARAGE_BIN -c /tmp/config.1.toml bucket allow eprouvette --read --write --owner --key $ACCESS_KEY
|
||||||
echo "$ACCESS_KEY $SECRET_KEY" > /tmp/garage.s3
|
echo "$ACCESS_KEY $SECRET_KEY" > /tmp/garage.s3
|
||||||
|
|
||||||
echo "Bucket s3://eprouvette created. Credentials stored in /tmp/garage.s3."
|
echo "Bucket s3://eprouvette created. Credentials stored in /tmp/garage.s3."
|
||||||
|
|
|
@ -14,8 +14,13 @@ export RUST_BACKTRACE=1
|
||||||
export RUST_LOG=garage=info,garage_api=debug
|
export RUST_LOG=garage=info,garage_api=debug
|
||||||
MAIN_LABEL="\e[${FANCYCOLORS[0]}[main]\e[49m"
|
MAIN_LABEL="\e[${FANCYCOLORS[0]}[main]\e[49m"
|
||||||
|
|
||||||
WHICH_GARAGE=$(which garage || exit 1)
|
if [ -z "$GARAGE_BIN" ]; then
|
||||||
echo -en "${MAIN_LABEL} Found garage at: ${WHICH_GARAGE}\n"
|
GARAGE_BIN=$(which garage || exit 1)
|
||||||
|
echo -en "${MAIN_LABEL} Found garage at: ${GARAGE_BIN}\n"
|
||||||
|
else
|
||||||
|
echo -en "${MAIN_LABEL} Using garage binary at: ${GARAGE_BIN}\n"
|
||||||
|
fi
|
||||||
|
$GARAGE_BIN --version
|
||||||
|
|
||||||
NETWORK_SECRET="$(openssl rand -hex 32)"
|
NETWORK_SECRET="$(openssl rand -hex 32)"
|
||||||
|
|
||||||
|
@ -28,6 +33,7 @@ LABEL="\e[${FANCYCOLORS[$count]}[$count]\e[49m"
|
||||||
cat > $CONF_PATH <<EOF
|
cat > $CONF_PATH <<EOF
|
||||||
block_size = 1048576 # objects are split in blocks of maximum this number of bytes
|
block_size = 1048576 # objects are split in blocks of maximum this number of bytes
|
||||||
metadata_dir = "/tmp/garage-meta-$count"
|
metadata_dir = "/tmp/garage-meta-$count"
|
||||||
|
db_engine = "lmdb"
|
||||||
data_dir = "/tmp/garage-data-$count"
|
data_dir = "/tmp/garage-data-$count"
|
||||||
rpc_bind_addr = "0.0.0.0:$((3900+$count))" # the port other Garage nodes will use to talk to this node
|
rpc_bind_addr = "0.0.0.0:$((3900+$count))" # the port other Garage nodes will use to talk to this node
|
||||||
rpc_public_addr = "127.0.0.1:$((3900+$count))"
|
rpc_public_addr = "127.0.0.1:$((3900+$count))"
|
||||||
|
@ -51,7 +57,7 @@ EOF
|
||||||
|
|
||||||
echo -en "$LABEL configuration written to $CONF_PATH\n"
|
echo -en "$LABEL configuration written to $CONF_PATH\n"
|
||||||
|
|
||||||
(garage -c /tmp/config.$count.toml server 2>&1|while read r; do echo -en "$LABEL $r\n"; done) &
|
($GARAGE_BIN -c /tmp/config.$count.toml server 2>&1|while read r; do echo -en "$LABEL $r\n"; done) &
|
||||||
done
|
done
|
||||||
# >>>>>>>>>>>>>>>> END FOR LOOP ON NODES
|
# >>>>>>>>>>>>>>>> END FOR LOOP ON NODES
|
||||||
|
|
||||||
|
@ -73,14 +79,14 @@ fi
|
||||||
sleep 3
|
sleep 3
|
||||||
# Establish connections between nodes
|
# Establish connections between nodes
|
||||||
for count in $(seq 1 3); do
|
for count in $(seq 1 3); do
|
||||||
NODE=$(garage -c /tmp/config.$count.toml node id -q)
|
NODE=$($GARAGE_BIN -c /tmp/config.$count.toml node id -q)
|
||||||
for count2 in $(seq 1 3); do
|
for count2 in $(seq 1 3); do
|
||||||
garage -c /tmp/config.$count2.toml node connect $NODE
|
$GARAGE_BIN -c /tmp/config.$count2.toml node connect $NODE
|
||||||
done
|
done
|
||||||
done
|
done
|
||||||
|
|
||||||
RETRY=120
|
RETRY=120
|
||||||
until garage -c /tmp/config.1.toml status 2>&1|grep -q HEALTHY ; do
|
until $GARAGE_BIN -c /tmp/config.1.toml status 2>&1|grep -q HEALTHY ; do
|
||||||
(( RETRY-- ))
|
(( RETRY-- ))
|
||||||
if (( RETRY <= 0 )); then
|
if (( RETRY <= 0 )); then
|
||||||
echo -en "${MAIN_LABEL} Garage did not start"
|
echo -en "${MAIN_LABEL} Garage did not start"
|
||||||
|
|
|
@ -9,9 +9,17 @@ GARAGE_RELEASE="${REPO_FOLDER}/target/release/"
|
||||||
NIX_RELEASE="${REPO_FOLDER}/result/bin/"
|
NIX_RELEASE="${REPO_FOLDER}/result/bin/"
|
||||||
PATH="${GARAGE_DEBUG}:${GARAGE_RELEASE}:${NIX_RELEASE}:$PATH"
|
PATH="${GARAGE_DEBUG}:${GARAGE_RELEASE}:${NIX_RELEASE}:$PATH"
|
||||||
|
|
||||||
|
if [ -z "$GARAGE_BIN" ]; then
|
||||||
|
GARAGE_BIN=$(which garage || exit 1)
|
||||||
|
echo -en "Found garage at: ${GARAGE_BIN}\n"
|
||||||
|
else
|
||||||
|
echo -en "Using garage binary at: ${GARAGE_BIN}\n"
|
||||||
|
fi
|
||||||
|
$GARAGE_BIN --version
|
||||||
|
|
||||||
sleep 5
|
sleep 5
|
||||||
RETRY=120
|
RETRY=120
|
||||||
until garage -c /tmp/config.1.toml status 2>&1|grep -q HEALTHY ; do
|
until $GARAGE_BIN -c /tmp/config.1.toml status 2>&1|grep -q HEALTHY ; do
|
||||||
(( RETRY-- ))
|
(( RETRY-- ))
|
||||||
if (( RETRY <= 0 )); then
|
if (( RETRY <= 0 )); then
|
||||||
echo "garage did not start in time, failing."
|
echo "garage did not start in time, failing."
|
||||||
|
@ -21,12 +29,20 @@ until garage -c /tmp/config.1.toml status 2>&1|grep -q HEALTHY ; do
|
||||||
sleep 1
|
sleep 1
|
||||||
done
|
done
|
||||||
|
|
||||||
garage -c /tmp/config.1.toml status \
|
if [ "$GARAGE_08" = "1" ]; then
|
||||||
|
$GARAGE_BIN -c /tmp/config.1.toml status \
|
||||||
| grep 'NO ROLE' \
|
| grep 'NO ROLE' \
|
||||||
| grep -Po '^[0-9a-f]+' \
|
| grep -Po '^[0-9a-f]+' \
|
||||||
| while read id; do
|
| while read id; do
|
||||||
garage -c /tmp/config.1.toml layout assign $id -z dc1 -c 1G
|
$GARAGE_BIN -c /tmp/config.1.toml layout assign $id -z dc1 -c 1
|
||||||
done
|
done
|
||||||
|
else
|
||||||
|
$GARAGE_BIN -c /tmp/config.1.toml status \
|
||||||
|
| grep 'NO ROLE' \
|
||||||
|
| grep -Po '^[0-9a-f]+' \
|
||||||
|
| while read id; do
|
||||||
|
$GARAGE_BIN -c /tmp/config.1.toml layout assign $id -z dc1 -c 1G
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
garage -c /tmp/config.1.toml layout config -r 1
|
$GARAGE_BIN -c /tmp/config.1.toml layout apply --version 1
|
||||||
garage -c /tmp/config.1.toml layout apply --version 1
|
|
||||||
|
|
75
script/test-upgrade.sh
Executable file
75
script/test-upgrade.sh
Executable file
|
@ -0,0 +1,75 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -ex
|
||||||
|
|
||||||
|
export LC_ALL=C.UTF-8
|
||||||
|
export LANG=C.UTF-8
|
||||||
|
SCRIPT_FOLDER="`dirname \"$0\"`"
|
||||||
|
REPO_FOLDER="${SCRIPT_FOLDER}/../"
|
||||||
|
GARAGE_DEBUG="${REPO_FOLDER}/target/debug/"
|
||||||
|
GARAGE_RELEASE="${REPO_FOLDER}/target/release/"
|
||||||
|
NIX_RELEASE="${REPO_FOLDER}/result/bin/:${REPO_FOLDER}/result-bin/bin/"
|
||||||
|
PATH="${GARAGE_DEBUG}:${GARAGE_RELEASE}:${NIX_RELEASE}:$PATH"
|
||||||
|
|
||||||
|
OLD_VERSION="$1"
|
||||||
|
ARCH="$2"
|
||||||
|
|
||||||
|
|
||||||
|
echo "Downloading old garage binary..."
|
||||||
|
curl https://garagehq.deuxfleurs.fr/_releases/$OLD_VERSION/$ARCH/garage > /tmp/old_garage
|
||||||
|
chmod +x /tmp/old_garage
|
||||||
|
|
||||||
|
echo "============= insert data into old version cluster ================="
|
||||||
|
|
||||||
|
export GARAGE_BIN=/tmp/old_garage
|
||||||
|
if echo $OLD_VERSION | grep 'v0\.8\.'; then
|
||||||
|
echo "Detected Garage v0.8.x"
|
||||||
|
export GARAGE_08=1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "⏳ Setup cluster using old version"
|
||||||
|
$GARAGE_BIN --version
|
||||||
|
${SCRIPT_FOLDER}/dev-clean.sh
|
||||||
|
${SCRIPT_FOLDER}/dev-cluster.sh > /tmp/garage.log 2>&1 &
|
||||||
|
sleep 6
|
||||||
|
${SCRIPT_FOLDER}/dev-configure.sh
|
||||||
|
${SCRIPT_FOLDER}/dev-bucket.sh
|
||||||
|
|
||||||
|
echo "🛠️ Inserting data in old cluster"
|
||||||
|
source ${SCRIPT_FOLDER}/dev-env-rclone.sh
|
||||||
|
rclone copy "${SCRIPT_FOLDER}/../.git/" garage:eprouvette/test_dotgit --stats=1s --stats-log-level=NOTICE --stats-one-line
|
||||||
|
|
||||||
|
echo "🏁 Stopping old cluster"
|
||||||
|
killall -INT old_garage
|
||||||
|
sleep 2
|
||||||
|
killall -9 old_garage || true
|
||||||
|
|
||||||
|
echo "🏁 Removing old garage version"
|
||||||
|
rm -rv $GARAGE_BIN
|
||||||
|
export -n GARAGE_BIN
|
||||||
|
export -n GARAGE_08
|
||||||
|
|
||||||
|
echo "================ read data from new cluster ==================="
|
||||||
|
|
||||||
|
echo "⏳ Setup cluster using new version"
|
||||||
|
pwd
|
||||||
|
ls
|
||||||
|
export GARAGE_BIN=$(which garage)
|
||||||
|
$GARAGE_BIN --version
|
||||||
|
${SCRIPT_FOLDER}/dev-cluster.sh >> /tmp/garage.log 2>&1 &
|
||||||
|
sleep 3
|
||||||
|
|
||||||
|
echo "🛠️ Retrieving data from old cluster"
|
||||||
|
rclone copy garage:eprouvette/test_dotgit /tmp/test_dotgit --stats=1s --stats-log-level=NOTICE --stats-one-line --fast-list
|
||||||
|
|
||||||
|
if ! diff <(find "${SCRIPT_FOLDER}/../.git" -type f | xargs md5sum | cut -d ' ' -f 1 | sort) <(find /tmp/test_dotgit -type f | xargs md5sum | cut -d ' ' -f 1 | sort); then
|
||||||
|
echo "TEST FAILURE: directories are different"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
rm -r /tmp/test_dotgit
|
||||||
|
|
||||||
|
echo "🏁 Teardown"
|
||||||
|
rm -rf /tmp/garage-{data,meta}-*
|
||||||
|
rm -rf /tmp/config.*.toml
|
||||||
|
|
||||||
|
echo "✅ Success"
|
Loading…
Reference in a new issue