- 23 Oct, 2019 5 commits
-
-
Geoff Simmons authored
-
Nils Goroll authored
For the case of gzip included in plain response, the esi_level == 1 vdp order was: pesi gunzip pesi_buf V2P(to_parent) Yet we had assertions in place that pesi_buf always immediately follows pesi. The reason was that, for esi_level > 0, we would not push pesi_buf from pesi init but rather from the transport, which was plain wrong: We should delay any additional vdps in order to buffer the least amount of data. Working on this, I also noted that for the generic buffering case, our assertion that pesi_buf is first, might be too strict. Now, any VDPs before the buffer are being closed at esi_level > 1. fixes this panic: Assert error in vped_close_vdp(), vdp_pesi.c line 1182: Condition(vdpe->vdp == vdp) not true. ... Backtrace: 0x43cf3b: /usr/sbin/varnishd() [0x43cf3b] 0x4a01c2: /usr/sbin/varnishd(VAS_Fail+0x42) [0x4a01c2] 0x7f3719306b63: ./vmod_cache/_vmod_pesi.4d9e0603bac2a2e2b2627f7fe90ff1d55d4759545517c869a5571f16636e230e(+0x8b63) [0x7f3719306b63] 0x7f371930a377: ./vmod_cache/_vmod_pesi.4d9e0603bac2a2e2b2627f7fe90ff1d55d4759545517c869a5571f16636e230e(+0xc377) [0x7f371930a377] 0x441eab: /usr/sbin/varnishd(CNT_Request+0x11ab) [0x441eab] 0x7f3719308043: ./vmod_cache/_vmod_pesi.4d9e0603bac2a2e2b2627f7fe90ff1d55d4759545517c869a5571f16636e230e(+0xa043) [0x7f3719308043] 0x45c833: /usr/sbin/varnishd() [0x45c833] 0x45ccf0: /usr/sbin/varnishd() [0x45ccf0] 0x7f37e6d18e65: /lib64/libpthread.so.0(+0x7e65) [0x7f37e6d18e65] 0x7f37e6a4188d: /lib64/libc.so.6(clone+0x6d) [0x7f37e6a4188d] thread = (cache-worker) pthread.attr = { guard = 4096, stack_bottom = 0x7f372c482000, stack_top = 0x7f372c502000, stack_size = 524288, } thr.req = 0x7f3601106020 { vxid = 25559391, transport = PESI_INCLUDE step = R_STP_TRANSMIT, req_body = R_BODY_NONE, restarts = 0, esi_level = 1, ...
-
Nils Goroll authored
We pass on reqs from esi subrequests to the top request for delivery. Doing so we need to give them the top requests's worker such that VDPs requiring it be happy.
-
Geoff Simmons authored
-
Geoff Simmons authored
Package includes the most recent bugfix, and is compatible with Varnish 6.2.1.
-
- 18 Sep, 2019 1 commit
-
-
Nils Goroll authored
When VDP_DeliverObj() was not called, for example for a head request or a return code which implies no response body, bytes_tree->npending == 0 was not true. To avoid additional complications, we code the fact that the root node, if used, is pending into the npending_private field which meant for this purpose, but otherwise only accounts for nodes below it. Yet, this is not implied anywhere, so this use case should be perfectly fine. Also add a test for HEAD requests on an actual ESI object. Note on possible alternatives: I do not think a solution at VDP init time is possible because, after the vmod gets pushed from VCL, the response status could still be changed with effects on whether or not a response body is to be sent (e.g. changed from 200 to 204 after the VDP is pushed). So our only chance is to handle the case when the VDP gets called next after _init, which is just _fini.
-
- 03 Sep, 2019 2 commits
-
-
Geoff Simmons authored
-
Geoff Simmons authored
-
- 08 Aug, 2019 4 commits
-
-
Geoff Simmons authored
-
Geoff Simmons authored
Strict compatibility with Varnish 6.2.0.
-
Geoff Simmons authored
-
Geoff Simmons authored
-
- 07 Aug, 2019 2 commits
-
-
Geoff Simmons authored
To reduce risks concerning portability and compatibility, and to avoid accidentally depending on non-standard features.
-
Nils Goroll authored
-
- 06 Aug, 2019 3 commits
-
-
Geoff Simmons authored
- Use WS_Reserve() instead of WS_ReserveAll(). - Add HSH_Cancel() to the "foreign" code.
-
Geoff Simmons authored
-
Geoff Simmons authored
-
- 05 Aug, 2019 1 commit
-
-
Nils Goroll authored
when we prune the tree, we may the current node containing the link to the next unpending node may get freed, so we need to iterate using the _SAFE variant which saves it.
-
- 04 Aug, 2019 16 commits
-
-
Geoff Simmons authored
-
Nils Goroll authored
-
Nils Goroll authored
the code is correct in varnish-cache, the VDP_bytes(req, VDP_NULL, ...) calls do not return. This reverts commit ff7d20a2.
-
Nils Goroll authored
-
Nils Goroll authored
-
Nils Goroll authored
-
Nils Goroll authored
-
Nils Goroll authored
-
Nils Goroll authored
-
Nils Goroll authored
-
Nils Goroll authored
because the ESI request needs to stay alive until all nodes below have been delivered, now that we got tree pruning, we can take them from the ESI requests workspace. See long comment in src/node.c for more detail and evidence collection for the tuneables.
-
Nils Goroll authored
-
Nils Goroll authored
once a subtree is completely delivered, we do still need the T_NEXUS at the head of the (sub)tree for integrity (linkage to its siblings), but anything below can be completely fini'd and freed.
-
Nils Goroll authored
-
Nils Goroll authored
this is a bad leftover from when we still used ALLOC_JOB/FREE_OBJ for nodes and anyway we must not just free a node which is still linked in an otherwise alive tree
-
Nils Goroll authored
During code restructuring earlier in 77e9559d I overlooked that VTIM_real() may not be declared where debug output is used
-
- 02 Aug, 2019 6 commits
-
-
Nils Goroll authored
-
Nils Goroll authored
solve by moving the accumulation to the destructor
-
Nils Goroll authored
-
Nils Goroll authored
it is in the way of my torture testing and does not smell like something we have caused..
-
Nils Goroll authored
-
Nils Goroll authored
-