Re: Apache server returns early before process is complete
Joseph He <[email protected]> Wed, 23 Apr 2025 15:38:35 -0500
| Newsgroups | gmane.comp.apache.mod-perl |
|---|---|
| Message-ID | <CAD16sHsoatyBUiPd_zz+uyD4TadLAJrMK=LT-jpzxn9Lqo-L+w@mail.gmail.com> |
--0000000000007ba2930633781669 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Apache2 doc, I found this. How does this timeout work? It looks like it can only wait for 300 seconds before failing a request. https://httpd.apache.org/docs/2.0/mod/core.html#timeout Description: <https://httpd.apache.org/docs/2.0/mod/directive-dict.html#Description> Amo= unt of time the server will wait for certain events before failing a request Syntax: <https://httpd.apache.org/docs/2.0/mod/directive-dict.html#Syntax> TimeOut seconds Default: <https://httpd.apache.org/docs/2.0/mod/directive-dict.html#Default= > TimeOut 300 Context: <https://httpd.apache.org/docs/2.0/mod/directive-dict.html#Context= > server config, virtual host Status: <https://httpd.apache.org/docs/2.0/mod/directive-dict.html#Status> Core Module: <https://httpd.apache.org/docs/2.0/mod/directive-dict.html#Module> core The TimeOut directive currently defines the amount of time Apache will wait for three things: 1. The total amount of time it takes to receive a GET request. 2. The amount of time between receipt of TCP packets on a POST or PUT request. 3. The amount of time between ACKs on transmissions of TCP packets in responses. We plan on making these separately configurable at some point down the road. The timer used to default to 1200 before 1.2, but has been lowered to 300 which is still far more than necessary in most situations. It is not set any lower by default because there may still be odd places in the code where the timer is not reset when a packet is sent. On Wed, Apr 23, 2025 at 3:07=E2=80=AFPM Mithun Bhattacharya <[email protected]= om> wrote: > You configure timeout at the client side. Apache is at the server side. > Server doesn't have a concept of time it could take days to run and not > care. > > mod_perl code is where you are sending the http return status to make sur= e > the client doesn't timeout waiting for the server to respond. > > On Wed, Apr 23, 2025, 2:19=E2=80=AFPM Joseph He <[email protected]= > wrote: > >> Thanks, all. >> Is that Apache timeout controlled by its configuration "Timeout"? >> I don't think it has anything to do with modPerl. Am I missing something= ? >> Thanks. >> >> On Wed, Apr 23, 2025 at 1:41=E2=80=AFPM Mithun Bhattacharya <mithnb@gmai= l.com> >> wrote: >> >>> Timeout happens because of how we handle the request. Timeout is >>> basically no response came back. Why that happens is because we think w= e >>> want to have a correct response. Unfortunately for long running request= s >>> the correct response shouldn't be via http response code or we face >>> situations like this. Instead reply with a 200 OK immediately and then >>> provide correct status in the message body. Once a response code/header= has >>> been sent timeout won't trigger and you could potentially hold the >>> connection for hours without a problem. >>> >>> On Wed, Apr 23, 2025, 9:32=E2=80=AFAM Andreas Mock <[email protected]= > wrote: >>> >>>> Hi Joseph, >>>> >>>> your description is very vague, so can only answer on some assumptions= : >>>> >>>> It sounds like a timeout is fired somewhere. >>>> >>>> Best advice in these situations: Log as many steps as you can. Keep >>>> your >>>> eyes open on TCP/IP and higher level timeouts. >>>> >>>> Declare only ONE instance responsible for a retry: Either the app >>>> server >>>> calling the dispatcher with several tries or the dispatcher trying for >>>> himself. Not both. >>>> >>>> Best regards >>>> Andreas >>>> >>>> >>>> Am 23.04.2025 um 16:21 schrieb Joseph He: >>>> > All, good day. >>>> > >>>> > Here is the issue I have. >>>> > My entire application is running on ModPerl/Apache environment. >>>> > I send Http::Request with data load from my App server to a dispatch >>>> > server thru LWP::UserAgent, I set the timeout 600 seconds. >>>> > >>>> > The dispatch server is supposed to manipulate the data and send the >>>> > data to an external SFTP server. Because the SFTP can fail, it will >>>> > keep trying up to 4 times with 30 seconds sleep in case that SFTP >>>> > connection fails. >>>> > >>>> > Recently, I found that I uploaded the file twice sometimes. I figure= d >>>> > out the root cause is that my Dispatch server returns 'failure' at 6 >>>> > minutes while it keeps trying to do the SFTP. The App server >>>> > received HTTP::Response with error status so it issued another call >>>> to >>>> > send data. It turns out I uploaded the identified file twice. >>>> > >>>> > Anybody has this sort of experience? Why does the dispatch server >>>> > return 'error' while it still processes the data? >>>> > >>>> > Thanks a lot, >>>> > Joseph >>>> > >>>> >>> --0000000000007ba2930633781669 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <div dir=3D"ltr">On Apache2 doc, I found this. How does this timeout work? = It looks like it can only wait for 300 seconds before failing a request.=C2= =A0<div><br></div><div><a href=3D"https://httpd.apache.org/docs/2.0/mod/cor= e.html#timeout">https://httpd.apache.org/docs/2.0/mod/core.html#timeout</a>= <br><div><table class=3D"gmail-directive" style=3D"font-size:14px;border:1p= x solid rgb(170,170,170);border-collapse:collapse;padding:2px;margin-top:0.= 5em;margin-bottom:1em;color:rgb(0,51,102)"><tbody><tr><th style=3D"empty-ce= lls:show;padding:0.1em 0.2em;vertical-align:top;text-align:left;line-height= :1.3em"><a href=3D"https://httpd.apache.org/docs/2.0/mod/directive-dict.htm= l#Description" style=3D"color:rgb(0,115,199);background-color:inherit">Desc= ription:</a></th><td style=3D"empty-cells:show;padding:0.1em 0.2em;vertical= -align:top;line-height:1.3em">Amount of time the server will wait for certa= in events before failing a request</td></tr><tr><th style=3D"empty-cells:sh= ow;padding:0.1em 0.2em;vertical-align:top;text-align:left;line-height:1.3em= "><a href=3D"https://httpd.apache.org/docs/2.0/mod/directive-dict.html#Synt= ax" style=3D"color:rgb(0,115,199);background-color:inherit">Syntax:</a></th= ><td style=3D"empty-cells:show;padding:0.1em 0.2em;vertical-align:top;line-= height:1.3em"><code style=3D"font-family:"Courier New",Courier,mo= nospace;font-size:1em">TimeOut=C2=A0<var>seconds</var></code></td></tr><tr>= <th style=3D"empty-cells:show;padding:0.1em 0.2em;vertical-align:top;text-a= lign:left;line-height:1.3em"><a href=3D"https://httpd.apache.org/docs/2.0/m= od/directive-dict.html#Default" style=3D"color:rgb(0,115,199);background-co= lor:inherit">Default:</a></th><td style=3D"empty-cells:show;padding:0.1em 0= .2em;vertical-align:top;line-height:1.3em"><code style=3D"font-family:"= ;Courier New",Courier,monospace;font-size:1em">TimeOut 300</code></td>= </tr><tr><th style=3D"empty-cells:show;padding:0.1em 0.2em;vertical-align:t= op;text-align:left;line-height:1.3em"><a href=3D"https://httpd.apache.org/d= ocs/2.0/mod/directive-dict.html#Context" style=3D"color:rgb(0,115,199);back= ground-color:inherit">Context:</a></th><td style=3D"empty-cells:show;paddin= g:0.1em 0.2em;vertical-align:top;line-height:1.3em">server config, virtual = host</td></tr><tr><th style=3D"empty-cells:show;padding:0.1em 0.2em;vertica= l-align:top;text-align:left;line-height:1.3em"><a href=3D"https://httpd.apa= che.org/docs/2.0/mod/directive-dict.html#Status" style=3D"color:rgb(0,115,1= 99);background-color:inherit">Status:</a></th><td style=3D"empty-cells:show= ;padding:0.1em 0.2em;vertical-align:top;line-height:1.3em">Core</td></tr><t= r><th style=3D"empty-cells:show;padding:0.1em 0.2em;vertical-align:top;text= -align:left;line-height:1.3em"><a href=3D"https://httpd.apache.org/docs/2.0= /mod/directive-dict.html#Module" style=3D"color:rgb(0,115,199);background-c= olor:inherit">Module:</a></th><td style=3D"empty-cells:show;padding:0.1em 0= .2em;vertical-align:top;line-height:1.3em">core</td></tr></tbody></table><p= style=3D"line-height:1.3em;margin:0px 0px 1em;padding:0px;color:rgb(0,51,1= 02);font-size:14px">The=C2=A0<code class=3D"gmail-directive" style=3D"font-= family:"Courier New",Courier,monospace;font-size:1em;color:rgb(40= ,127,0);background-color:inherit">TimeOut</code>=C2=A0directive currently d= efines the amount of time Apache will wait for three things:</p><ol style= =3D"color:rgb(0,51,102);font-size:14px"><li style=3D"line-height:1.3em;marg= in-top:0.5em">The total amount of time it takes to receive a GET request.</= li><li style=3D"line-height:1.3em;margin-top:0.5em">The amount of time betw= een receipt of TCP packets on a POST or PUT request.</li><li style=3D"line-= height:1.3em;margin-top:0.5em">The amount of time between ACKs on transmiss= ions of TCP packets in responses.</li></ol><p style=3D"line-height:1.3em;ma= rgin:0px 0px 1em;padding:0px;color:rgb(0,51,102);font-size:14px">We plan on= making these separately configurable at some point down the road. The time= r used to default to 1200 before 1.2, but has been lowered to 300 which is = still far more than necessary in most situations. It is not set any lower b= y default because there may still be odd places in the code where the timer= is not reset when a packet is sent.</p></div></div></div><br><div class=3D= "gmail_quote gmail_quote_container"><div dir=3D"ltr" class=3D"gmail_attr">O= n Wed, Apr 23, 2025 at 3:07=E2=80=AFPM Mithun Bhattacharya <<a href=3D"m= ailto:[email protected]">[email protected]</a>> wrote:<br></div><blockquot= e class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px s= olid rgb(204,204,204);padding-left:1ex"><div dir=3D"auto"><p dir=3D"ltr">Yo= u configure timeout at the client side. Apache is at the server side. Serve= r doesn't have a concept of time it could take days to run and not care= .</p><p dir=3D"ltr">mod_perl code is where you are sending the http return = status to make sure the client doesn't timeout waiting for the server t= o respond.</p></div><br><div class=3D"gmail_quote"><div dir=3D"ltr" class= =3D"gmail_attr">On Wed, Apr 23, 2025, 2:19=E2=80=AFPM Joseph He <<a href= =3D"mailto:[email protected]" target=3D"_blank">joseph.he.2008@gmail= .com</a>> wrote:<br></div><blockquote class=3D"gmail_quote" style=3D"mar= gin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1= ex"><div dir=3D"ltr">Thanks, all.<div>Is that Apache timeout controlled by = its configuration=C2=A0"Timeout"?=C2=A0</div><div>I don't thi= nk it has anything to do with modPerl. Am I=C2=A0missing something?</div><d= iv>Thanks.</div></div><br><div class=3D"gmail_quote"><div dir=3D"ltr" class= =3D"gmail_attr">On Wed, Apr 23, 2025 at 1:41=E2=80=AFPM Mithun Bhattacharya= <<a href=3D"mailto:[email protected]" rel=3D"noreferrer" target=3D"_blan= k">[email protected]</a>> wrote:<br></div><blockquote class=3D"gmail_quot= e" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204)= ;padding-left:1ex"><div dir=3D"auto">Timeout happens because of how we hand= le the request. Timeout is basically no response came back. Why that happen= s is because we think we want to have a correct response. Unfortunately for= long running requests the correct response shouldn't be via http respo= nse code or we face situations like this. Instead reply with a 200 OK immed= iately and then provide correct status in the message body. Once a response= code/header has been sent timeout won't trigger and you could potentia= lly hold the connection for hours without a problem.</div><br><div class=3D= "gmail_quote"><div dir=3D"ltr" class=3D"gmail_attr">On Wed, Apr 23, 2025, 9= :32=E2=80=AFAM Andreas Mock <<a href=3D"mailto:[email protected]" rel= =3D"noreferrer" target=3D"_blank">[email protected]</a>> wrote:<br></d= iv><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;bord= er-left:1px solid rgb(204,204,204);padding-left:1ex">Hi Joseph,<br> <br> your description is very vague, so can only answer on some assumptions:<br> <br> It sounds like a timeout is fired somewhere.<br> <br> Best advice in these situations: Log as many steps as you can. Keep your <b= r> eyes open on TCP/IP and higher level timeouts.<br> <br> Declare only ONE instance responsible for a retry: Either the app server <b= r> calling the dispatcher with several tries or the dispatcher trying for <br> himself. Not both.<br> <br> Best regards<br> Andreas<br> <br> <br> Am 23.04.2025 um 16:21 schrieb Joseph He:<br> > All, good day.<br> ><br> > Here is the issue I have.<br> > My entire application is running on ModPerl/Apache environment.<br> > I send Http::Request with data load from my App server to a dispatch <= br> > server thru LWP::UserAgent, I set the timeout 600 seconds.<br> ><br> > The dispatch server is supposed to manipulate the data and send the <b= r> > data to an external SFTP server. Because the SFTP can fail, it will <b= r> > keep trying up to 4 times with 30 seconds sleep in case that SFTP <br> > connection fails.<br> ><br> > Recently, I found that I uploaded the file twice sometimes. I figured = <br> > out the root cause is that my Dispatch server returns 'failure'= ; at 6 <br> > minutes while it keeps trying to do the SFTP. The App server <br> > received=C2=A0HTTP::Response with error status so it issued another ca= ll to <br> > send data. It turns out I uploaded the identified file twice.<br> ><br> > Anybody has this sort of experience? Why does the dispatch=C2=A0server= <br> > return 'error' while it still processes the data?<br> ><br> > Thanks a lot,<br> > Joseph<br> ><br> </blockquote></div> </blockquote></div> </blockquote></div> </blockquote></div> --0000000000007ba2930633781669--