varnishd

Persistent storage is now experimentally supported using the `persistent` stevedore. It has the same command line arguments as the file stevedore.

`obj.*` is now called `beresp.*` in `vcl_fetch`, and `obj.*` is now read-only.

The regular expression engine is now PCRE instead of POSIX regular expressions.

`req.*` is now available in `vcl_deliver`.

Add saint mode where we can attempt to grace an object if we don't like the backend response for some reason.

Related, add `saintmode_threshold` which is the threshold for the number of objects to be added to the trouble list before the backend is considered sick.

Add a new hashing method called critbit. This autoscales and should work better on large object workloads than the classic hash. Critbit has been made the default hash algorithm.

When closing connections, we experimented with sending RST to free up load balancers and free up threads more quickly. This caused some problems with NAT routers and so has been reverted for now.

Add thread that checks objects against ban list in order to prevent ban list from growing forever. Note that this needs purges to be written so they don't depend on `req.*`. Enabled by setting `ban_lurker_sleep` to a nonzero value.

The shared memory log file format was limited to maximum 64k simultaneous connections. This is now a 32 bit field which removes this limitation.

Remove obj_workspace, this is now sized automatically.

Rename acceptors to waiters

`vcl_prefetch` has been removed. It was never fully implemented.

Add support for authenticating CLI connections.

Add hash director that chooses which backend to use depending on `req.hash`.

Add client director that chooses which backend to use depending on the client's IP address. Note that this ignores the `X-Forwarded-For` header.

`varnishd` now displays a banner by default when you connect to the CLI.

Increase performance somewhat by moving statistics gathering into a per-worker structure that is regularly flushed to the global stats.

Make sure we store the header and body of object together. This may in some cases improve performance and is needed for persistence.

Remove client-side address accounting. It was never used for anything and presented a performance problem.

Add a timestamp to bans, so you can know how old they are.

Quite a few people got confused over the warning about not being able to lock the shared memory log into RAM, so stop warning about that.

Change the default CLI timeout to 10 seconds.

We previously forced all inserts into the cache to be GET requests. This has been changed to allow POST as well in order to be able to implement purge-on-POST semantics.

The CLI command `stats` now only lists non-zero values.

The CLI command `stats` now only lists non-zero values.

Use `daemon(3)` from `libcompat` on Darwin.

Remove `vcl_discard` as it causes too much complexity and never actually worked particularly well.

Remove `vcl_timeout` as it causes too much complexity and never actually worked particularly well.

Update the documentation so it refers to `sess_workspace`, not `http_workspace`.

Document the `-i` switch to `varnishd` as well as the `server.identity` and `server.hostname` VCL variables.

`purge.hash` is now deprecated and no longer shown in help listings.

When processing ESI, replace the five mandatory XML entities when we encounter them.

Add string representations of time and relative time.

Add locking for `n_vbe_conn` to make it stop underflowing.

When ESI-processing content, check for illegal XML character entities.

Varnish can now connect its CLI to a remote instance when starting up, rather than just being connected to.

It is no longer needed to specify the maximum number of HTTP headers to allow from backends. This is now a run-time parameter.

The `X-Forwarded-For` header is now generated by `vcl_recv` rather than the C code.

It is now possible to not send all CLI traffic to syslog.

It is now possible to not send all CLI traffic to syslog.

In the case of varnish crashing, it now outputs a identifying string with the OS, OS revision, architecture and storage parameters together with the backtrace.

Use exponential backoff when we run out of file descriptors or sessions.

Allow setting backend timeouts to zero.

Count uptime in the shared memory log.

Try to detect the case of two running varnishes with the same shmlog and storage by writing the master and child process ids to the shmlog and refusing to start if they are still running.

Make sure to use EOF mode when serving ESI content to HTTP/1.0 clients.

Make sure we close the connection if it either sends `Connection: close` or it is a HTTP/1.0 backend that does not send `Connection: keep-alive`.

Increase the default session workspace to 64k on 64-bit systems.

Make the `epoll` waiter use level triggering, not edge triggering as edge triggering caused problems on very busy servers.

Handle unforeseen client disconnections better on Solaris.

Make session lingering apply to new sessions, not just reused sessions.

varnishstat

Make use of the new uptime field in the shared memory log rather than synthesizing it from the start time.

varnishlog

Exit at the end of the file when started with `-d`.

varnishadm

`varnishadm` can now have a timeout when trying to connect to the running `varnishd`.

`varnishadm` now knows how to respond to the secret from a secured `varnishd`