Changes in Varnish 6.4.0
For information about updating your current Varnish deployment to the
new version, see Upgrading to Varnish 6.4.0.
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.
varnishd
bugs
Numerous bugs have been fixed.
Generic Parameter Handling
Some parameters have dependencies and those are better documented now. For
example thread_pool_min can't be increased above
thread_pool_max, which is now indicated as such in the
manual.
On a running Varnish instance the param.show command will display the
actual minimum or maximum, but an attempt to param.set a parameter above
or below its dynamic maximum or minimum will mention the failure's cause in
the error message:
varnish> param.show thread_pool_reserve
200
thread_pool_reserve
Value is: 0 [threads] (default)
Maximum is: 95
[...]
varnish> param.show thread_pool_min
200
thread_pool_min
Value is: 100 [threads] (default)
Maximum is: 5000
[...]
varnish> param.set thread_pool_reserve 100
106
Must be no more than 95 (95% of thread_pool_min)
(attempting to set param 'thread_pool_reserve' to '100')
Expect further improvements in future releases.
Parameters
- Raised the minimum for the vcl_cooldown parameter
to 1 second.
Changes in behavior
- The if-range header is now handled, allowing clients to conditionally
request a range based on a date or an ETag.
- Output VCC warnings also for VCLs loaded via the varnishd -f
option
Changes to VCL
New syntax for "no backend":
backend dummy none;
sub vcl_recv {
set req.backend_hint = dummy;
}
It can be used whenever a backend is needed for syntactical
reasons. The none backend will fail any attempt to use it.
The other purpose is to avoid the declaration of a dummy backend
when one is not needed: for example an active VCL only passing
requests to other VCLs with the return (vcl(...)) syntax or
setups relying on dynamic backends from a VMOD.
std.rollback(bereq) is now safe to use, see VMOD std - Varnish Standard Module
for details.
Deliberately closing backend requests through return(abandon),
return(fail) or return(error) is no longer accounted as a
fetch failure.
Numerical expressions can now be negative or negated as in
set resp.http.ok = -std.integer("-200");.
The += operator is now available for headers and response bodies:
set resp.http.header += "string";
VCL variables
- Add more vcl control over timeouts with the sess.timeout_linger,
sess.send_timeout and sess.idle_send_timeout variables
corresponding the parameters by the same names.
varnishlog
- A Notice VSL tag has been added.
- Log records can safely have empty fields or fields containing blanks
if they are delimited by "double quotes". This was applied to
SessError and Backend_health.
varnishadm
- New pid command in the Varnish CLI, to get the master and optionally
cache process PIDs, for example from varnishadm.
varnishstat
- Add vi-style CTRL-f / CTRL-b for page down/up to interactive
varnishstat.
- The MAIN.sess_drop counter is gone.
- Added rx_close_idle counter for separate accounting when
sess.timeout_idle / timeout_idle is reached.
- sess.send_timeout / send_timeout being reached
is no longer reported as MAIN.sc_rem_close, but as
MAIN.sc_tx_error.
Changes for developers and VMOD authors
General
- New configure switch: --with-unwind. Alpine linux appears to offer a
libexecinfo implementation that crashes when called by Varnish, this
offers the alternative of using libunwind instead.
- The option varnishtest -W is gone, the same can be achieved with
varnishtest -p debug=+witness. A witness.sh script is available
in the source tree to generate a graphviz dot file and detect potential
lock cycles from the test logs.
- Introduced struct reqtop to hold information on the ESI top request
and PRIV_TOP.
- New or improved Coccinelle semantic patches that may be useful for
VMOD or utilities authors.
- Added VSLs() and VSLbs() functions for logging STRANDS to
VSL.
- Added WS_VSB_new() / WS_VSB_finish() for VSBs on workspaces.
- added v_dont_optimize attribute macro to instruct compilers
(only gcc as of this release) to not optimize a function.
- Added VSB_tofile() to libvarnishapi.
VMODs
- It is now possible for VMOD authors to customize the connection pooling
of a dynamic backend. A hash is now computed to determine uniqueness and
a backend declaration can contribute arbitrary data to influence the pool.
- VRB_Iterate() signature has changed.
- VRT_fail() now also works from director code.
- body_status and req_body_status have been collapsed into one
type. In particular, the REQ_BODY_* enums now have been replaced
with BS_*.
- Added VRT_AllocStrandsWS() as a utility function to allocate
STRANDS on a workspace.
eof