2010年4月22日木曜日

Google App Engine SDK 1.3.3 リリース

GAEのSDK 1.3.3がリリースされました。リリースノートはこちら

プレリリースの内容がすべて盛り込まれたわけでもない感じ(データストアのID自動採番時に範囲を指定できるメソッドが入っていない)で、いくつかのバグフィックスや細かい修正が主です。いくつかダイジェストで紹介します。

  • アプリケーションIDとバージョンを確認するシステムプロパティの追加

System.getProperty()メソッドでデプロイした際のアプリケーションIDとバージョンをアプリケーションから取得できるようになりました。

プロパティ名を覚えるのが大変なので、SystemPropertyというクラスを使うといいと思います。

import com.google.appengine.api.utils.SystemProperty;
...

String id = SystemProperty.applicationId.get();
String version = SystemProperty.applicationVersion.get();
  • 30秒制限の前に確実にキャッチできるDeadlineExceededExceptionがスローされるようになった

これがスローされなかったことは今まで見たことがないですが、確実にスローされるようにした、というところでしょうか。

  • QuotaService.getCpuTimeInMegaCycles()の修正

これまでは「InMegaCycles」と言いながらメガじゃないCPUサイクル数を返していたようです。

  • トランザクション時に一部の例外を識別できるようになった (?)

CommittedButStillApplyingExceptionという例外が増えています。

App Engineのデータストアでトランザクションを利用してエンティティを書きこむと、Life of a Datastore Writeにある通りCommit, Applyという2つのフェーズが順に行われます。このうち、Applyでエラーが起こった場合にはエンティティは書き込まれているもののインデックスが不整合の状態になります。

これまではCommitで失敗してもApplyで失敗しても同じエラーが返されていましたが、この例外がスローされた場合はエンティティの書き込み自体は成功していることが分かります。インデックスを反映させる(Apply)には、そのエンティティをトランザクション内で読みに行くだけで自動的にロールフォワードという処理が行われます。

この例外がスローされる状況をまだ再現するほど実験していないので、追加情報があれば後日お知らせします。

Java版の更新はだいたい以上です。なお、Python版のSDKは、開発サーバ上のデータストアにバックエンドとしてSQLiteを指定できるようになったようです。

0 件のコメント:

コメントを投稿