今回は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を読みすすめます。
0 件のコメント:
コメントを投稿