Upgrading to Varnish 6.3

For users of many and/or labeled VCLs

Users of the advanced mechanics behind the vcl.state CLI command (most likely used via varnishadm) should be aware of the following changes, which may require adjustments to (or, more likely, allow for simplifications of) scripts/programs interfacing with varnish:

The VCL auto state has been streamlined. Conceptually, it used to be a variant of the warm state which would automatically cool the vcl. Yet, cooling did not only transition the temperature, but also the state, so auto only worked one way - except that vcl.use or moving a label (by labeling another vcl) would also set auto, so a manual warm/cold setting would get lost.

Now the auto state will remain no matter the actual temperature or labeling, so when a vcl needs to implicitly change temperature (due to being used or being labeled), an auto vcl will remain auto, and a cold / warm vcl will change state, but never become auto implicitly.

For developers and authors of VMODs and API clients

The Python 2 EOL is approaching and our build system now favors Python 3. In the 2020-03-15 release we plan to only support Python 3.

The “vararg” VCL_STRING_LIST type is superseded by the array-based VCL_STRANDS type. The deprecated string list will eventually be removed entirely and VMOD authors are strongly encouraged to convert to strands. VRT functions working with string list arguments now take strands.

More functions such as VRT_Vmod_Init() and VRT_Vmod_Unload() from the VRT namespace moved away to the Varnish Private Interface (VPI). Such functions were never intended for VMODs in the first place.

The functions VRT_ref_vcl() and VRT_rel_vcl() were renamed to respectively VRT_VCL_Prevent_Discard() and VRT_VCL_Allow_Discard().

Some functions taking VCL_IP arguments now take a VRT_CTX in order to fail in the presence of an invalid IP address.

See vrt.h for a list of changes since the 6.2.0 release.

We sometimes use Coccinelle to automate C code refactoring throughout the code base. Our collection of semantic patches may be used by VMOD and API clients authors and are available in the Varnish source tree in the tools/coccinelle/ directory.

The WS_Reserve() function is deprecated and replaced by two functions WS_ReserveAll() and WS_ReserveSize() to avoid ambiguous situations. Its removal is planned for the 2020-09-15 release.

A ws_reserve.cocci semantic patch can help with the transition.