proxygen icon indicating copy to clipboard operation
proxygen copied to clipboard

Ingress Error and drain()

Open mikekliger opened this issue 11 months ago • 2 comments

It is hard to follow, but do we expect an ingress error (purportedly on a transaction) to cause a session to be closed? This is with keep alive headers. We are utilizing proxygen::SessionPool

I am having connection churn issues under heavy load and can see a trail of logs before the session is drained (v =4)

IsReusable prints this, right before SessionHolder calls drain() on the session. I also see an ingress Timeout on this thread around the same time.

HTTPUpstreamSession.cpp:28] isReusable: proto=http/1.1, local=1redacted redacted=upstream, liveTransactions_=0, isClosing()=0, sock_->connecting()=0, codec_->isReusable()=1, codec_->isBusy()=1, numActiveWrites_=0, writeTimeout_.isScheduled()=0, ingressError_=1, hasMoreWrites()=0, codec_->supportsParallelRequests()=0 |  

mikekliger avatar Mar 18 '24 14:03 mikekliger

Is there any way to allow the connection to stay open under these circumstances?

mikekliger avatar Mar 18 '24 14:03 mikekliger

Furthermore, is there a transactionTimeout callback we can utilize to gather info on the associated HTTP::upstreamSession

mikekliger avatar Mar 18 '24 16:03 mikekliger

Apologies this issue did not get an earlier response:

It sounds like the session is hitting the idle timeout, causing it to drain. You can set the idle timeout larger, or I believe setting it to 0 will disable idle timeout completely.

If there is an active transaction that is awaiting ingress (eg a client waiting for more of the response) and the transaction timeout fires, the handler is notified of the error via an HTTPException with ProxygenError set to "kErrorTimeout".

afrind avatar Sep 18 '24 20:09 afrind