DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://issues.apache.org/bugzilla/show_bug.cgi?id=29648>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://issues.apache.org/bugzilla/show_bug.cgi?id=29648

Require a timeout that value that can passed to stop requests.

           Summary: Require a timeout that value that can passed to stop
                    requests.
           Product: Apache httpd-1.3
           Version: 1.3.26
          Platform: Other
        OS/Version: Other
            Status: NEW
          Severity: Normal
          Priority: Other
         Component: core
        AssignedTo: [email protected]
        ReportedBy: [EMAIL PROTECTED]
                CC: [EMAIL PROTECTED]


In working with a client experiencing performance issues, I came across the 
following issue. They use Apache to front end a large number of back end web 
appliactions such as CGI's, Websphere, Domino, Cold Fusion, Dynamo, Oracle, 
Webspeed, etc.

When the back end servers would stop answering, or even worse would accept the 
tcp connection but never reply back, the main Apache web server would hold the 
connection for the full server timeout period which was set (for good reason) 
at 5 minutes. Their fierwall, however, would terminate a connection after 40 
seconds if no data was transferred. Users would get firewall errors, hit reload 
and effectively open lock up a number of Apache processes for up to 5 minutes. 
The machine would hits its limit of apaches and the site would be inaccessible.

The obvious answer is to fix the back end systems. Unfortunately one was a 
Domino bug and they had to wait for IBM. I proposed a new architecture with a 
front end machine capable of handling their transaction load. In the short 
term, however, something had to be done (the client is a government adgency, 
and they never seem to move things fast enough through the buraceracy).

I therefore made some modifications in mod_proxy by identifying the sticking 
points, and created a new timeout value not based upon the server config that I 
could configure within the conf file so they could adjust it whatever firewall 
changes came down. This was an overwhelming success for the client and dropped 
their downtime on the main web server by over 95%.

This seemed to me to be a good idea to pass back into Apache.

Following is the source changes for 1.3.26 I had to make into the core, namely 
http_main.c. This is all new code.

1571,1575d1570
< static void proxy_timeout(int sig) 
< {                     
<     cancel_proxy((request_rec *) timeout_req);
<     timeout(sig);
< }
1578,1581d1572
< 
< 
< 
< 
1747,1756d1737
< }
< 
< API_EXPORT(void) ap_config_timeout(int timeout_period, char *name, 
request_rec *r) 
< {  
< #ifdef NETWARE  
<     get_tsd  
< #endif  
<     timeout_req = r;  
<     timeout_name = name;  
<     ap_set_callback_and_alarm(proxy_timeout, timeout_period);




The only issue I had with the patch is that it actually has proxy stuff within 
the main file. I believe the right way around this would be to pass a callback 
function to ap_config_timeout and store it in a global. I also do not like the 
function name ap_config_timeout. Should it be ap_variable_timeout? Any hints 
appreciated and I'll put the changes into my installation and test them.

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to