172 lines · 4.3 KB · Shell
RawDownload
#!/bin/bash -e# set -Eset -o pipefailset -x if [ ! -x "$PWD/minio" ]; then    echo "minio executable binary not found in current directory"    exit 1fi WORK_DIR="$PWD/.verify-$RANDOM"MINIO_CONFIG_DIR="$WORK_DIR/.minio"MINIO_OLD=( "$PWD/minio.RELEASE.2021-11-24T23-19-33Z" --config-dir "$MINIO_CONFIG_DIR" server )MINIO=( "$PWD/minio" --config-dir "$MINIO_CONFIG_DIR" server ) function download_old_release() {    if [ ! -f minio.RELEASE.2021-11-24T23-19-33Z ]; then	curl --silent -O https://dl.minio.io/server/minio/release/linux-amd64/archive/minio.RELEASE.2021-11-24T23-19-33Z	chmod a+x minio.RELEASE.2021-11-24T23-19-33Z    fi} function start_minio_16drive() {    start_port=$1     export MINIO_ROOT_USER=minio    export MINIO_ROOT_PASSWORD=minio123    export MC_HOST_minio="http://minio:minio123@127.0.0.1:${start_port}/"    unset MINIO_KMS_AUTO_ENCRYPTION # do not auto-encrypt objects    export _MINIO_SHARD_DISKTIME_DELTA="5s" # do not change this as its needed for tests    export MINIO_CI_CD=1     MC_BUILD_DIR="mc-$RANDOM"    if ! git clone --quiet https://github.com/minio/mc "$MC_BUILD_DIR"; then	echo "failed to download https://github.com/minio/mc"	purge "${MC_BUILD_DIR}"	exit 1    fi     (cd "${MC_BUILD_DIR}" && go build -o "$WORK_DIR/mc")     # remove mc source.    purge "${MC_BUILD_DIR}"     "${MINIO_OLD[@]}" --address ":$start_port" "${WORK_DIR}/xl{1...16}" > "${WORK_DIR}/server1.log" 2>&1 &    pid=$!    disown $pid    sleep 30     if ! ps -p ${pid} 1>&2 >/dev/null; then	echo "server1 log:"	cat "${WORK_DIR}/server1.log"	echo "FAILED"	purge "$WORK_DIR"	exit 1    fi     shred --iterations=1 --size=5241856 - 1>"${WORK_DIR}/unaligned" 2>/dev/null    "${WORK_DIR}/mc" mb minio/healing-shard-bucket --quiet    "${WORK_DIR}/mc" cp \		     "${WORK_DIR}/unaligned" \		     minio/healing-shard-bucket/unaligned \		     --disable-multipart --quiet     ## "unaligned" object name gets consistently distributed    ## to disks in following distribution order    ##    ## NOTE: if you change the name make sure to change the    ## distribution order present here    ##    ## [15, 16, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]     ## make sure to remove the "last" data shard    rm -rf "${WORK_DIR}/xl14/healing-shard-bucket/unaligned"    sleep 10    ## Heal the shard    "${WORK_DIR}/mc" admin heal --quiet --recursive minio/healing-shard-bucket    ## then remove any other data shard let's pick first disk    ## - 1st data shard.    rm -rf "${WORK_DIR}/xl3/healing-shard-bucket/unaligned"    sleep 10     go build ./docs/debugging/s3-check-md5/    if ! ./s3-check-md5 \	 -debug \	 -access-key minio \	 -secret-key minio123 \	 -endpoint http://127.0.0.1:${start_port}/ 2>&1 | grep CORRUPTED; then	echo "server1 log:"	cat "${WORK_DIR}/server1.log"	echo "FAILED"	purge "$WORK_DIR"	exit 1    fi     pkill minio    sleep 3     "${MINIO[@]}" --address ":$start_port" "${WORK_DIR}/xl{1...16}" > "${WORK_DIR}/server1.log" 2>&1 &    pid=$!    disown $pid    sleep 30     if ! ps -p ${pid} 1>&2 >/dev/null; then	echo "server1 log:"	cat "${WORK_DIR}/server1.log"	echo "FAILED"	purge "$WORK_DIR"	exit 1    fi     if ! ./s3-check-md5 \	 -debug \	 -access-key minio \	 -secret-key minio123 \	 -endpoint http://127.0.0.1:${start_port}/ 2>&1 | grep INTACT; then	echo "server1 log:"	cat "${WORK_DIR}/server1.log"	echo "FAILED"	mkdir -p inspects	(cd inspects; "${WORK_DIR}/mc" admin inspect minio/healing-shard-bucket/unaligned/**) 	"${WORK_DIR}/mc" mb play/inspects	"${WORK_DIR}/mc" mirror inspects play/inspects 	purge "$WORK_DIR"	exit 1    fi     "${WORK_DIR}/mc" admin heal --quiet --recursive minio/healing-shard-bucket     if ! ./s3-check-md5 \	 -debug \	 -access-key minio \	 -secret-key minio123 \	 -endpoint http://127.0.0.1:${start_port}/ 2>&1 | grep INTACT; then	echo "server1 log:"	cat "${WORK_DIR}/server1.log"	echo "FAILED"	mkdir -p inspects	(cd inspects; "${WORK_DIR}/mc" admin inspect minio/healing-shard-bucket/unaligned/**) 	"${WORK_DIR}/mc" mb play/inspects	"${WORK_DIR}/mc" mirror inspects play/inspects 	purge "$WORK_DIR"	exit 1    fi     pkill minio    sleep 3} function main() {    download_old_release     start_port=$(shuf -i 10000-65000 -n 1)     start_minio_16drive ${start_port}} function purge(){    rm -rf "$1"} ( main "$@" )rv=$?purge "$WORK_DIR"exit "$rv"

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t