GoogleAppEngine 1.3.1でファイルIOエラー

GoogleAppEngine が 1.3.1になりましたが、特に影響ないなと思っていた矢先、デプロイしてみたら起動できなくなるという不具合に見舞われましたorz
アプリケーションは、slim3 + t2がベースです。

原因としては、これまでなかったディレクトリがデプロイ時に作成されるようになり、そのディレクトリがFile APIで読み込もうとするとセキュリティエラーが起きると言うものです。具体的な例外は、以下のissueを参照。
http://code.google.com/p/etupirka/issues/detail?id=82

どうも、wat/_ah という管理画面要のディレクトリが作成されるようになっています。
etupirkaでは、最初にテンプレートファイルを検索してDatastoreに登録し、TaskQueuで後から「読み込みー解析ーコンパイルーDatastoreに保存」という手順を踏んでいます。
このテンプレートファイルのクロールで、再帰的にファイルを拾っているわけですが、その時に_ahを触って落ちるようになったという事です。

教訓:ファイルにアクセスする場合は、読み込みだけでも、canReadでチェックしておく。
追記:canRead ではダメでした・・・。これでもPermissionErrorなので名前で当てるしかないようです。

        for (File child : dir.listFiles()) {
            if (child.getName().equals("WEB-INF")) continue;
            if (child.getName().equals("_ah")) continue;
            // こんな感じ
       }

GAEはまだベータ版なわけで日々変わっていくことは当たり前ですが、サービスを展開していくとなるとバージョンアップにより予期せぬ事が起きるリスクってのはPaaSでは避けられないのね、と改めて思いました。

追記

ローカルで、war/_ah というディレクトリを作成してしまうと、デプロイできません。
普通はそんなディレクトリは作らないと思いますが・・・・。

Creating staging directory
Scanning for jsp files.
Scanning files on local disk.
Scanned 250 files.
Initiating update.
Cloning 48 static files.
Cloning 230 application files.
Rolling back the update.
java.io.IOException: Error posting to URL: https://appengine.google.com/api/appversion/clonefiles?app_id=etupirka-demo&version=1&
400 Bad Request
Filename cannot contain "." or ".." or start with "-" or "_ah/": _ah/xxx.config

ローカル環境では問題なく動きますが、本番環境との違いはやはりあるので、こまめに確認したいですね。