Libvmod Querystring Versions Save

Query-string module for Varnish Cache

v2.0.3

2 years ago

I'm pleased to announce a new maintenance release of the 2.0 series, despite being very late to deliver. This new release adds support for the native REGEX type for VCL available since Varnish 6.6.0, letting the VCL compiler deal with the regular expressions setup and teardown.

Changelog:

  • Support for the VCL REGEX type when available
  • Varnish 6.6 support
  • Varnish 7.0 support

Bootstrapped with:

  • autoconf (GNU Autoconf) 2.69
  • automake (GNU automake) 1.16.2
  • libtool (GNU libtool) 2.4.6
  • rst2man (Docutils 0.16 [release], Python 3.9.7, on linux)
  • varnish (varnish-7.0.0 revision 454733b82a3279a1603516b4f0a07f8bad4bcd55)

v2.0.2

3 years ago

I'm pleased to announce a new maintenance release of the 2.0 series. In this one nothing really happened except support for Varnish 6.5 that removed a deprecated function that was used so far. The breakage happened in Varnish's workspace API and the upgrade notes say this:

In general, accessing any field of struct ws is strongly discouraged and if the workspace API doesn't satisfy all your needs please bring that to our attention.

So work was done to follow this guideline and only rely on appropriate functions. No functionality change, only a bit of refactoring to either work with the new goodies from the workspace API or emulate them otherwise. Continuous Integration was upgraded from Ubuntu 16.04 images to Ubuntu 20.04 and that lead to breaking builds of Varnish 6.0.0 and since the 6.0 series already had a couple security releases there's no point on giving up on improved compiler warnings to maintain compatibility with an obsolete version.

I would normally treat a compatibility breakage as a major change, but decided that having a baseline of 6.0.6 instead of 6.0.0 would not mandate a major release of this VMOD. In fact, I probably didn't break anything but I'm no longer committing to compatibility below 6.0.6 and of course non LTS releases of Varnish that are still supported.

Changelog:

  • Varnish minimum version bumped to 6.0.6
  • Varnish 6.5 support

Bootstrapped with:

  • autoconf (GNU Autoconf) 2.69
  • automake (GNU automake) 1.16.1
  • libtool (GNU libtool) 2.4.6
  • rst2man (Docutils 0.15.2 [release], Python 3.8.5, on linux)
  • varnish (varnish-6.5.0 revision b79e940e716474ab5186336db2a86461b32f2413)

v2.0.1

5 years ago

I'm pleased to announce the first maintenance release of the 2.0 series. Indeed, nothing new under the sun, except that support for Varnish 6.2 was verified and should work out of the box.

The main change in this release is that the DPKG packaging is not longer considered experimental, and sbuild support was added as an additional option to build packages.

Other than that, both RPM and DPKG changelogs are no longer maintained to keep matters more simple.

Changelog:

  • Varnish 6.2 support
  • DPKG packaging
  • sbuild support

Bootstrapped with:

  • autoconf (GNU Autoconf) 2.69
  • automake (GNU automake) 1.16.1
  • libtool (GNU libtool) 2.4.6
  • rst2man (Docutils 0.14, Python 3.7.2, on linux)
  • varnishd (varnish-6.2.0 revision b14a3d38dbe918ad50d3838b11aa596f42179b54)

v2.0

5 years ago

I'm pleased to announce the first breaking release since the 1.0 redesign! While the 1.0 series has been a pleasure to work on, proving the redesign to be both more powerful and sustainable, this breaking changed needed to happen. So in retrospect, what's wrong with vmod-querystring 1.0? Nothing actually...

It's just that Varnish 4.1 should reach its End Of Life soon now that 6.0 is the new official LTS, and all of the 5.x series are already unsupported. By only supporting Varnish 6.0 and newer releases, it is now possible to make the URL argument optional too.

Taking the example from the manual:

import querystring;

sub vcl_init {
    new qf = querystring.filter(sort = true);
    qf.add_string("_"); # a timestamp used to bypass caches
    qf.add_glob("utm_*"); # google analytics parameters
    qf.add_regex("sess[0-9]+"); # anti-CSRF token
}

This snippet:

sub vcl_hash {
    hash_data(qf.apply(req.url));
    hash_data(req.http.host);
    return (lookup);
}

Is now equivalent to this one:

sub vcl_hash {
    hash_data(qf.apply());
    hash_data(req.http.host);
    return (lookup);
}

Since most of the time it is client requests that we can't trust, req.url is used when no URL is specified. In a backend subroutine that would be bereq.url instead.

So this release breaks build compatibility against older Varnish releases but doesn't break existing VCL. Instead it can be made more concise in most cases. Upgrading from a 1.0 release to 2.0 should be as simple as upgrading between 1.0 releases.

Changelog:

  • Varnish 6.0+ only support
  • Optional URL arguments

Bootstrapped with:

  • autoconf (GNU Autoconf) 2.69
  • automake (GNU automake) 1.16.1
  • libtool (GNU libtool) 2.4.6
  • rst2man (Docutils 0.14, Python 3.7.1, on linux)
  • varnishd (varnish-6.1.1 revision efc2f6c1536cf2272e471f5cff5f145239b19460)

v1.0.6

5 years ago

This is the first release with new features since the 1.0 release, and likely the last release to support Varnish 4.1!

The new feature is inspired by the uniq(1) command that breaks down its input into lines and folds together consecutive identical lines. So the querystring.filter() constructor now takes an optional uniq argument that defaults to false. Because the uniq(1) command only removes consecutive duplicates, it is often used in conjunction with the sort(1) command to achieve effective uniqueness. So when the order of parameters does not matter, it is possible to combine both sort and uniq options for even more determinism.

Speaking of sorting, this module no longer relies on qsort(3) to reorder query parameters because the POSIX standard makes it clear that it offers no stability guarantees:

If two members compare as equal, their order in the sorted array is unspecified.

With this release it is possible to sort query parameters but maintain the order of parameters with the same name when the order matters for the backend application. Another win for determinism!

Finally, the 1.0.5 release was already compatible with Varnish 6.1, it has been verified and 6.1 is now officially supported.

Changelog:

  • Varnish 6.1 support
  • Removal of duplicate parameters (uniq)
  • Stable sorting algorithm

Bootstrapped with:

  • autoconf (GNU Autoconf) 2.69
  • automake (GNU automake) 1.16.1
  • libtool (GNU libtool) 2.4.6
  • rst2man (Docutils 0.14, Python 3.7.1, on linux)
  • varnishd (varnish-6.1.1 revision efc2f6c1536cf2272e471f5cff5f145239b19460)

v1.0.5

6 years ago

I am pleased to announce the 1.0.5 release of vmod-querystring. One more release with no new feature and only the necessary changes to support Varnish 6. While the Varnish team is working hard on squaring the API and ABI definitions for VMODs, this first step breaks previous assumptions when building modules.

As usual vmod-querystring is committed to build against all supported Varnish versions from a single release. This is still true from Varnish 4.1.3 to 6.0.0 with reasonable work around the Varnish changes in #include order.

Apologies for releasing Varnish 6 support one month after the Varnish 6 release, but there was no time to allocate to this project.

Fixes #38

v1.0.4

6 years ago

One more release adding no new features and fixing no known bugs, except for build system bugs. It was a mistake to rely on the autoconf archive for anything, as the quality is overall much lower than autoconf itself. While revisiting the build system, it was a good occasion to rework how defaults are handled and they should be sane now:

  • plain ./configure from a release archive is enough
  • ./bootstrap sets up anything needed for development

Of course the possibility to override the defaults is still present.

The interesting part of this release is at its core: to deal with a purposeful API breakage in Varnish 5.1 (not technically breaking the ABI) a dirty hack involved disabling a GCC warning. The offending code was refactored and is no longer subject to the breakage at all, with added benefits:

  • single workspace reservation when applying a filter
  • no suspicious "unmark overflow" of workspaces

As such, this module now advertises VRT compatibility, and should not need to be recompiled between minor Varnish updates. It was already safe, now it's officially safe.

Fixes #34 Fixes #36 Fixes #37

v1.0.3

6 years ago

If French is your native language, you may get the joke.

Fixes #33

v1.0.2

7 years ago

This release doesn't add any new features. It doesn't fix any bugs, except packaging bugs.

Debian packaging is still experimental, but thanks to packaging improvements it was tested successfully on Debian Stretch and Sid. For some reason building with pdebuild also worked for Ubuntu Xenial although it shouldn't, but failed for Yakkety and Zesty (whereas I expected it would). What pbuilder found in the repos doesn't seem to match the package database. Something to inspect later, it shouldn't block the release.

RPM packaging was slightly polished.

The main reason for this release is another release: Varnish 5.1.1 from last week. It breaks the API (but not the ABI) of the workspace facility. This release has been tested and builds fine with any Varnish release from 4.1.3 to 5.1.1 and hopefully future versions too.

v1.0.1

7 years ago

This release doesn't add new Varnish features from 1.0, but instead focuses on integration.

From the changelog:

  • Experimental debian packaging
  • Continuous integration with Travis CI
  • Code coverage with Codecov
  • Library path for the test suite

So this is mainly a release that puts nice Travis and Codecov badges in the README, and turnkey DPKG packaging similar to what's been done for RPM: in the build tree or in a chroot using upstream tooling. Thanks to pdebuild/pbuilder I can now easily produce debian unstable debs on my Fedora box.

I hope Debian and Ubuntu users will find this useful, it certainly is for me.