# Change log for Varnish 2.1

## Changes between 2.0.6 and 2.1.0

### 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