<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Jun 26, 2017 at 12:06 PM, Alex Rousskov <span dir="ltr"><<a href="mailto:rousskov@measurement-factory.com" target="_blank">rousskov@measurement-factory.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On 06/26/2017 10:11 AM, Razor Cross wrote:<br>
<br>
> We are using squid 3.5. for our server. Recently we have noticed that<br>
> squid is caching incomplete objects in case of chunked response.<br>
><br>
> We have gone through the squid code. It looks likes squid is caching<br>
> incomplete response in case of EOF from the server even though it does<br>
> not receive the last empty chunk.<br>
><br>
><br>
>  if (eof) // already reached EOF<br>
>         return COMPLETE_NONPERSISTENT_MSG;<br>
<br>
</span>You are looking at the wrong code. HttpStateData::<wbr>persistentConnStatus()<br>
and related *_MSG codes do not determine whether the entire object was<br>
received. They determine whether<br>
<br>
(a) Squid should expect more response bytes and<br>
<br>
(b) The connection can be kept open if no more response bytes are expected.<br>
<br>
The COMPLETE_NONPERSISTENT_MSG return value is correct here (I am<br>
ignoring the sad fact that we are abusing the word "complete" to cover<br>
both whole and truncated responses).<br>
<span class=""><br>
<br>
> Is this expected? Because of this problem, our server ends up serving<br>
> bad objects to the user.<br>
<br>
</span>>What you describe sounds like a bug, but the exact code you are quoting<br>>is not responsible for that bug. I di not study this in detail, but I<br>>suspect that the COMPLETE_NONPERSISTENT_MSG case in<br>>HttpStateData::<wbr>processReplyBody() should be changed to call<br>>StoreEntry::lengthWentBad("<wbr>missing last-chunk") when lastChunk is false<br>> and HttpStateData::flags.chunked is true.<br>
<br></blockquote><div>      We are able to reproduce the issue . If server socket is closed after sending first chunk of data, squid is caching the partial object even though it did not receive the remaining chunks. I feel it has to make sure that lastchunk has received before caching the data.</div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>- Cross
</blockquote></div><br></div></div>