# Change log for Varnish 2.1.4

## Changes between 2.1.3 and 2.1.4

### varnishd

- An embarrasing typo in the new binary heap layout caused inflated obj/objcore/objhdr counts and could cause odd problems when the LRU expunge mechanism was invoked. This has been fixed.

- We now have updated documentation in the reStructuredText format. Manual pages and reference documentation are both built from this.

- We now include a DNS director which uses DNS for choosing which backend to route requests to. Please see the documentation for more details.

- If you restarted a request, the HTTP header X-Forwarded-For would be updated multiple times. This has been fixed.

- If a VCL contained a % sign, and the vcl.show CLI command was used, varnishd would crash. This has been fixed.

- When doing a pass operation, we would remove the Content-Length, Age and Proxy-Auth headers. We are no longer doing this.

- now has a string representation, making it easier to construct Expires headers in VCL.

- In a high traffic environment, we would sometimes reuse a file descriptor before flushing the logs from a worker thread to the shared log buffer. This would cause confusion in some of the tools. This has been fixed by explicitly flushing the log when a backend connection is closed.

- If the communication between the management and the child process gets out of sync, we have no way to recover. Previously, varnishd would be confused, but we now just kill the child and restart it.

- If the backend closes the connection on us just as we sent a request to it, we retry the request. This should solve some interoperability problems with Apache and the mpm-itk multi processing module.

- varnishd now only provides help output the current CLI session is authenticated for.

- If the backend does not tell us which length indication it is using, we now assume the resource ends EOF at.

- The client director now has a variable client.identity which is used to choose which backend should receive a given request.

- The Solaris port waiter has been updated, and other portability fixes for Solaris.

- There was a corner case in the close-down processing of pipes, this has now been fixed.

- Previously, if we stopped polling a backend which was sick, it never got marked as healthy. This has now been changed.

- It is now possible to specify ports as part of the .host field in VCL.

- The synthetic counters were not locked properly, and so the sms_ counters could underflow. This has now been fixed.

- The value of obj.status as a string in vcl_error would not be correct in all cases. This has been fixed.

- Varnish would try to trim storage segments completely filled when using the malloc stevedore and the object was received chunked encoding. This has been fixed.

- If a buggy backend sends us a Vary header with two colons, we would previously abort. We now rather fix this up and ignore the extra colon.

- req.hash_always_miss and req.hash_ignore_busy has been added, to make preloading or periodically refreshing content work better.

### varnishncsa

- varnishncsa would in some cases be confused by ESI requests and output invalid lines. This has now been fixed.

### varnishlog

- varnishlog now allows -o and -u together.

### varnishtop

- varnishtop would crash on 32 bit architectures. This has been fixed.

### libvarnishapi

- Regex inclusion and exclusion had problems with matching particular parts of the string being matched. This has been fixed.