The streaming implementation has reached a state now where I believe it should be considered for merging into master. I will post all of the patches to varnish-dev.<div><br></div><div>There are some outstanding points left, outlined below. And also there will be some cache_center.c restructuring coming up, but it should be possible to do that without needing major rewriting of the streaming stuff, and having the code in master when starting on that should be an advantage.</div>
<div><br></div><div>Any comments and inputs much appreciated.</div><div><br></div><div>Outstanding streaming work items:</div><div><br clear="all"><div><div>* Streaming and client 304</div><div><br></div><div>  If we can deliver a 304, we should for the pass-case just drop the</div>
<div>  backend connection (alternately do the bg fetch and throw away the</div><div>  result?). For the non-pass-case we should perform the bg fetch while</div><div>  still delivering a 304 to the client. The decision making will have</div>
<div>  to be influenced by wether we manage to grab a thread or not, and</div><div>  what to do when we don't have a 2nd thread has to be decided.</div><div><br></div><div>  This is best implemented after the vcl changes and cache_center.c</div>
<div>  changes coming from that.</div><div><br></div><div>* Streaming and range</div><div><br></div><div>  Currently ranged delivery isn't performed when doing streaming, full</div><div>  object is always delivered when do_stream is true. This should be</div>
<div>  fixed. Some patches from the 3.0 streaming by Thomas Souvignet has</div><div>  been mailed to varnish-dev. Should be possible to use this as input</div><div>  when adding it to the new streaming implementation.</div>
<div><br></div><div>* Break backend connection when streaming, pass-mode and client goes away</div><div><br></div><div>  If we loose the client while streaming in pass-mode we should</div><div>  probably just drop the backend connection as well.</div>
<div><br></div><div>* Adaptive streaming</div><div><br></div><div>  I don't think it makes sense to do streaming for very small</div><div>  objects. For things less than a kilobyte, by the time we have the</div><div>  2nd thread ready the full object is probably already on the wire and</div>
<div>  it would be faster to just read this in full before delivering the</div><div>  object.</div><div><br></div><div>  This is easy if there is a content-length header, we could just test</div><div>  this against a configurable minimum size. This decision policy</div>
<div>  probably makes the much sense in VCL?</div><div><br></div><div>  For chunked/eof transfer from backend, we can't know the size at</div><div>  decision making time. We could perhaps implement that streaming is</div>
<div>  first started after having received a minimum number of bytes?</div><div><br></div></div>-- <br>Martin Blix Grydeland<br>Varnish Software AS<br><br>
</div>