diff --git a/buildscripts/healthcheck.sh b/buildscripts/healthcheck.sh index 325c97c74..287fc20dc 100644 --- a/buildscripts/healthcheck.sh +++ b/buildscripts/healthcheck.sh @@ -19,25 +19,40 @@ _init () { scheme="http://" address="127.0.0.1:9000" resource="/minio/index.html" + start=$(stat -c "%Y" /proc/1) } -HealthCheckMain () { - # Get the http response code - http_response=$(curl -s -k -o /dev/null -I -w "%{http_code}" ${scheme}${address}${resource}) +healthcheck_main () { + # In distributed environment like Swarm, traffic is routed + # to a container only when it reports a `healthy` status. So, we exit + # with 0 to ensure healthy status till distributed Minio starts (120s). + # + # Refer: https://github.com/moby/moby/pull/28938#issuecomment-301753272 + if [ $(( $(date +%s) - start )) -lt 120 ]; then + exit 0 + else + # Get the http response code + http_response=$(curl -s -k -o /dev/null -I -w "%{http_code}" \ + ${scheme}${address}${resource}) - # Get the http response body - http_response_body=$(curl -k -s ${scheme}${address}${resource}) + # Get the http response body + http_response_body=$(curl -k -s ${scheme}${address}${resource}) - # server returns response 403 and body "SSL required" if non-TLS connection is attempted on a TLS-configured server. - # change the scheme and try again - if [ "$http_response" = "403" ] && [ "$http_response_body" = "SSL required" ]; then - scheme="https://" - http_response=$(curl -s -k -o /dev/null -I -w "%{http_code}" ${scheme}${address}${resource}) - fi + # server returns response 403 and body "SSL required" if non-TLS + # connection is attempted on a TLS-configured server. Change + # the scheme and try again + if [ "$http_response" = "403" ] && \ + [ "$http_response_body" = "SSL required" ]; then + scheme="https://" + http_response=$(curl -s -k -o /dev/null -I -w "%{http_code}" \ + ${scheme}${address}${resource}) + fi - # If http_repsonse is 200 - server is up. - # When MINIO_BROWSER is set to off, curl responds with 404. We assume that the the server is up - [ "$http_response" = "200" ] || [ "$http_response" = "404" ] + # If http_repsonse is 200 - server is up. When MINIO_BROWSER is + # set to off, curl responds with 404. We assume that the server + # is up + [ "$http_response" = "200" ] || [ "$http_response" = "404" ] + fi } -_init && HealthCheckMain +_init && healthcheck_main