Upgrading to Varnish-Cache 8.0¶
This document only lists breaking changes that you should be aware of when upgrading from Varnish-Cache 7.x to 8.0. For a complete list of changes, please refer to the change log or Changes in Varnish-Cache 8.0.
varnishd¶
Unknown HTTP methods handling¶
In previous versions of Varnish, requests with an unknown/unsupported HTTP method were by default piped to the backend. Starting with Varnish 8.0, the default behaviour for such requests is to return a synthetic 501 response and close the connection. Handling of custom HTTP methods can of course still be implemented in your VCL.
Parameter aliases¶
It is no longer possible to set a parameter alias as read only, instead the actual parameter that it refers to should be set directly.
Other changes in varnishd¶
The Content-Length response header is now also sent in response to all
HEAD requests.
Request body read failures now result in a 400 response status.
Bans¶
The default value of the ban_any_variant parameter was changed to 0.
This means that during a lookup, only the matching variants of an object will be
evaluated against the ban list.
As a side effect, variants that are rarely requested may never get a chance to
be tested against req based bans, which can lead to an accumulation of bans
over time. In such cases, it is recommended to set ban_any_variant to a
higher value.
You can also consider using the new obj.last_hit ban variable to evict such
objects.
vmod_std changes¶
The VMOD functions std.real2integer(), std.real2time(),
std.time2integer() and std.time2real() have been removed. They had
been marked deprecated since Varnish Cache release 6.2.0 (2019-03-15).
The plug-in replacements for these functions are:
std.real2integer():std.integer(real=std.round(...), fallback=...)
std.real2time():std.time(real=std.round(...), fallback=...)
std.time2integer():std.integer(time=..., fallback=...)
std.time2real():std.real(time=..., fallback=...)
Upgrade notes for VMOD developers¶
VRT_VSC_Alloc() was renamed to VRT_VSC_Allocv() and a new version of
VRT_VSC_Alloc() that takes a va_list argument was reintroduced. This
makes it consistent with our naming conventions.
struct strands and struct vrt_blob have become mini objects. Both are
usually created through existing VRT functions, but where they are managed
specifically, they should now be initialized / allocated with:
INIT_OBJ(strands, STRANDS_MAGIC)/ALLOC_OBJ(strands, STRANDS_MAGIC)INIT_OBJ(blob, VMOD_BLOB_MAGIC)/ALLOC_OBJ(blob, VMOD_BLOB_MAGIC)
The already deprecated functions VRT_{Add,Remove}_{VDP,VFP} have been
removed from VRT. They had already been replaced by VRT_AddFilter() and
VRT_RemoveFilter().
eof