1. 23 Oct, 2019 5 commits
    • Geoff Simmons's avatar
      2227bc2c
    • Nils Goroll's avatar
      fix assertion on unexpected vdp order for gzip-in-gunzip case · 490b4cdc
      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,
      
      	...
      490b4cdc
    • Nils Goroll's avatar
      ensure nexus reqs from tree have the esi_level == 0 worker · dd757a31
      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.
      dd757a31
    • Geoff Simmons's avatar
      Back to trunk. · 8d1ec902
      Geoff Simmons authored
      8d1ec902
    • Geoff Simmons's avatar
      Set version 0.2.1, and update RPM packaging. · 1f5b01a1
      Geoff Simmons authored
      Package includes the most recent bugfix, and is compatible with
      Varnish 6.2.1.
      1f5b01a1
  2. 18 Sep, 2019 1 commit
    • Nils Goroll's avatar
      fix assertion failure when our vdp never ran · bb989be1
      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.
      bb989be1
  3. 03 Sep, 2019 2 commits
  4. 08 Aug, 2019 4 commits
  5. 07 Aug, 2019 2 commits
  6. 06 Aug, 2019 3 commits
  7. 05 Aug, 2019 1 commit
    • Nils Goroll's avatar
      fix panic in worklist_set_delivered · 3f1f32f7
      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.
      3f1f32f7
  8. 04 Aug, 2019 16 commits
  9. 02 Aug, 2019 6 commits