Make wait_for_service more robust by checking HTTP response
wait_for_service just checked to see if the remote service was started, not that it was returning data. This caused problems when the service was behind a proxy because the proxy would respond quickly but the service may not have fully started. Wait for a non-503 HTTP response code and non-7 exit code (connection error) from curl Return an error if a successful connection cannot be made. Change-Id: I059a12b1b920f703f28aca0e2f352714118dee97
This commit is contained in:
		
							
								
								
									
										14
									
								
								functions
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								functions
									
									
									
									
									
								
							@@ -381,12 +381,24 @@ CURL_GET="${CURL_GET:-curl -g}"
 | 
			
		||||
 | 
			
		||||
# Wait for an HTTP server to start answering requests
 | 
			
		||||
# wait_for_service timeout url
 | 
			
		||||
#
 | 
			
		||||
# If the service we want is behind a proxy, the proxy may be available
 | 
			
		||||
# before the service. Compliant proxies will return a 503 in this case
 | 
			
		||||
# Loop until we get something else.
 | 
			
		||||
# Also check for the case where there is no proxy and the service just
 | 
			
		||||
# hasn't started yet. curl returns 7 for Failed to connect to host.
 | 
			
		||||
function wait_for_service {
 | 
			
		||||
    local timeout=$1
 | 
			
		||||
    local url=$2
 | 
			
		||||
    local rval=0
 | 
			
		||||
    time_start "wait_for_service"
 | 
			
		||||
    timeout $timeout sh -c "while ! $CURL_GET -k --noproxy '*' -s $url >/dev/null; do sleep 1; done"
 | 
			
		||||
    timeout $timeout bash -x <<EOF || rval=$?
 | 
			
		||||
        while [[ \$( ${CURL_GET} -k --noproxy '*' -s -o /dev/null -w '%{http_code}' ${url} ) == 503 || \$? -eq 7 ]]; do
 | 
			
		||||
            sleep 1
 | 
			
		||||
        done
 | 
			
		||||
EOF
 | 
			
		||||
    time_stop "wait_for_service"
 | 
			
		||||
    return $rval
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user