------------------------------------------------------------ revno: 13766 revision-id: squid3@treenet.co.nz-20150303144557-vf3fiwfwxxs77x8e parent: squid3@treenet.co.nz-20150303144107-ozdfvq8ytv0crg2x author: Christos Tsantilas committer: Amos Jeffries branch nick: 3.5 timestamp: Tue 2015-03-03 06:45:57 -0800 message: Fake CONNECT exceeds concurrent requests limit. Squid closes the SSL client connection with "Failed to start fake CONNECT request for ssl spliced connection". This happens especially often when the pipeline_prefetch configuration parameter is set to "0" (i.e., default). When a transparent SSL connection is peeked and then spliced in step2, we are generating a fake CONNECT request. The fake CONNECT request is counted as a new pipelined request and may exceed the configured limit. This patch solves this problem by raising the limit for that request. Needs more work to better identify the requests that need a different limit. This is a Measurement Factory project. ------------------------------------------------------------ # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: squid3@treenet.co.nz-20150303144557-vf3fiwfwxxs77x8e # target_branch: http://bzr.squid-cache.org/bzr/squid3/3.5 # testament_sha1: dc9dba3b63affbc8fcafbf273b1e0084bac626e5 # timestamp: 2015-03-03 14:51:06 +0000 # source_branch: http://bzr.squid-cache.org/bzr/squid3/3.5 # base_revision_id: squid3@treenet.co.nz-20150303144107-\ # ozdfvq8ytv0crg2x # # Begin patch === modified file 'src/client_side.cc' --- src/client_side.cc 2015-02-14 22:37:06 +0000 +++ src/client_side.cc 2015-03-03 14:45:57 +0000 @@ -2874,7 +2874,12 @@ // default to the configured pipeline size. // add 1 because the head of pipeline is counted in concurrent requests and not prefetch queue - const int concurrentRequestLimit = pipelinePrefetchMax() + 1; +#if USE_OPENSSL + const int internalRequest = (transparent() && sslBumpMode == Ssl::bumpSplice) ? 1 : 0; +#else + const int internalRequest = 0; +#endif + const int concurrentRequestLimit = pipelinePrefetchMax() + 1 + internalRequest; // when queue filled already we cant add more. if (existingRequestCount >= concurrentRequestLimit) {