heal buckets properly during expansion, and make sure to wait for the quorum properly such that healing can be retried.
347 lines
9.1 KiB
Bash
Executable file
347 lines
9.1 KiB
Bash
Executable file
#!/bin/bash
|
|
#
|
|
# MinIO Cloud Storage, (C) 2017, 2018 MinIO, Inc.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
#
|
|
|
|
set -e
|
|
set -E
|
|
set -o pipefail
|
|
|
|
if [ ! -x "$PWD/minio" ]; then
|
|
echo "minio executable binary not found in current directory"
|
|
exit 1
|
|
fi
|
|
|
|
WORK_DIR="$PWD/.verify-$RANDOM"
|
|
|
|
export MINT_MODE=core
|
|
export MINT_DATA_DIR="$WORK_DIR/data"
|
|
export SERVER_ENDPOINT="127.0.0.1:9000"
|
|
export ACCESS_KEY="minio"
|
|
export SECRET_KEY="minio123"
|
|
export ENABLE_HTTPS=0
|
|
export GO111MODULE=on
|
|
|
|
MINIO_CONFIG_DIR="$WORK_DIR/.minio"
|
|
MINIO=( "$PWD/minio" --config-dir "$MINIO_CONFIG_DIR" )
|
|
|
|
FILE_1_MB="$MINT_DATA_DIR/datafile-1-MB"
|
|
FILE_65_MB="$MINT_DATA_DIR/datafile-65-MB"
|
|
|
|
FUNCTIONAL_TESTS="$WORK_DIR/functional-tests.sh"
|
|
|
|
function start_minio_fs()
|
|
{
|
|
"${MINIO[@]}" server "${WORK_DIR}/fs-disk" >"$WORK_DIR/fs-minio.log" 2>&1 &
|
|
minio_pid=$!
|
|
sleep 10
|
|
|
|
echo "$minio_pid"
|
|
}
|
|
|
|
function start_minio_erasure()
|
|
{
|
|
"${MINIO[@]}" server "${WORK_DIR}/erasure-disk1" "${WORK_DIR}/erasure-disk2" "${WORK_DIR}/erasure-disk3" "${WORK_DIR}/erasure-disk4" >"$WORK_DIR/erasure-minio.log" 2>&1 &
|
|
minio_pid=$!
|
|
sleep 15
|
|
|
|
echo "$minio_pid"
|
|
}
|
|
|
|
function start_minio_erasure_sets()
|
|
{
|
|
"${MINIO[@]}" server "${WORK_DIR}/erasure-disk-sets{1...32}" >"$WORK_DIR/erasure-minio-sets.log" 2>&1 &
|
|
minio_pid=$!
|
|
sleep 15
|
|
|
|
echo "$minio_pid"
|
|
}
|
|
|
|
function start_minio_zone_erasure_sets()
|
|
{
|
|
declare -a minio_pids
|
|
export MINIO_ACCESS_KEY=$ACCESS_KEY
|
|
export MINIO_SECRET_KEY=$SECRET_KEY
|
|
|
|
"${MINIO[@]}" server --address=:9000 "http://127.0.0.1:9000${WORK_DIR}/zone-disk-sets{1...4}" "http://127.0.0.1:9001${WORK_DIR}/zone-disk-sets{5...8}" >"$WORK_DIR/zone-minio-9000.log" 2>&1 &
|
|
minio_pids[0]=$!
|
|
|
|
"${MINIO[@]}" server --address=:9001 "http://127.0.0.1:9000${WORK_DIR}/zone-disk-sets{1...4}" "http://127.0.0.1:9001${WORK_DIR}/zone-disk-sets{5...8}" >"$WORK_DIR/zone-minio-9001.log" 2>&1 &
|
|
minio_pids[1]=$!
|
|
|
|
sleep 40
|
|
echo "${minio_pids[@]}"
|
|
}
|
|
|
|
function start_minio_zone_erasure_sets_ipv6()
|
|
{
|
|
declare -a minio_pids
|
|
export MINIO_ACCESS_KEY=$ACCESS_KEY
|
|
export MINIO_SECRET_KEY=$SECRET_KEY
|
|
|
|
"${MINIO[@]}" server --address="[::1]:9000" "http://[::1]:9000${WORK_DIR}/zone-disk-sets{1...4}" "http://[::1]:9001${WORK_DIR}/zone-disk-sets{5...8}" >"$WORK_DIR/zone-minio-9000.log" 2>&1 &
|
|
minio_pids[0]=$!
|
|
|
|
"${MINIO[@]}" server --address="[::1]:9001" "http://[::1]:9000${WORK_DIR}/zone-disk-sets{1...4}" "http://[::1]:9001${WORK_DIR}/zone-disk-sets{5...8}" >"$WORK_DIR/zone-minio-9001.log" 2>&1 &
|
|
minio_pids[1]=$!
|
|
|
|
sleep 40
|
|
echo "${minio_pids[@]}"
|
|
}
|
|
|
|
function start_minio_dist_erasure()
|
|
{
|
|
declare -a minio_pids
|
|
export MINIO_ACCESS_KEY=$ACCESS_KEY
|
|
export MINIO_SECRET_KEY=$SECRET_KEY
|
|
"${MINIO[@]}" server --address=:9000 "http://127.0.0.1:9000${WORK_DIR}/dist-disk1" "http://127.0.0.1:9001${WORK_DIR}/dist-disk2" "http://127.0.0.1:9002${WORK_DIR}/dist-disk3" "http://127.0.0.1:9003${WORK_DIR}/dist-disk4" >"$WORK_DIR/dist-minio-9000.log" 2>&1 &
|
|
minio_pids[0]=$!
|
|
"${MINIO[@]}" server --address=:9001 "http://127.0.0.1:9000${WORK_DIR}/dist-disk1" "http://127.0.0.1:9001${WORK_DIR}/dist-disk2" "http://127.0.0.1:9002${WORK_DIR}/dist-disk3" "http://127.0.0.1:9003${WORK_DIR}/dist-disk4" >"$WORK_DIR/dist-minio-9001.log" 2>&1 &
|
|
minio_pids[1]=$!
|
|
"${MINIO[@]}" server --address=:9002 "http://127.0.0.1:9000${WORK_DIR}/dist-disk1" "http://127.0.0.1:9001${WORK_DIR}/dist-disk2" "http://127.0.0.1:9002${WORK_DIR}/dist-disk3" "http://127.0.0.1:9003${WORK_DIR}/dist-disk4" >"$WORK_DIR/dist-minio-9002.log" 2>&1 &
|
|
minio_pids[2]=$!
|
|
"${MINIO[@]}" server --address=:9003 "http://127.0.0.1:9000${WORK_DIR}/dist-disk1" "http://127.0.0.1:9001${WORK_DIR}/dist-disk2" "http://127.0.0.1:9002${WORK_DIR}/dist-disk3" "http://127.0.0.1:9003${WORK_DIR}/dist-disk4" >"$WORK_DIR/dist-minio-9003.log" 2>&1 &
|
|
minio_pids[3]=$!
|
|
|
|
sleep 40
|
|
echo "${minio_pids[@]}"
|
|
}
|
|
|
|
function run_test_fs()
|
|
{
|
|
minio_pid="$(start_minio_fs)"
|
|
|
|
(cd "$WORK_DIR" && "$FUNCTIONAL_TESTS")
|
|
rv=$?
|
|
|
|
kill "$minio_pid"
|
|
sleep 3
|
|
|
|
if [ "$rv" -ne 0 ]; then
|
|
cat "$WORK_DIR/fs-minio.log"
|
|
fi
|
|
rm -f "$WORK_DIR/fs-minio.log"
|
|
|
|
return "$rv"
|
|
}
|
|
|
|
function run_test_erasure_sets() {
|
|
minio_pid="$(start_minio_erasure_sets)"
|
|
|
|
(cd "$WORK_DIR" && "$FUNCTIONAL_TESTS")
|
|
rv=$?
|
|
|
|
kill "$minio_pid"
|
|
sleep 3
|
|
|
|
if [ "$rv" -ne 0 ]; then
|
|
cat "$WORK_DIR/erasure-minio-sets.log"
|
|
fi
|
|
rm -f "$WORK_DIR/erasure-minio-sets.log"
|
|
|
|
return "$rv"
|
|
}
|
|
|
|
function run_test_zone_erasure_sets()
|
|
{
|
|
minio_pids=( $(start_minio_zone_erasure_sets) )
|
|
|
|
(cd "$WORK_DIR" && "$FUNCTIONAL_TESTS")
|
|
rv=$?
|
|
|
|
for pid in "${minio_pids[@]}"; do
|
|
kill "$pid"
|
|
done
|
|
sleep 3
|
|
|
|
if [ "$rv" -ne 0 ]; then
|
|
for i in $(seq 0 1); do
|
|
echo "server$i log:"
|
|
cat "$WORK_DIR/zone-minio-900$i.log"
|
|
done
|
|
fi
|
|
|
|
for i in $(seq 0 1); do
|
|
rm -f "$WORK_DIR/zone-minio-900$i.log"
|
|
done
|
|
|
|
return "$rv"
|
|
}
|
|
|
|
function run_test_zone_erasure_sets_ipv6()
|
|
{
|
|
minio_pids=( $(start_minio_zone_erasure_sets_ipv6) )
|
|
|
|
export SERVER_ENDPOINT="[::1]:9000"
|
|
|
|
(cd "$WORK_DIR" && "$FUNCTIONAL_TESTS")
|
|
rv=$?
|
|
|
|
for pid in "${minio_pids[@]}"; do
|
|
kill "$pid"
|
|
done
|
|
sleep 3
|
|
|
|
if [ "$rv" -ne 0 ]; then
|
|
for i in $(seq 0 1); do
|
|
echo "server$i log:"
|
|
cat "$WORK_DIR/zone-minio-ipv6-900$i.log"
|
|
done
|
|
fi
|
|
|
|
for i in $(seq 0 1); do
|
|
rm -f "$WORK_DIR/zone-minio-ipv6-900$i.log"
|
|
done
|
|
|
|
return "$rv"
|
|
}
|
|
|
|
function run_test_erasure()
|
|
{
|
|
minio_pid="$(start_minio_erasure)"
|
|
|
|
(cd "$WORK_DIR" && "$FUNCTIONAL_TESTS")
|
|
rv=$?
|
|
|
|
kill "$minio_pid"
|
|
sleep 3
|
|
|
|
if [ "$rv" -ne 0 ]; then
|
|
cat "$WORK_DIR/erasure-minio.log"
|
|
fi
|
|
rm -f "$WORK_DIR/erasure-minio.log"
|
|
|
|
return "$rv"
|
|
}
|
|
|
|
function run_test_dist_erasure()
|
|
{
|
|
minio_pids=( $(start_minio_dist_erasure) )
|
|
|
|
(cd "$WORK_DIR" && "$FUNCTIONAL_TESTS")
|
|
rv=$?
|
|
|
|
for pid in "${minio_pids[@]}"; do
|
|
kill "$pid"
|
|
done
|
|
sleep 3
|
|
|
|
if [ "$rv" -ne 0 ]; then
|
|
echo "server1 log:"
|
|
cat "$WORK_DIR/dist-minio-9000.log"
|
|
echo "server2 log:"
|
|
cat "$WORK_DIR/dist-minio-9001.log"
|
|
echo "server3 log:"
|
|
cat "$WORK_DIR/dist-minio-9002.log"
|
|
echo "server4 log:"
|
|
cat "$WORK_DIR/dist-minio-9003.log"
|
|
fi
|
|
|
|
rm -f "$WORK_DIR/dist-minio-9000.log" "$WORK_DIR/dist-minio-9001.log" "$WORK_DIR/dist-minio-9002.log" "$WORK_DIR/dist-minio-9003.log"
|
|
|
|
return "$rv"
|
|
}
|
|
|
|
function purge()
|
|
{
|
|
rm -rf "$1"
|
|
}
|
|
|
|
function __init__()
|
|
{
|
|
echo "Initializing environment"
|
|
mkdir -p "$WORK_DIR"
|
|
mkdir -p "$MINIO_CONFIG_DIR"
|
|
mkdir -p "$MINT_DATA_DIR"
|
|
|
|
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}"
|
|
|
|
shred -n 1 -s 1M - 1>"$FILE_1_MB" 2>/dev/null
|
|
shred -n 1 -s 65M - 1>"$FILE_65_MB" 2>/dev/null
|
|
|
|
## version is purposefully set to '3' for minio to migrate configuration file
|
|
echo '{"version": "3", "credential": {"accessKey": "minio", "secretKey": "minio123"}, "region": "us-east-1"}' > "$MINIO_CONFIG_DIR/config.json"
|
|
|
|
if ! wget -q -O "$FUNCTIONAL_TESTS" https://raw.githubusercontent.com/minio/mc/master/functional-tests.sh; then
|
|
echo "failed to download https://raw.githubusercontent.com/minio/mc/master/functional-tests.sh"
|
|
exit 1
|
|
fi
|
|
|
|
sed -i 's|-sS|-sSg|g' "$FUNCTIONAL_TESTS"
|
|
chmod a+x "$FUNCTIONAL_TESTS"
|
|
}
|
|
|
|
function main()
|
|
{
|
|
echo "Testing in FS setup"
|
|
if ! run_test_fs; then
|
|
echo "FAILED"
|
|
purge "$WORK_DIR"
|
|
exit 1
|
|
fi
|
|
|
|
echo "Testing in Erasure setup"
|
|
if ! run_test_erasure; then
|
|
echo "FAILED"
|
|
purge "$WORK_DIR"
|
|
exit 1
|
|
fi
|
|
|
|
echo "Testing in Distributed Erasure setup"
|
|
if ! run_test_dist_erasure; then
|
|
echo "FAILED"
|
|
purge "$WORK_DIR"
|
|
exit 1
|
|
fi
|
|
|
|
echo "Testing in Erasure setup as sets"
|
|
if ! run_test_erasure_sets; then
|
|
echo "FAILED"
|
|
purge "$WORK_DIR"
|
|
exit 1
|
|
fi
|
|
|
|
echo "Testing in Distributed Eraure expanded setup"
|
|
if ! run_test_zone_erasure_sets; then
|
|
echo "FAILED"
|
|
purge "$WORK_DIR"
|
|
exit 1
|
|
fi
|
|
|
|
echo "Testing in Distributed Erasure expanded setup with ipv6"
|
|
if ! run_test_zone_erasure_sets_ipv6; then
|
|
echo "FAILED"
|
|
purge "$WORK_DIR"
|
|
exit 1
|
|
fi
|
|
|
|
purge "$WORK_DIR"
|
|
}
|
|
|
|
( __init__ "$@" && main "$@" )
|
|
rv=$?
|
|
purge "$WORK_DIR"
|
|
exit "$rv"
|