Vanrish6.2.0がリリースされました。
マイナーバージョンアップにとどまることからわかる通り大きな機能の追加はなく、公式のリリース2019年4月3日メールでも触れられていますが、HTTP/3が見えてきているのでその前段階の改善といったところでしょうか(最近のbugwashでもh3の話題を見かけます)
割と重要なバグ修正や機能改善が含まれています。
開発者向けの仕様変更
インストールやビルドに必要なPythonが2.7から3.4以上に変更されました
今回の公式パッケージの提供が遅れた原因です。
6.2.0のリリース自体は3/15にあったのですが、公式パッケージは3/29まで提供されていませんでした。(で、記事が今頃になったのは書きかけで放置してた感じです・・
なおPython2.7.xは来年EOLになるみたいです。
vmodの仕様変更
対応していないvmodはほぼ間違いなく動作しません。
変更ポイントは多いのですが、多くのvmodで引っかかるのはvccで定義した各種func/eventは必ず先頭にvmod_がつくようになりました。
今までは
$Event event_function
という定義であれば
int v_matchproto_(vmod_event_f)
event_function(VRT_CTX, struct vmod_priv *priv, enum vcl_event_e e)
でよかったのですがこれが
int v_matchproto_(vmod_event_f)
vmod_event_function(VRT_CTX, struct vmod_priv *priv, enum vcl_event_e e)
とする必要があります。
また次に引っかかるのが多そうなのがVCL_BLOBで使う構造体が変わったことです。
今まではvmod_privだったのですが専用のvrt_blob構造体が用意されました。
ほぼrenameで対応できるのでこれも容易だと思います(あとは->privを->blobに変えれば大体動くはず)
VRT_APIが9に変更されてるので
int v_matchproto_(vmod_event_f)
#if VRT_MAJOR_VERSION > 8U
vmod_event_function(VRT_CTX, struct vmod_priv *priv, enum vcl_event_e e)
#else
event_function(VRT_CTX, struct vmod_priv *priv, enum vcl_event_e e)
#endif
こんな感じで両対応も可能です。
VUTの仕様変更
通常の利用者は問題ないと思うのですが、自前で作ったスクリプトとかでVUTをたたいている人はおそらく動かなくなります。
VUT構造体が変更されていますので追随する必要があります。
また、signalのハンドリングも変わっているので気を付ける必要があります。
仕様変更
タイマー系のログ出力はミリ秒精度に統一されました。
ExpKillとExpRearmは元々ナノ秒だったんですがこれがミリ秒に変わりましたが
これを見てる人ほぼいないと思うので影響する人はいないでしょう。
非推奨のパラメータが削除されました。
shm_reclen/vcl_dir/vmod_dirが削除されています。
それぞれvcl_reclen/vcl_path/vmod_pathを利用してください。
パラメータの追加/変更
thread_pool_stackのデフォルトサイズが大きくなりました。
VCLの変更
req.is_hitmiss/req.is_hitpassが追加されました
vcl_hit内でreturn(miss)が削除されました。
そもそも期待通りうごかなかったみたいです
機能追加/改善
起動パラメータのdebugにvcl_keepが追加されました。
VCLをCコードに変換した結果とsoを保存するようになっています
出力は/var/lib/varnish/[instance-name]/[vcl-name]/以下にvgc.cで出ます。
varnishtestを行う際に便利かもしれません。
ban時にttlなどの有効期限での比較が使えるようになりました。
obj.age/ttl/grace/keepは時間の経過とともに変わる値ですがこの値を使ってbanができるようになりました
なので例えば5時間経過しているオブジェクトを消したいといったときは
ban obj.age > 5h
みたいな指定が可能になりました。
パラメータをデフォルトに戻るparam.resetが追加されました(varnishadm/varnish-cli)
varnishadmでのjson出力サポート
6.0.2と6.1.0からサポートするようになったjson出力ですが
6.1.1の記事でも触れた通り実は6.0.2のほうがjson出力に対応しているコマンドが多かったのですが、6.2.0では違いがなくなっています。
また同時にいくつかのコマンドの列幅がターミナルのサイズに合わせて可変長となったので
もしツールなどでcliの結果を処理しているのであればjsonを使うことを検討すべきでしょう。
statの強化
これも6.0.2のみで対応していたstatが6.2.0でも出るようになりました。
lookup処理の改善(#2854)
lookup時のmutexを減らしています。
高RPSな環境では割と効果があると思います。
resp.filtersの追加
6.1.0の際に増えたberesp.filtersのresp版です。
最終的なレスポンスを行う際に使用できるVDP filterの並び替えができるようになりました。
ただ、バグがあるのですぐに使う人もいないと思いますが一旦次バージョンを待ったほうがいいです(masterは修正済み)
vmod_stdの型変換関数の改善
型変換は今までreal->integerの時はreal2integer、time->integerの時はtime2integerと分かれていてめんどくさく、fallbackの指定も必要でしたがこれがすっきりしました。
例えばほしいものがintegerであればこんな形です。
std.integer(real=1.23)
とりあえずduration/bytes/integer/real/timeが用意されており、
以前のreal2integer/real2time/time2integer/time2realは非推奨となり、将来削除されます。
vmod_directorsにlookupが追加されました。
vcl_init/finiで呼び出し可能で、個人的にはいまいち使い道が思いつかないのですが
new l2_cache = directors.hash();
l2_cache.add_backend(cache01, 1.0);
みたいな指定を
new l2_cache = directors.hash();
l2_cache.add_backend(directors.lookup("cache01"), 1.0);
といった感じで書けます。
varnishncsa/varnishlogにratelimitオプション(R)を追加しました。
-R 10/2m
こんな指定が可能です。
varnishstatのリフレッシュレートが変更できるようになりました。
表示中に+/-を入れると0.1秒単位で増減します。
バグ修正
http/2のactive streamのカウント周りのバグが修正されました(#2916,2923)
一つはコントロール用のstream=0をactiveなストリームとしてカウントしてたのでmax_concurrent_streamsの判定が1ずれてたものと
もう一つはストリームのカウントの増減をスレッドの割り当て時・解放時に行っていたので、解放時に後処理してたら次のstream openの要求が来てrefuseするといった感じです。
とりあえずこれでストリームを多く使うようなサイトでも問題なく使えるようになったと思います。