Varnish Cache Plus 6.0.8r2 Release

Published June 2, 2021.

About the release

This release, contains a long list of new features and many bug fixes.

The new features include the following:

  • A new VMOD accounting has been added. It lets you create namespaces and add counters to each namespace which can track lot of useful statistics on traffic flowing in and out of Varnish.

  • A new VMOD uri has been added. It makes it easy to parse a URI into the five generic components: scheme, authority, path, query and fragment.

  • A new VMOD udo has been added. It unifies several existing directors, (shard, weighted random, fallback) under a common interface with extra features.

  • A new VMOD probe_proxy has been added. It allows users to redirect probes to a new location or enable probes to first pass through VCL.

  • A new VMOD stat has been added. It can be used to expose varnish-counters via a backend, in both JSON and prometheus formats. It is released as a tech preview meaning the output formats are subjects to change in the near future.

  • A new VCL variable, beresp.transit_buffer, has been added. Used for pass transactions, it can be used to control how far ahead the receiver is allowed to be compared to the sender, lowering transient memory usage when serving big objects using pass.

  • The shard director now has weighted backends.

  • The goto VMOD has been improved in several ways. See the Changelog for details on these.

  • VMOD saintmode blacklist methods/functions have been deprecated and replaced by corresponding denylist callables.

  • vmod_saintmode objects now have an extra .denylist() method that can be used anywhere in a backend context.

  • The utils VMOD has gained a new function, base64_encode().

  • The functions xbody.capture() and xbody.regsub() has gained new parameters which limit the number of operations done in a single call. This is useful if you want to inline image data in conjunction with the base64_encode() function.

  • Keys in VMOD kvstore now require less memory.

  • A new experimental feature parameter -p reuseport=on can be used to apply SO_REUSEPORT on all listen sockets. This allows better load distribution across pools.

  • A new experimental parameter -p numa_aware=on can be used to make varnishd more efficient on some systems with more than one NUMA node, depending on their configuration.

Bugs fixed include the following:

  • Several VMOD vmod_goto fixes.

  • Now varnishd will be more efficient when attempting to shutdown.

  • Fixed an issue where directors.round_robin() can sometimes be empty when a single backend is sick.

  • Fixed an issue where a backend fetch can stall after a client has disconnected.

  • Better support for binary data when using xbody.capture().

  • Fixed a rare panic situation in vbf_stp_condfetch().

  • Fixed an issue in directors.shard() where calling reconfigure() on an empty director breaks subsequent shard directors.

  • Fixed a segfault in cookieplus when using regex.

  • HTTP/2 request body handling now buffers data as necessary to avoid head of line blocking on the session socket and long delays in serving streams as a result.

  • Fixed a null pointer dereference in utils.time_format().

  • VMOD vmod_akamai CCU API logging has been brought back.

  • Fixed a problem with VMOD shard and vcl_pipe.

See the change log for a full overview of new features and bug fixes in this and previous versions.

Important information when using synthbackend.mirror() in combination with persisted MSE

The synthbackend.mirror() bug could cause corrupted objects before causing Varnish to crash. When using synthbackend.mirror() together with persisted MSE, these corrupted objects could persist after the crash. If you used synthbackend.mirror() together with persisted MSE before 6.0.8r1, then it is recommended to clear the cache on upgrade to this version, unless you have already done so after the previous release (6.0.8r1).

Important! Third party VMODs need to be recompiled for 6.0.7r1

The ABI for VMODs changed with 6.0.7r1, so every VMOD older than that, needs to be recompiled to work with the new versions. There is no API breakage, so a simple recompile should be sufficient. If you only use VMODs bundled with Varnish Cache Enterprise, you do not have to do anything, as bundled VMODs are always recompiled.