Bug 1785100
| Summary: | mod_cgid takes CGIDScriptTimeout x 2 seconds for timeout [rhel-7.9.z] | |||
|---|---|---|---|---|
| Product: | Red Hat Enterprise Linux 7 | Reporter: | Hisanobu Okuda <hokuda> | |
| Component: | httpd | Assignee: | Luboš Uhliarik <luhliari> | |
| Status: | CLOSED ERRATA | QA Contact: | icesalov | |
| Severity: | unspecified | Docs Contact: | ||
| Priority: | unspecified | |||
| Version: | 7.8 | CC: | bnater, jorton, jreznik, luhliari, pamadio | |
| Target Milestone: | rc | Keywords: | ZStream | |
| Target Release: | --- | |||
| Hardware: | Unspecified | |||
| OS: | Unspecified | |||
| Whiteboard: | ||||
| Fixed In Version: | Doc Type: | If docs needed, set a value | ||
| Doc Text: | Story Points: | --- | ||
| Clone Of: | ||||
| : | 1875844 1977234 (view as bug list) | Environment: | ||
| Last Closed: | 2020-11-10 13:10:55 UTC | Type: | Bug | |
| Regression: | --- | Mount Type: | --- | |
| Documentation: | --- | CRM: | ||
| Verified Versions: | Category: | --- | ||
| oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | ||
| Cloudforms Team: | --- | Target Upstream Version: | ||
| Embargoed: | ||||
| Bug Depends On: | ||||
| Bug Blocks: | 1875844, 1977234 | |||
After the message "Script timed out before returning headers: test.py" appears, discard_script_output() is called in log_script() to "Soak up script output" and takes `CGIDScriptTimeout` seconds to be timed out.
I think it is not needed:
----------------------------------------------------------
1101 static int log_script(request_rec *r, cgid_server_conf * conf, int ret,
1102 char *dbuf, const char *sbuf, apr_bucket_brigade *bb,
1103 apr_file_t *script_err)
1104 {
1105 const apr_array_header_t *hdrs_arr = apr_table_elts(r->headers_in);
1106 const apr_table_entry_t *hdrs = (apr_table_entry_t *) hdrs_arr->elts;
1107 char argsbuffer[HUGE_STRING_LEN];
1108 apr_file_t *f = NULL;
1109 apr_bucket *e;
1110 const char *buf;
1111 apr_size_t len;
1112 apr_status_t rv;
1113 int first;
1114 int i;
1115 struct stat finfo;
1116 char time_str[APR_CTIME_LEN];
1117
1118 /* XXX Very expensive mainline case! Open, then getfileinfo! */
1119 if (!conf->logname ||
1120 ((stat(conf->logname, &finfo) == 0)
1121 && (finfo.st_size > conf->logbytes)) ||
1122 (apr_file_open(&f, conf->logname,
1123 APR_APPEND|APR_WRITE|APR_CREATE, APR_OS_DEFAULT, r->pool) != APR_SUCCESS)) {
1124 /* Soak up script output */
1125 discard_script_output(bb); <<<<==== Is it needed actually?
1126 if (script_err) {
----------------------------------------------------------
Since the problem described in this bug report should be resolved in a recent advisory, it has been closed with a resolution of ERRATA. For information on the advisory (httpd bug fix and enhancement update), and where to find the updated files, follow the link below. If the solution does not work for you, open a new bug report. https://access.redhat.com/errata/RHBA-2020:5033 |
Description of problem: When a cgi script takes so long time to provide a response, mod_cgid takes CGIDScriptTimeout x 2 seconds for timeout. Version-Release number of selected component (if applicable): httpd-2.4.6-90.el7.x86_64 How reproducible: Steps to Reproduce: 1. yum -y install httpd-2.4.6-90.el7.x86_64 2. Edit /etc/httpd/conf.modules.d/00-mpm.conf to enable the event mpm module only. 3. Edit /etc/httpd/conf/httpd.conf and add: ------------------------------------ CGIDScriptTimeout 10 KeepAlive On KeepAliveTimeout 2 ExtendedStatus on <Location /server-status> SetHandler server-status </Location> ------------------------------------ 4. systemctl start httpd 5. Create a cgi script and chmod+x it in /var/www/cgi-bin/test.py and chmod +x it. ------------------------------------ #!/usr/bin/python import os import time import sys print "Content-Type: text/html" # HTML is following print # blank line, end of headers time.sleep(31) sys.stdout.flush() time.sleep(65) ------------------------------------ 6. Fetch the page with curl: time curl -kv http://127.0.0.1/cgi-bin/test.py 7. After 10 seconds (CGIDScriptTimeout), an error occurs in /var/log/apache/error_log [Tue Dec 17 10:02:58.730053 2019] [cgid:error] [pid 24364:tid 140669817440000] [client 127.0.0.1:48540] Script timed out before returning headers: test.py 8. After another 10 seconds, "504 Gateway Timeout" is returned Actual results: Expected results: Additional info: