スティルハウスの書庫の書庫

はてなダイアリーで書いてた「スティルハウスの書庫」を移転してきました。

DatastoreやMemcacheのAPIコールは、ときどき固まる

例えばDatastore APIで多数のエンティティに読み書きしていると、数100回〜数1000回に1回くらい?(すごくおおざっぱな印象)の割合で延々とブロックされて、

com.google.appengine.api.datastore.DatastoreTimeoutException: Unknown

が出たり、もしくは30秒タイムアウト(DeadlineExceededException)が発生したりします。コードのバグやエンティティの状態とは無関係のようです。出る場所は、たいていPersistenceManagerのmakePersistenceメソッドかcloseメソッドの呼び出しのところ。

またMemcache APIでも、getメソッドのところでブロックされて、タイムアウトすることがしばしば。私のアプリだけ?

呼び出したら即時にエラーになってくれればリカバリのしようがあるけど、ずるずる引きずられて30秒過ぎてしまうので、クライアントにそのままエラーが返ってしまって困ります。

まあこれは、クラウドではよくあることってことでしょうか。

# もしかして、30秒タイムアウトのルールって、これを見越してのことかな?