Ingress Error and drain()
mikekliger opened this issue · 3 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 |
Is there any way to allow the connection to stay open under these circumstances?
Furthermore, is there a transactionTimeout callback we can utilize to gather info on the associated HTTP::upstreamSession
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".