2010-05-22

DeadlineExceededException と HardDeadlineExceededError

サーブレットの処理が 30 秒で終わらないときに出る
com.google.apphosting.api.DeadlineExceededException
というのは知ってたんだけれど、最近ログに現れた
com.google.apphosting.runtime.HardDeadlineExceededError
というのは一体何?…と思い調べてみた。

すると ajnk1 で話を聞いた bufferings さんのページを発見。 ほほう、30 秒ルールにひっかかって発生した DeadlineExceededException も、catch でつかまえたり、finally でロールバックしたりできるんだ。その処理に 300~400ms 近くかかってしまうと、次は HardDeadlineExceededError が出て有無を言わさず強制終了になってしまう…という理解でいいのかな。

300ms でできる処理って…。まあ何に使うのかわからないけど、一応覚えとこっと。 には、TaskQueue で呼ばれた Task で HardDeadlineExceededError が出た場合には、リトライがされないというような記述も。

としたら、DeadlineExceededException を catch とか、finally でロールバックとか、下手にしない方がいいのかも。

2 comments:

  1. ぶいてくのたけざきです。
    再起動に時間がかかることはありますがExceptionをスローさえしてあげれば必ずリトライされます。(確認済)

    ReplyDelete
  2. コメントいただけるとは思っていませんでした。ありがとうございます。

    > Exceptionをスローさえしてあげれば必ずリトライされます。

    Exception をスローせずに握りつぶしちゃうとリトライされないということですね。
    Exception の catch や finally の処理中にこの Error が出てしまっても、Exception のスローはできるんでしょうか???
    Error や Exception まわりのことをいまいちよく分かっていないのです(汗)。

    ReplyDelete