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.
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).
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.