forked from minio/minio
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Browse the repository at this point in the history
…inio#20715) Golang http.Server will call SetReadDeadline overwriting the previous deadline configuration set after a new connection Accept in the custom listener code. Therefore, --idle-timeout was not correctly respected. Make http.Server read/write timeout similar to --idle-timeout.
- Loading branch information
Showing
5 changed files
with
148 additions
and
6 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,137 @@ | ||
#!/bin/bash | ||
|
||
if [ -n "$TEST_DEBUG" ]; then | ||
set -x | ||
fi | ||
|
||
WORK_DIR="$PWD/.verify-$RANDOM" | ||
MINIO_CONFIG_DIR="$WORK_DIR/.minio" | ||
MINIO=("$PWD/minio" --config-dir "$MINIO_CONFIG_DIR" server) | ||
|
||
if [ ! -x "$PWD/minio" ]; then | ||
echo "minio executable binary not found in current directory" | ||
exit 1 | ||
fi | ||
|
||
if [ ! -x "$PWD/minio" ]; then | ||
echo "minio executable binary not found in current directory" | ||
exit 1 | ||
fi | ||
|
||
trap 'catch $LINENO' ERR | ||
|
||
function purge() { | ||
rm -rf "$1" | ||
} | ||
|
||
# shellcheck disable=SC2120 | ||
catch() { | ||
if [ $# -ne 0 ]; then | ||
echo "error on line $1" | ||
fi | ||
|
||
echo "Cleaning up instances of MinIO" | ||
pkill minio || true | ||
pkill -9 minio || true | ||
purge "$WORK_DIR" | ||
if [ $# -ne 0 ]; then | ||
exit $# | ||
fi | ||
} | ||
|
||
catch | ||
|
||
function gen_put_request() { | ||
hdr_sleep=$1 | ||
body_sleep=$2 | ||
|
||
echo "PUT /testbucket/testobject HTTP/1.1" | ||
sleep $hdr_sleep | ||
echo "Host: foo-header" | ||
echo "User-Agent: curl/8.2.1" | ||
echo "Accept: */*" | ||
echo "Content-Length: 30" | ||
echo "" | ||
|
||
sleep $body_sleep | ||
echo "random line 0" | ||
echo "random line 1" | ||
echo "" | ||
echo "" | ||
} | ||
|
||
function send_put_object_request() { | ||
hdr_timeout=$1 | ||
body_timeout=$2 | ||
|
||
start=$(date +%s) | ||
timeout 5m bash -c "gen_put_request $hdr_timeout $body_timeout | netcat 127.0.0.1 $start_port | read" || return -1 | ||
[ $(($(date +%s) - start)) -gt $((srv_hdr_timeout + srv_idle_timeout + 1)) ] && return -1 | ||
return 0 | ||
} | ||
|
||
function test_minio_with_timeout() { | ||
start_port=$1 | ||
|
||
export MINIO_ROOT_USER=minio | ||
export MINIO_ROOT_PASSWORD=minio123 | ||
export MC_HOST_minio="http://minio:[email protected]:${start_port}/" | ||
export MINIO_CI_CD=1 | ||
|
||
mkdir ${WORK_DIR} | ||
C_PWD=${PWD} | ||
if [ ! -x "$PWD/mc" ]; then | ||
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 "$C_PWD/mc") | ||
|
||
# remove mc source. | ||
purge "${MC_BUILD_DIR}" | ||
fi | ||
|
||
"${MINIO[@]}" --address ":$start_port" --read-header-timeout ${srv_hdr_timeout}s --idle-timeout ${srv_idle_timeout}s "${WORK_DIR}/disk/" >"${WORK_DIR}/server1.log" 2>&1 & | ||
pid=$! | ||
disown $pid | ||
sleep 1 | ||
|
||
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 | ||
|
||
set -e | ||
|
||
"${PWD}/mc" mb minio/testbucket | ||
"${PWD}/mc" anonymous set public minio/testbucket | ||
|
||
# slow header writing | ||
send_put_object_request 20 0 && exit -1 | ||
"${PWD}/mc" stat minio/testbucket/testobject && exit -1 | ||
|
||
# quick header write and slow bodywrite | ||
send_put_object_request 0 40 && exit -1 | ||
"${PWD}/mc" stat minio/testbucket/testobject && exit -1 | ||
|
||
# quick header and body write | ||
send_put_object_request 1 1 || exit -1 | ||
"${PWD}/mc" stat minio/testbucket/testobject || exit -1 | ||
} | ||
|
||
function main() { | ||
export start_port=$(shuf -i 10000-65000 -n 1) | ||
export srv_hdr_timeout=5 | ||
export srv_idle_timeout=5 | ||
export -f gen_put_request | ||
|
||
test_minio_with_timeout ${start_port} | ||
} | ||
|
||
main "$@" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters