# Change log for Varnish 2.0

## Changes between 1.1.2 and 2.0

### varnishd

- Only look for sendfile on platforms where we know how to use it, which is FreeBSD for now.

- Make it possible to adjust the shared memory log size and bump the size from 8MB to 80MB.

- Fix up the handling of request bodies to better match what RFC2616 mandates. This makes PUT, DELETE, OPTIONS and TRACE work in addition to POST.

- Change how backends are defined, to a constant structural defintion style. See http://varnish.projects.linpro.no/wiki/VclSyntaxChanges for the details.

- Add directors, which wrap backends. Currently, there's a random director and a round-robin director.

- Add "grace", which is for how long and object will be served, even after it has expired. To use this, both the object's and the request's grace parameter need to be set.

- Manual pages have been updated for new VCL syntax and varnishd options.

- Man pages and other docs have been updated.

- The shared memory log file is now locked in memory, so it should not be paged out to disk.

- We now handle Vary correctly, as well as Expect.

- ESI include support is implemented.

- Make it possible to limit how much memory the malloc uses.

- Solaris is now supported.

- There is now a regsuball function, which works like regsub except it replaces all occurences of the regex, not just the first.

- Backend and director declarations can have a .connect_timeout parameter, which tells us how long to wait for a successful connection.

- It is now possible to select the acceptor to use by changing the acceptor parameter.

- Backends can have probes associated with them, which can be checked with req.backend.health in VCL as well as being handled by directors which do load-balancing.

- Support larger-than-2GB files also on 32 bit hosts. Please note that this does not mean we can support caches bigger than 2GB, it just means logfiles and similar can be bigger.

- In some cases, we would remove the wrong header when we were stripping Content-Transfer-Encoding headers from a request. This has been fixed.

- Backends can have a .max_connections associated with them.

- On Linux, we need to set the dumpable bit on the child if we want core dumps. Make sure it's set.

- Doing purge.hash() with an empty string would cause us to dump core. Fixed so we don't do that any more.

- We ran into a problem with glibc's malloc on Linux where it seemed like it failed to ever give memory back to the OS, causing the system to swap. We have now switched to jemalloc which appears not to have this problem.

- max_restarts was never checked, so we always ended up running out of workspace. Now, vcl_error is called when we reach max_restarts.

### varnishtest

- varnishtest is a tool to do correctness tests of varnishd. The test suite is run by using make check.

### varnishtop

- We now set the field widths dynamically based on the size of the terminal and the name of the longest field.

### varnishstat

- varnishstat -1 now displays the uptime too.

### varnishncsa

- varnishncsa now does fflush after each write. This makes tail -f work correctly, as well as avoiding broken lines in the log file.

- It is possible to get varnishncsa to output the X-Forwarded-For instead of the client IP by passing -f to it.

### Build system

- Various sanity checks have been added to configure, it now complains about no ncurses or if SO_RCVTIMEO or SO_SNDTIMEO are non-functional. It also aborts if there's no working acceptor mechanism

- The C compiler invocation is decided by the configure script and can now be overridden by passing VCC_CC when running configure.