facebook/proxygen

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".