DeadlineExceedException発生時のリトライについて

0
kilvis @kilvistyle

#appengine DEE〜HDEEまでの約100msではDatastoreへのputはもちろん、TQのaddも間に合わない時があるのに悩まされてます…重たい処理をTQチェーンでシリアルに繋いでるのですが、DEEでエラーリトライで繋げるのが一番確実なのかしら。

2010-06-10 09:27:15
Yasuo Higa@ISID @yasuo_higa

@kilvistyle DEEでリトライを入れて、間に合わなかったらHDEEによるTQのリトライでいいと思います。TQのリトライは間隔がだんだん長くなるし避けられるなら避けた方がいいです #appengine

2010-06-10 10:04:22
kilvis @kilvistyle

@higayasuo レス感謝です。TQのエラーリトライは間隔が長くなる性質を失念してました…ただ、DEE後にTQをaddした際にHDEEで失敗すると、失敗にもかかわらずTQが登録されることがあるようで二重実行されたりします。これが嫌で先の案に辿り付きました^^;

2010-06-10 10:48:07
kilvis @kilvistyle

@higayasuo やはり、多重実行も想定した完璧なべき等を実装しかないようですね、ありがとうございました。

2010-06-10 10:49:21
Yasuo Higa@ISID @yasuo_higa

@kilvistyle TQのaddはtx内で実行すると例外でたのに登録されているということがなくなりますよ #appengine

2010-06-10 10:51:10
Suguru ARAKAWA @ashigeru

原理的にはcommit時の失敗に発生します。登録に成功したけどRPCの戻りで失敗したとか RT @higayasuo: @kilvistyle TQのaddはtx内で実行すると例外でたのに登録されているということがなくなりますよ #appengine

2010-06-10 11:03:10
Yasuo Higa@ISID @yasuo_higa

.@ashigeru @kilvistyle 確かにcommitの失敗は経験上commit 自体は成功していることが多いですね。Unique tokenを発行してTQのtx内でDSに登録しcommit例外の時に登録されているかチェックする感じかな #appengine

2010-06-10 11:11:05
Suguru ARAKAWA @ashigeru

.@higayasuo @kilvistyle 実はよくわかっていないのですが、この辺をうまく使えたら幸せになれそうな: http://tinyurl.com/2bddf3b

2010-06-10 11:14:14
kilvis @kilvistyle

@ashigeru @higayasuo 色々助言感謝です!確かに今はDEE後のTQのaddはtxレスでした。が、txを含めてもcommitで失敗することがあり、でもTQのaddには成功していることもある、ということでしょか。するとこの時点でTQ二重登録…ですかね…むぅ。

2010-06-10 12:41:28
shin1ogawa @shin1ogawa

ashigeruの発言を見て、taskにはnameが振られる事を思い出した。Taskの重複登録については、allocateIds()で採番した値を使ってTasknameをつければどーなんだろ?と思った。

2010-06-10 12:41:31
kilvis @kilvistyle

これはTQも積む前にユニークチェックが出来る…のかも!? QT @ashigeru @higayasuo 実はよくわかっていないのですが、この辺をうまく使えたら幸せになれそうな: http://tinyurl.com/2bddf3b #appengine

2010-06-10 12:46:16
Yasuo Higa@ISID @yasuo_higa

.@kilvistyle TQに登録するときは必ずユニークなキーを作ってそれをタスクにパラメータで渡し、タスクではキーが既に登録済みなら何もしない。登録されていなければ登録して後続の処理をするというふうに作れば大丈夫です #appengine

2010-06-10 12:48:25
Yasuo Higa@ISID @yasuo_higa

後、TLで話題になっているようにタスクに名前をつけることで一つしか登録されないようにできます #appengine

2010-06-10 12:51:12
kilvis @kilvistyle

@higayasuo Unique tokenのDS.putとTQのaddを同一txでcommitして例外が出たらtokenの存在確認の件、DEE〜HDEE間の100msでは間に合いそうにないですよね。ですが、参考になりました。重ねてありがとうございます。

2010-06-10 12:53:34
Yasuo Higa@ISID @yasuo_higa

@kilvistyle Unique tokenのDS.putとTQのaddを同一txでcommitして例外が出たらtokenの存在確認の件、DEE〜HDEEにやるもんじゃないですよ。文字だけだとわかりづらいですね

2010-06-10 13:02:43
kilvis @kilvistyle

今TQでやってること。10万レコードを持つcsvをTQチェーンで登録。最初のリクエストでcsvを丸々DSに保存してTQをadd。TQではDSからcsvを読み出し25秒間orDEE発生までDSにputし続け、次のTQへは処理済みindexを渡して再開、です。 #appengine

2010-06-10 13:05:20
kilvis @kilvistyle

先のcsvアップロードTQチェーンの問題は、TQでDS.put中にDEEが発生し、ループを抜けて次のTQをaddした際に稀にHDEEとなる。でも、実際はaddは成功しててTQが二重実行されてしまう、です。ここで困ってましたがいろいろ助言頂き感謝ー(>_<)

2010-06-10 13:51:01