App Engine 1.3.2 pre

最近,すっかり月一ペースのApp Engineに,1.3.2 pre-releaseがでた.いつもの例に習うと,来週あたりに正式リリースになるのだろう.速いペースで更新されるのはうれしいが,watcherとしては追うのが大変.

Blobstore

1.3.1で追加されたBlobstoreは,大容量のデータをサーブレットを介さずに,アップロード,ダウンロードする仕掛け.これまではサーブレットからは全く触ることができなかったのだけど,範囲を指定して読み出すメソッドが追加された.

具体的には,BlobstoreServiceに

 byte[] 	fetchData(BlobKey blobKey, 
                  long startIndex, 
                  long endIndex)

と言うメソッドが追加されている.一部だけ読み出す形.いまのところ書き込む事はできないようだ.

URLFetch のポート縛りが緩和

これまで,80(http)と443(https)にしか使えなかったものが,他のポートに対しても接続できるようになった.ただし縛りが完全になくなったわけでなく,80-90, 440-450 と1024-65535が許されている.ポート縛りの趣旨は,全然関係ないサービス(たとえばssh 22番とか)にApp Engineを使ってDoSされるとまずい,ってことだったのだと想像している.今回の緩和は,多くの場合httpに用いられる80番台と,httpsに用いられる440番台,ルート権限が無くても使用できる1024番以上は,それほど厳密に考えなくてもイイ,と判断したということだろう.

Mail で添付できるドキュメントが拡張

Mailで添付できるドキュメントには厳しい縛りがあって,たとえば,excel とか wordが使えなかったのだけど,それが緩和される、と言うこと.

Task Queue APIで,一括して複数のタスクを登録できるように.

com.google.appengine.api.labs.taskqueue.Queueに

java.util.List<TaskHandle> 
   add(java.lang.Iterable<TaskOptions> taskOptions);
java.util.List<TaskHandle> 
   add(Transaction txn, 
       java.lang.Iterable<TaskOptions> taskOptions);

これは一度にたくさん登録するときに繰り返しRPCするコストを避けるためだろう.

Datastoreの読み出し時のコンシステンシモデルを指定可能に

これまでは,eventually consistent という比較的弱いモデルのみだったのだが,strongという強いモデルを選択可能に.正直言ってこれがどのくらいインパクトのある話しなのかわかっていない.だれか教えてください.

[追記3/21]まちがい,これまでstrongしかなかったところに,eventually consistentが導入されたらしい.デフォルトはstrong.

Datastoreのデッドラインを指定可能に

Datastoreアクセス時にタイムアウト時間を指定できるようになった.

これらの変更にともなって DatastoreServiceFactoryの初期化方法が変わっていて,DatastoreConfigでなく DatastoreServiceConfigを食わせるようになった.で,そのDatastoreServiceConfigは例によって,Builderとの2段かまえになっていて,deadline やReadPolicyを設定できる.下記は,Javadocにのっていたサンプル.

 import static com.google.appengine.api.datastore.DatastoreServiceConfig.Builder.*;
 import com.google.appengine.api.datastore.ReadPolicy.Consistency;

 ...

 // eventually consistent reads
 DatastoreServiceConfig config = withReadPolicy(new ReadPolicy(Consistency.EVENTUAL));

 // eventually consistent reads with a 5 second deadline
 DatastoreServiceConfig config =
   withReadPolicy(new ReadPolicy(Consistency.EVENTUAL)).deadline(5.0);

タスクキューのリフィルレートの最大値変更

20/s だったものが 50/sになった.

App Stats API

Python にあったものがJavaにも追加,とのこと.javadocを見つけられなかった..どこにあるんだ?

所感

このペースで出されると,いつまで経っても,本が完成しないかもなあ...