#appengine DEE〜HDEEまでの約100msではDatastoreへのputはもちろん、TQのaddも間に合わない時があるのに悩まされてます…重たい処理をTQチェーンでシリアルに繋いでるのですが、DEEでエラーリトライで繋げるのが一番確実なのかしら。
2010-06-10 09:27:15@kilvistyle DEEでリトライを入れて、間に合わなかったらHDEEによるTQのリトライでいいと思います。TQのリトライは間隔がだんだん長くなるし避けられるなら避けた方がいいです #appengine
2010-06-10 10:04:22@higayasuo レス感謝です。TQのエラーリトライは間隔が長くなる性質を失念してました…ただ、DEE後にTQをaddした際にHDEEで失敗すると、失敗にもかかわらずTQが登録されることがあるようで二重実行されたりします。これが嫌で先の案に辿り付きました^^;
2010-06-10 10:48:07@kilvistyle TQのaddはtx内で実行すると例外でたのに登録されているということがなくなりますよ #appengine
2010-06-10 10:51:10原理的にはcommit時の失敗に発生します。登録に成功したけどRPCの戻りで失敗したとか RT @higayasuo: @kilvistyle TQのaddはtx内で実行すると例外でたのに登録されているということがなくなりますよ #appengine
2010-06-10 11:03:10.@ashigeru @kilvistyle 確かにcommitの失敗は経験上commit 自体は成功していることが多いですね。Unique tokenを発行してTQのtx内でDSに登録しcommit例外の時に登録されているかチェックする感じかな #appengine
2010-06-10 11:11:05.@higayasuo @kilvistyle 実はよくわかっていないのですが、この辺をうまく使えたら幸せになれそうな: http://tinyurl.com/2bddf3b
2010-06-10 11:14:14@ashigeru @higayasuo 色々助言感謝です!確かに今はDEE後のTQのaddはtxレスでした。が、txを含めてもcommitで失敗することがあり、でもTQのaddには成功していることもある、ということでしょか。するとこの時点でTQ二重登録…ですかね…むぅ。
2010-06-10 12:41:28ashigeruの発言を見て、taskにはnameが振られる事を思い出した。Taskの重複登録については、allocateIds()で採番した値を使ってTasknameをつければどーなんだろ?と思った。
2010-06-10 12:41:31これはTQも積む前にユニークチェックが出来る…のかも!? QT @ashigeru @higayasuo 実はよくわかっていないのですが、この辺をうまく使えたら幸せになれそうな: http://tinyurl.com/2bddf3b #appengine
2010-06-10 12:46:16.@kilvistyle TQに登録するときは必ずユニークなキーを作ってそれをタスクにパラメータで渡し、タスクではキーが既に登録済みなら何もしない。登録されていなければ登録して後続の処理をするというふうに作れば大丈夫です #appengine
2010-06-10 12:48:25後、TLで話題になっているようにタスクに名前をつけることで一つしか登録されないようにできます #appengine
2010-06-10 12:51:12@higayasuo Unique tokenのDS.putとTQのaddを同一txでcommitして例外が出たらtokenの存在確認の件、DEE〜HDEE間の100msでは間に合いそうにないですよね。ですが、参考になりました。重ねてありがとうございます。
2010-06-10 12:53:34@kilvistyle Unique tokenのDS.putとTQのaddを同一txでcommitして例外が出たらtokenの存在確認の件、DEE〜HDEEにやるもんじゃないですよ。文字だけだとわかりづらいですね
2010-06-10 13:02:43今TQでやってること。10万レコードを持つcsvをTQチェーンで登録。最初のリクエストでcsvを丸々DSに保存してTQをadd。TQではDSからcsvを読み出し25秒間orDEE発生までDSにputし続け、次のTQへは処理済みindexを渡して再開、です。 #appengine
2010-06-10 13:05:20先のcsvアップロードTQチェーンの問題は、TQでDS.put中にDEEが発生し、ループを抜けて次のTQをaddした際に稀にHDEEとなる。でも、実際はaddは成功しててTQが二重実行されてしまう、です。ここで困ってましたがいろいろ助言頂き感謝ー(>_<)
2010-06-10 13:51:01