.. _whatsnew_changes_7.2: %%%%%%%%%%%%%%%%%%%%%% Changes in Varnish 7.2 %%%%%%%%%%%%%%%%%%%%%% For information about updating your current Varnish deployment to the new version, see :ref:`whatsnew_upgrading_7.2`. A more detailed and technical account of changes in Varnish, with links to issues that have been fixed and pull requests that have been merged, may be found in the `change log`_. .. _change log: https://github.com/varnishcache/varnish-cache/blob/master/doc/changes.rst varnishd ======== Extensions ~~~~~~~~~~ From the very first days of Varnish, we have been talking about having an extension points for "more advanced stuff" and we did, by and large, keep a place ready for it in the overall architecture. Now a credible use-case finally appeared, and we have implemented "Varnish Extensions" (VTLA: "VEXT"), which can both be used to load ambient VMODs and to implement entirely new functionaly, for instance stevedores. See :ref:`ref-vext` in the reference manual for more information. Parameters ~~~~~~~~~~ Duration values (with a unit in seconds) can optionally take a duration unit with the same syntax as VCL. For example, the default values of ``default_ttl``, ``default_grace`` and ``default_keep`` were changed respectively from ``120.000``, ``10.000`` and ``0.000`` to ``2m``, ``10s`` and ``0s``. The platform-dependent ``tcp_keepalive_time`` parameter is supported on MacOS. The new ``vcc_feature`` bits parameter replaces previous ``vcc_*`` boolean parameters. The latter still exist as deprecated aliases. Other changes in varnishd ~~~~~~~~~~~~~~~~~~~~~~~~~ The metadata VMODs exposes to Varnishd has changed to a non-binary format, and it is incompatible with all previous releases. That makes it possible for the VCC (compilation) process to avoid opening the VMODs with ``dlopen(3)``, which is both faster and safer. Background fetch tasks are no longer queued as this could result in slow grace hits subject to indefinite delays when thread pools are saturated. Changes to VCL ============== VCL variables ~~~~~~~~~~~~~ ESI sub-requests can no longer inherit a ``req.http.transfer-encoding`` header since the request body is strictly handled by the top request. The ``resp.http.via`` header generated by Varnish uses ``server.identity`` which defaults to the host name. A ``req.http.via`` header is generated also before entering ``vcl_recv``. If a client request or backend response already had a Via header, it is now appended to instead of overwritten. A ``resp.http.via`` header is no longer overwritten by varnish, but rather appended to. The ``server.identity`` variable is guaranteed to be a single token as defined in the HTTP grammar, to safely be used as either a host name or pseudonym in Via headers. The ``now`` variable remains constant in a VCL subroutine. This was already the case, but is now (pun intended) formally defined behavior. It keeps the same value even if the execution blocks for a significant time, for example while calling a VMOD function. Bundled VMODs ============= For a real time timestamp, the function ``std.now()`` can be used instead. There is also a new ``std.timed_call()`` to measure the execution time of a subroutine. Cookie headers generated by vmod_cookie no longer have a spurious trailing semi-colon (``';'``) at the end of the string. varnishlog ========== The ``Begin`` log records may contain a 4th field with the sub-level of sub-tasks. The ``Begin[4]`` field is used by the ``-E`` option (or lack thereof) in log utilities to include sub-tasks or not. Internally, only ESI tasks are subject to this filtering, but it can apply to tasks spawned by VMODs too. Similarly, the ``Link`` record has the same optional 4th field. .. XXX: any reason against ``varnish{hist,top} -k``? The ``-k`` option from ``varnishlog`` is now available in ``varnishncsa``. varnishstat =========== The unused counter ``MAIN.fetch_no_thread`` was repurposed and renamed to ``MAIN.bgfetch_no_thread`` to signal when background fetch tasks fail to be scheduled because thread pools are saturated. To help estimate the rate of ``vsl_space`` consumption, the new counter ``MAIN.shm_bytes`` was added. It offers a finer-grained metric than the existing ``MAIN.shm_cycles`` that depends on the ``vsl_space`` setting. A new contribution script called ``varnishstatdiff`` can be used to compare the output of two ``varnishstat -1`` executions with a friendly diff format for ``varnishstat``'s specific output. varnishtest =========== New macros ``${pkg_version}`` and ``${pkg_branch}`` expanding respectively to ``7.2.0`` and ``7.2`` for the current release. It is possible to match the text on screen against a regular expression with the new ``process -match`` command. The new ``filewrite [-a]`` command can put or append text into a file. A Varnish instance name in a VTC is used by default as the server identity for predictable Via headers. For example:: varnish v1 -vcl+backend { ... } The expected Via header is:: Via: 1.1 v1 (Varnish/7.2) The instance name can still be set to a different value using the ``-arg`` command to change the ``varnishd -i`` option. Changes for developers and VMOD authors ======================================= The ``varnishtest -i`` option only works from a Varnish source tree, in which case the new macro ``${topsrc}`` is available in addition to the old ``${topbuild}`` macro. The functions ``VRT_AddVDP()``, ``VRT_AddVFP()``, ``VRT_RemoveVDP()`` and ``VRT_RemoveVFP()`` are deprecated. The ``VCS_String()`` function can take the string ``"B"`` for the package branch. The ``vnum.h`` functions are exposed to VMOD and VEXT authors. The termination rules for ``WRK_BgThread()`` were relaxed to allow VMODs to use it. *eof*