<div dir="ltr"><span style="font-size:12.8px">Hi,</span><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">Mi name is Juan, I am a Software Engineer from Uruguay. <span style="font-size:small">I think this message is more suited to the squid-dev mailing list due to the developer-oriented nature of the message but, given that the development list is for people who actually contributes code to Squid, I chose to post here.</span></div><div style="font-size:12.8px"><span style="font-size:small"><br></span></div><div style="font-size:12.8px"><span style="font-size:12.8px">I started using Squid a few days ago in order to test its content-adaptation capabilities. The plan was to test the ICAP implementation first and then maybe try the eCAP API as well.</span><span style="font-size:small"><br></span></div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">In order to test ICAP, I based my code in the open source PYICAP project, I also ran some tests using the C-ICAP server.</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">It came to my attention that, even when persistent connections is enabled, Squid closes the ICAP connection everytime a new request arrives, like this:</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">1. A new request arrives</div><div style="font-size:12.8px">2. Squid creates a connection to the ICAP server</div><div style="font-size:12.8px">3. Content is adapted and returned to the client</div><div style="font-size:12.8px">4. Squid returns the connection to the connection pool</div><div style="font-size:12.8px">5. A new requests arrives</div><div style="font-size:12.8px">6. Squid closes the active connection</div><div style="font-size:12.8px">7. Squid opens a new connection to the ICAP server</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">Note: I am using only the RESPMOD method.</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">This tests was performed using Squid 3.5.x. <span style="font-size:12.8px">I downloaded the last available tarball (squid-4.0.19), and run the same test, which gave the same results.</span></div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">So I started digging into the source code and found something interesting:</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">File:</div><div style="font-size:12.8px">    /src/adaptation/icap/<wbr>ServiceRep.cc</div><div style="font-size:12.8px">Function: </div><div style="font-size:12.8px">    Adaptation::Icap::ServiceRep::<wbr>getConnection(bool retriableXact, bool &reused)</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">Code:</div><div style="font-size:12.8px"><div>    if (retriableXact)</div><div>        connection = theIdleConns->pop();</div><div>    else {</div><div>        theIdleConns->closeN(1);</div><div>    }</div></div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">The connection is taken from the set of idle connections  ONLY if retriableXact is set to true.</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">File:</div><div style="font-size:12.8px">    /src/adaptation/icap/Xaction.<wbr>cc</div><div style="font-size:12.8px">Function:</div><div style="font-size:12.8px">    Adaptation::Icap::Xaction::<wbr>openConnection()</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">Xaction uses the member variable 'isRetriable' as parameter for ServiceRep::getConnection.</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">The function Xaction::disableRetries() is called from a lot of places, but in my test case was called only two times (per request):</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">   1. In the function Adaptation::Icap::<wbr>Xaction::noteCommRead, when Comm::ReadNow returns Comm::OK.</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">   2. In the function Adaptation::Icap::<wbr>Xaction::closeConnection, because reuseConnection is set to true.</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">I am not sure if Xaction objects are reusable, it seems that they are because setting isRetriable to false is affecting the way connections are reused.</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">Anyway, I think the concept of retriability shuld not be confused with the concept of reusability, but I haven't gone deep enough in order to ensure that.</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">I appreciate your comments on this. Don't hesitate to contact me should a<span style="font-size:12.8px">ny additional information</span><span style="font-size:12.8px"> be needed.</span></div><div><br></div><div><br></div>-- <br><div class="gmail_signature"><div dir="ltr"><div>Juan</div><div>:wq</div><div><br></div></div></div>
</div>