1. 12 May, 2020 6 commits
    • Martin Blix Grydeland's avatar
      Add a SLT_Notice VSL tag · 812ede3e
      Martin Blix Grydeland authored
      This VSL tag will be used for informational messages related to
      exceptional handling of requests.
      
      Conflicts:
          doc/sphinx/reference/vsl.rst
      812ede3e
    • Martin Blix Grydeland's avatar
      Log using SLT_Notice on condfetch streaming delay · ca507177
      Martin Blix Grydeland authored
      Log a notice message when delaying a conditional fetch and the stale
      template object is still streaming.
      
      Conflicts:
          bin/varnishd/cache/cache_fetch.c
          doc/sphinx/reference/vsl.rst
      ca507177
    • Martin Blix Grydeland's avatar
      Keep Age information on passes · bdbe85cf
      Martin Blix Grydeland authored
      When doing a pass, we would remove the Age header from the backend, and
      create a new one based on the time the fetch was initiated. This creates
      problems when calculating the time to live in downstream caches (browser
      cache or layered varnishes).
      
      With this patch, the RFC_2616_Ttl calculation routine is run also for
      passes, where the t_origin field of the object is adjusted for an incoming
      Age header. This makes sure that the Age header generated during delivery
      is correct. The rest of the Ttl calculation is skipped for passes,
      including the logging of SLT_TTL "RFC".
      
      Fixes: varnishcache/varnish-cache#3221
      bdbe85cf
    • Martin Blix Grydeland's avatar
      Use rfc2616_time() to parse Age headers · 3bc22d40
      Martin Blix Grydeland authored
      One time element function to rule and parse them all.
      3bc22d40
    • Martin Blix Grydeland's avatar
      Fixup private rfc2616_time function · cd7ec513
      Martin Blix Grydeland authored
      Change the return value to unsigned, to match with the expected data type
      where it is used.
      
      Handle very large numbers consistently. Currently it was converting from
      unsigned long to int, which would throw away the most significant
      bits. Now overly large integers will be capped at UINT_MAX.
      
      Implement the "allow and ignore decimal point" behaviour that the Age
      header parsing incorporated in rfc2616_time(). This way we will allow a
      decimal points also in max-age and stale-while-revalidate parsing of
      Cache-Control directives.
      cd7ec513
    • Dridi Boukelmoune's avatar
      Expose the master and worker PIDs via the CLI · f7854267
      Dridi Boukelmoune authored
      The change in u00011.vtc is the result of having two commands starting
      with "pi", breaking auto-completion. Fortunately "pin\t" still does the
      trick.
      f7854267
  2. 31 Jan, 2020 19 commits
    • Martin Blix Grydeland's avatar
      Prepare for 6.0.6 · 29a1a824
      Martin Blix Grydeland authored
      29a1a824
    • Martin Blix Grydeland's avatar
      Changelog for Varnish LTS 6.0.6 · dfb6a1c9
      Martin Blix Grydeland authored
      dfb6a1c9
    • Martin Blix Grydeland's avatar
      Take sizeof pool_task into account when reserving WS in SES_Wait · e703aa1a
      Martin Blix Grydeland authored
      The assert on WS_ReserveSize() in ses_handle() can not trip because
      sizeof (struct pool_task) is less than sizeof (struct waited). But to safe
      guard against future problems if that were to change, this patch makes
      sure that the session workspace can hold the largest of them before
      entering the waiter, erroring out if not.
      e703aa1a
    • Martin Blix Grydeland's avatar
      Fix WS_ReserveSize calls when bytes is equal to free workspace · ff4e6926
      Martin Blix Grydeland authored
      Currently, with the 505b7bd9 patch, when
      calling WS_ReserveSize with bytes equal to the amount of workspace that is
      currently available, it will return zero and mark overflow.
      
      This patch redoes the patch, and changes it to return zero and overflow
      only when the requested number of bytes is larger than what is available.
      ff4e6926
    • Dridi Boukelmoune's avatar
      Assert · c18b3baa
      Dridi Boukelmoune authored
      (cherry picked from commit 7da6220d)
      c18b3baa
    • Martin Blix Grydeland's avatar
      Handle badly formatted proxy TLVs · ce025dca
      Martin Blix Grydeland authored
      Proxy TLVs claiming to have PP2_TYPE_SSL sub-TLVs without complete payload
      would cause a Varnish assert. This patch fixes the parsing of the TLVs.
      ce025dca
    • Martin Blix Grydeland's avatar
      Remove call to SES_Reserve_proto_priv in h2_init_sess · 8164a366
      Martin Blix Grydeland authored
      h2_init_sess can only be reached through H1 with either previous knowledge
      or opportunistic upgrade. Because of this the proto_priv session attribute
      will always be set before entry. This patch simplifies and removes dead
      code containing a call to SES_Reserve_proto_priv.
      
      Note: Better diff with the --ignore-all-space option
      8164a366
    • Martin Blix Grydeland's avatar
      Remove extra call to SES_Reserve_proto_priv · 1e3e6e2c
      Martin Blix Grydeland authored
      In h2_init_sess, an extra call was always made to SES_Reseve_proto_priv(),
      even though it was already reserved. This wasted a pointer worth of
      session workspace. This patch removes the extra call.
      1e3e6e2c
    • Martin Blix Grydeland's avatar
      Handle out of session workspace in http1_new_session() · 6848eb7d
      Martin Blix Grydeland authored
      If proxy protocol is in use, it is possible to fill the session workspace
      exactly before entering http1_new_session(), which will cause it to assert
      when calling SES_Reserve_proto_priv().
      
      with this patch we will close the session gracefully.
      6848eb7d
    • Nils Goroll's avatar
      more tweaking for 32bit vtest machines · 435c19a2
      Nils Goroll authored
      Ref varnishcache/varnish-cache#3145 / 287dc4a6
      
      (cherry picked from commit d6dec031)
      435c19a2
    • Nils Goroll's avatar
      Try to make the proxy code session workspace overflow test on 32bit · 69483e43
      Nils Goroll authored
      Ref varnishcache/varnish-cache#3145 / 287dc4a6
      
      (cherry picked from commit e1a57eb7)
      69483e43
    • Emmanuel Hocdet's avatar
      Simplify WS allocation in tlv_string · 88348095
      Emmanuel Hocdet authored
      Patch by @ehocdet, commit message edited by @nigoroll:
      
      The root cause of #3131 was misdiagnosed to the extent that, while this
      change had prevented it, the root cause was a bug in WS_ReserveSize()
      fixed in 505b7bd9
      
      The previous tlv_string() code was correct except for the
      fact that error handling should have checked for WS_ReserveSize(ctx->ws,
      len+1) <= len (also spotted by @ehocdet).
      
      Someone had mentioned at some point that we would not want to VRT_fail(),
      but I think this must have been related to the proxy transport code, not
      the proxy vmod.
      
      Ref varnishcache/varnish-cache#3131
      
      (cherry picked from commit e74f9e87)
      88348095
    • Nils Goroll's avatar
      Add Session Attribute workspace overflow handling · efaa633c
      Nils Goroll authored
      Notes:
      
      * for the acceptor, I think it makes sense to keep AN assertion (pun!)
        because varnish is not viable if the session workspace is too small
        to even hold the attributes initialized in the acceptor.
      
        If this was an issue, we should rather revisit the minimum values for
        the session workspace
      
      * for h1 and h2 session setup, I have used XXXAN() because I am not sure
        how we should best handle allocation failures.
      
      * The relevant bit, for now, is the proxy code which may allocate
        arbitrarily long TLV attributes, so this is the code for which we now
        actually handle errors and test that we do
      
      On the vtc: I added the test to o00005.vtc because there existed a
      previous overflow test from 267504b8,
      but that only tested for the one case of a WS overflow which was already
      handled.
      
      Fixes varnishcache/varnish-cache#3145
      
      (cherry picked from commit 287dc4a6)
      efaa633c
    • Nils Goroll's avatar
      fix copy-pasta vtc description · 752d360a
      Nils Goroll authored
      (cherry picked from commit 815331b3)
      752d360a
    • Nils Goroll's avatar
      WS_ReserveSize() must not hold a reservation for zero return value · c3fa617d
      Nils Goroll authored
      This originates from a3d47c25, but
      was overlooked in 4e333597:
      
      When there is insufficient space to fulfil the reservation request, we
      must not leave the workspace reserved.
      
      Fixes varnishcache/varnish-cache#3131
      
      (cherry picked from commit 505b7bd9)
      c3fa617d
    • Nils Goroll's avatar
      add a facility to test WS_ReserveSize() · 95c9fc6f
      Nils Goroll authored
      (cherry picked from commit ed3b095c)
      95c9fc6f
    • Nils Goroll's avatar
      Deprecate WS_Reserve() and replace it with WS_ReserveSize() · 534e045e
      Nils Goroll authored
      WS_ReserveSize() does not leave the workspace reserved when the
      reservation fails, so WS_Release() must be called for retval > 0 only.
      
      Besides the debug string, it is identical to WS_Reserve() except for
      
      	assert(bytes > 0);
      
      Follow-up varnishcache/varnish-cache#2967
      
      Note: The WS_Reserve() function has not been deprecated as that can
      potentially create problems for the build process of VMODs.
      
      (cherry picked from commit 4e333597)
      534e045e
    • Nils Goroll's avatar
      Add a v_* attribute for deprecated functions · fa3c8df3
      Nils Goroll authored
      This works with gcc 6.3.0 and clang 3.8.1-24
      
      The test for __GNUC__ is deliberately simple and might not catch all
      compilers which would potentially support deprecation marks. While more
      specifics could be added, the aim is to raise awareness with developers
      and we consider it quite unlikely that anyone does not compile with one
      of the main stream compilers at all.
      
      (cherry picked from commit 1594037c)
      fa3c8df3
    • Nils Goroll's avatar
      Add WS_ReserveAll() to replace WS_Reserve(ws, 0) · 2081eeb6
      Nils Goroll authored
      ... to un-confuse the interface
      
      Notes on changes from WS_Reserve():
      
      * Removed the first WS_Assert because all we change is ws->r and we got
        a specific assert on it.
      
      * it follows from PAOK(ws->e) && PAOK(ws->f) in WS_Assert() that
        PAOK(ws->r) && PAOK(b), so we remove the PRNDDN()
      
      Ref: varnishcache/varnish-cache#2967
      
      (cherry picked from commit d001cdd2)
      2081eeb6
  3. 20 Dec, 2019 1 commit
  4. 19 Dec, 2019 7 commits
    • Andrew Wiik's avatar
    • Andrew Wiik's avatar
      a8606b8e
    • Martin Blix Grydeland's avatar
      Correct the probe heap comparison function · 8bf63a88
      Martin Blix Grydeland authored
      Fix the probe scheduler heap comparison function to be consistent with
      regard to different running state of the two arguments. With this fix,
      probes that are not running will always bubble to the top before those
      that are already running.
      8bf63a88
    • Dridi Boukelmoune's avatar
      Make sure to use none backends in generated C code · ef20272c
      Dridi Boukelmoune authored
      Otherwise you might run into this:
      
          Message from VCC-compiler:
          Unused backend nil, defined:
          ('<vcl.inline>' Line 4 Pos 17)
                  backend nil none;
          ----------------###------
      
          (That was just a warning)
          Message from C-compiler:
          vgc.c:1476:20: error: unused variable 'vgc_backend_nil' [-Werror,-Wunused-variable]
          static VCL_BACKEND vgc_backend_nil;
                             ^
          1 error generated.
          Running C-compiler failed, exited with 1
          VCL compilation failed
      
      This is done in both init and discard code to maintain the balance.
      ef20272c
    • Nils Goroll's avatar
      no implicit warmup for manual temperature control · e8e4d489
      Nils Goroll authored
      As discussed during bugwash, we should be consistent about the manual
      temperature controls and not transition cold->warm, but rather fail.
      e8e4d489
    • Nils Goroll's avatar
      change semantics of the vcl 'auto' state and centralize vcl mgt · ae00a9c1
      Nils Goroll authored
      Conceptually, the auto state was a variant of the warm state which
      would automatically cool the vcl. Yet, cooling did not only transition
      the temperature, but also the state, so 'auto' only worked one way -
      except that vcl.use or moving a label (by labeling another vcl) would
      also set 'auto', so a manual warm/cold setting would get lost.
      
      Now the auto-state will remain no matter the actual temperature or
      labeling, so when a vcl needs to implicitly change temperature (due to
      being used or being labeled), an auto vcl will remain auto, and a
      cold/warm vcl will change state, but never become 'auto' implicitly.
      
      The vcl state/temperature test v00003.vtc, besides testing the new
      auto semantics, now also checks for the right vcl.list output and has
      been reduced by a duplicate check (warm event check has been
      integrated into an existing warm event).
      
      On other code changes:
      
      * mgt_vcl_setstate
      
        is now only concerned with the state, the temperature will be
        changed implicitly if so required. The state will either end up
        changed or restored, depending on success.
      
        owner of changes to the (struct vclprog).state member
      
      * mgt_vcl_settemp
      
        responsible for the right action to change the temperature. For auto,
        it will only change the temperature, for non-auto, also the state.
      
        owner of changes to the (struct vclprog).warm member
      
      * mgt_vcl_tellchild
      
        Inform the child about a change and/or temperature change
      
      * mgt_vcl_set_cooldown
      
        Update the cooldown (go_cold) appropriately, should be called after
        a change/temperature change.
      
      Fixes #2834
      Closes #2801
      
      Conflicts:
      	bin/varnishtest/tests/v00003.vtc
      ae00a9c1
    • Poul-Henning Kamp's avatar
      Make it explicit that vcl.discard are not allowed to fail in · 161a783b
      Poul-Henning Kamp authored
      the child process.
      
      Inspired by: #2471
      161a783b
  5. 18 Dec, 2019 4 commits
  6. 12 Dec, 2019 1 commit
  7. 11 Dec, 2019 2 commits