Xslateのキャッシュ更新メカニズムの変更

1.5015までのXslateのキャッシュ更新メカニズムでは問題があると報告されたため、1.5016で修正しました。

cache => 1 のとき、従来は render() ごとにテンプレートのキャッシュファイルのmtimeとテンプレートファイルのmtimeを比較してキャッシュの更新が必要かどうかをチェックしていたのでした。しかし、これでは以下の様なシナリオの元でキャッシュ更新ミスが発生しうるのでした*1

  1. foo.tx のmtimeが11:00とする
  2. 12:00 に foo.tx を render() する。このときcacheの mtime は 12:00 となる
  3. foo.tx を更新し、foo.txのmtimeが 12:00 になる
  4. foo.tx を render() すると、cacheはtemplate fileより古くないため、cacheを使う

1.5016では、キャッシュのmtimeをテンプレートファイルと同じに設定することで更新ミスをなくしました。オリジナルのテンプレートファイルを1秒以内に複数更新&deployした場合はキャッシュ更新ミスが発生しますが、現実にはほとんど起こり得ないでしょう。

修正コミットは以下の通りです。

*1:時間の単位は実際にはファイルシステムに依存します。通常は秒単位です