2011年12月27日火曜日

Slim3 Source Code Reading #2

今日は、Slim3 Source Code Reading #2を開催してきました。
今回はModel関連でDatastore#putを読み進めました。

読み進めたソースコードは以下のファイルです。

  • Datastore.java
  • DatastoreDelegate.java
  • FutureUtil.java
  • AsyncDatastoreService.java
  • DatastoreUtil.java


以下、その時のメモです。
DatastoreUtil.java 952行目
modelmeta.assignKeyToModelRefIfNecessary(ds, model);

エンティティ間の紐付けを行うための処理を個別に実装する。
(自動生成された時点では、中身は空)
※現時点では紐付けたサンプルコードがないので確認できず。。

ModelMeta.java 518行目
prePut()

データストアに格納する前に何か処理をしたい場合は、個別に実装する。
(自動生成された時点では、中身は空)
多分、postGet()とペアで見せる時とデータの中身が変換されないと
いけないケースが記述する?

DatastoreUtil.java 532行目
assignKeyIfNecessary()
エンティティにキーがなければキーを生成している。
ここで、親エンティティが存在している場合は、親のキーを設定して
紐付けしたキーを生成する。
Idは自動生成。

Datastore.put()で例外が発生した場合、(データストアのPutで例外が発生した時)
どうするの?(例えば、データストアの書き込みタイムアウトなど)

Slim3本のP.212中段にデータストアのリトライをSlim3が行うとなっているが?

DatastoreTimeoutException.javaはSDKに存在しているが、
RuntimeExceptionの扱いになっているのでドキュメントにthrowsの記述がない。

Slim3 1.0.6の時点ではリトライ処理(最大10回)が存在したようだが、
今日のソースコードを読んだ範囲では見つけられなかった。
(どこにもcatchがない?)

------

解散後の話題として@sinmetalさんが、Slim3のリポジトリから過去のソースコードを
取得して確認してくれたのですが、メモにある記事のように10回のリトライの処理は
確かに存在していました。しかし、現時点ではその処理は存在していません。
恐らく、AsyncDatastoreServiceの中(よりネイティブに近い所)でリトライ処理と
等しい事が行われていると予想されます。
(そうでなければ、処理を削除する理由がない)

次回#3は1/10(火)19:00〜の予定で、トランザクションに行く前に、Getを読みすすめます。