Varnish Cache3.0.1が公開されました。
主にバグ修正かとおもいきや嬉しい機能追加もあります。
僕は英語が苦手で書いてる時点で変更の検証が終わってないので
勘違いしている訳があったら教えて下さい・・・
Objects with grace and keep set were mistakenly seen as candidates for the shortlived storage, but would not be cleaned up quickly, something that manifested as if there was a memory leak. This is now fixed.
Transientストレージにおいてメモリリークのような現象が起きるバグを修正しました。
この件ですね
Varnish3で多くのオブジェクトを持つサイトを運営するときに注意するべきたった一つのこと(Transient storage)
When multiple clients were waiting for an object, all clients would be woken up when an object became available, leading to stuck threads. This has now been fixed
キャッシュされていないオブジェクトを同時に複数のクライアントが取得しようとして、
幾つかのクライアントが待機している場合においてオブジェクトがクライアントに返却できる状態になった場合
全てのクライアントに送信しようとしスタックする問題について修正しました。
A bug in how XML entities were handled with ESI has been fixed
ESIパーサにバグがあったので修正しました。
The documentation has seen numerous updates
ドキュメントを多数修正しています。
varnishncsa is now more stable and has support for showing arbitrary request and response fields
varnichncsaコマンドは更に安定し、フォーマット指定で任意のヘッダを指定できるようになりました
3.0.0で%{XX}iにおいてReferer,Host,X-Forwarded-For,User-agentしか指定できませんでしたが
どれでも行けるようです。
—
チェンジログの方にも気になる修正が幾つかあるので抜粋します
バグ修正
Fix crash in streaming code.
ストリーム利用時にクラッシュする問題を修正しました。
tokyo.vclの時に少し話したストリームがなぜかpanicする件だと思います。
あとで検証しようと思ってます。
If a request was restarted from vcl_miss or vcl_pass it would crash. This has been fixed. Bug #965.
vcl_miss,passでrestartを行うとクラッシュするバグの修正
The hash and client directors would mistakenly retry fetching an object from the same backend unless health probes were enabled. This has been fixed and it will now retry a different backend.
probeが設定されていない場合Hash,Clientディレクターでフェッチ再試行の時に同じバックエンドに対してフェッチすることがあったのを修正
新機能
Add fallback director, as a variant of the round-robin director.
fallback directorが増えました。パラメータの指定はround-robinと同様です。
要は最初の定義のバックエンドに常にアクセスしますが、もしそのバックエンドが落ちた場合
二番目の定義のバックエンドに縮退(フォールバック)します。
二番目も落ちた場合もそれ以降に縮退します。
以下のような定義です
director b3 fallback { { .backend = www1; } { .backend = www2; } // www1がsickの状態の時に使用される { .backend = www3; } // www1とwww2の両方がsickの状態の時に使用される }
ちなみに3.0.0までだとこんな記述で表現できます。
set req.backend = www1; if(!req.backend.healthy){ set req.backend = www2; if(!req.backend.healthy){ set req.backend = www3; } }
一番思い浮かべやすい使い方としてsorryページなどがあるかと思います。
変更
http_resp_hdr_len and http_req_hdr_len were set to too low values leading to clients receiving HTTP 400 Bad Request errors. The limit has been increased and the error code is now HTTP 413 Request entity too large.
ヘッダサイズが設定値(http_resp_hdr_lenとhttp_req_hdr_len)を超えた場合に
HTTP400 BadRequestではなくHTTP413 Request entity too largeを返却するように変更
ログを取得していて413が出た場合で正当なアクセスの場合
該当パラメータのサイズを大きくするといった判断ができるかと思います。
The ABI of vmods are now checked. This will require a rebuild of all vmods against the new version of Varnish.
ABIが変更されたため旧バージョンでビルドされたVMODの再ビルドが必要になります
varnishlog -r now works correctly again and no longer opens the shared log file of the running Varnish.
varnishlogで-rオプションが復活しました