Re: Apache server returns early before process is complete
Mithun Bhattacharya <[email protected]> Wed, 23 Apr 2025 15:06:44 -0500
| Newsgroups | gmane.comp.apache.mod-perl |
|---|---|
| Message-ID | <CAHTPV9LKBaHkZ90Kh_ggTAhRwU82P7s62bh9qn2_FbmSYkdg6Q@mail.gmail.com> |
--000000000000945df8063377a416 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable 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 sure 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@gmail= .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 we >> want to have a correct response. Unfortunately for long running requests >> 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 you= r >>> eyes open on TCP/IP and higher level timeouts. >>> >>> Declare only ONE instance responsible for a retry: Either the app serve= r >>> 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 figured >>> > 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 t= o >>> > 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 >>> > >>> >> --000000000000945df8063377a416 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <div dir=3D"auto"><p dir=3D"ltr">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.</p><p dir=3D"ltr">mod_perl code is whe= re you are sending the http return status to make sure the client doesn'= ;t timeout waiting for the server to respond.</p></div><br><div class=3D"gm= ail_quote gmail_quote_container"><div dir=3D"ltr" class=3D"gmail_attr">On W= ed, Apr 23, 2025, 2:19=E2=80=AFPM Joseph He <<a href=3D"mailto:joseph.he= [email protected]">[email protected]</a>> wrote:<br></div><blockquo= te class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px = solid rgb(204,204,204);padding-left:1ex"><div dir=3D"ltr">Thanks, all.<div>= Is that Apache timeout controlled by its configuration=C2=A0"Timeout&q= uot;?=C2=A0</div><div>I don't think it has anything to do with modPerl.= Am I=C2=A0missing something?</div><div>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:mithnb@gmail.= com" target=3D"_blank" rel=3D"noreferrer">[email protected]</a>> wrote:<b= r></div><blockquote class=3D"gmail_quote" 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 handle the request. Timeout is basically= no response came back. Why that happens is because we think we want to hav= e a correct response. Unfortunately for long running requests the correct r= esponse shouldn't be via http response code or we face situations like = this. Instead reply with a 200 OK immediately and then provide correct stat= us in the message body. Once a response code/header has been sent timeout w= on't trigger and you could potentially hold the connection for hours wi= thout 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 h= ref=3D"mailto:[email protected]" target=3D"_blank" rel=3D"noreferrer">and= [email protected]</a>> wrote:<br></div><blockquote class=3D"gmail_quote" = style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);pa= dding-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> --000000000000945df8063377a416--