# Upgrading to Varnish 7.5

## Logs

The optional reason field of `BackendClose` records changed from a description (for example “Receive timeout”) to a reason tag (for example `RX_TIMEOUT`). This will break VSL queries based on the reason field.

Using a tag should however make queries more reliable:

    # before
    varnishlog -q 'BackendClose ~ "Receive timeout"'

    # after
    varnishlog -q 'BackendClose[4] eq RX_TIMEOUT'

Such queries would no longer break when a description is changed.

## Timeouts

The value zero for timeouts could mean either timing out immediately, never timing out, or not having a value and falling back to another. The semantic changed so zero always means non-blocking, timing out either immediately after checking whether progress is possible, or after a millisecond in parts where this can’t practically be done in a non-blocking fashion.

In order to disable a timeout, that is to say never time out, the value `INFINITY` is used (or tested with `isinf()`).

In the places where a timeout setting may fall back to another value, like VCL variables falling back to parameters, `NAN` is used to convey the lack of timeout setting.

### VCL

All the timeouts backed by parameters can now be unset, meaning that setting the value zero no longer falls back to parameters.

### Parameters

All the timeout parameters that can be disabled are now documented with the `timeout` flag, meaning that they can take the special value `never` for that purpose:

    varnishadm param.set pipe_timeout never

The parameters `idle_send_timeout` and `timeout_idle` are now limited to a maximum of 1 hour.

### VRT

For VMOD authors, it means that the `vtim_dur` type expects `INFINITY` to never time out or `NAN` to not set a timeout.

For VMOD authors managing backends, there is one exception where a timeout fallback did not change from zero to `NAN` in `struct vrt_backend`. The `vtim_dur` fields must take a negative value in order to fall back to the respective parameters due to a limitation in how VCL is compiled.

As a convenience, a new macro `VRT_BACKEND_INIT()` behaves like `INIT_OBJ` but initializes timeouts to a negative value.

VCL COLD events have been fixed for directors vs. VMODs: VDI COLD now comes before VMOD COLD.

### Other changes relevant for VMOD / VEXT authors

Transports are now responsible for calling `VDP_Close()` in all cases.

Storage engines are now responsible for deciding which `fetch_chunksize` to use. When Varnish-Cache does not know the expected object size, it calls the `objgetspace` stevedore function with a zero `sz` argument.

`(struct req).filter_list` has been renamed to `vdp_filter_list`.

eof