0

BLOBストアと緊密に連携するかなり手の込んだAppEngineJavaアプリケーションがあります。何らかの理由で、あるユーザー(これは他のユーザーのために働いていました)がアップロードコードでタイムアウトエラーを受け取りました(これにより、いくつかの古いブロブが削除されます)。多くのブロブ(10個以下)を削除しないので、何が起こったのかわかりませんが、突然問題が解決するまで、彼はこの問題を何度も一貫して再現することができました...

私の懸念は、将来的に他のユーザーのためにクロップアップし始めることです。失敗するよりもブロブをクリーンアップしたくないのです。

将来的には、バックグラウンドのcronジョブを使用して、誰からも参照されていないBLOBを探して削除するようにアーキテクチャを変更する予定ですが、誰かがこの問題に光を当てることができれば幸いです。

Uncaught exception from servlet
com.google.apphosting.api.DeadlineExceededException: This request (7e6f710cb810ed92) started at 2012/11/27 08:59:54.585 UTC and was still executing at 2012/11/27 09:00:54.028 UTC.
    at sun.misc.Unsafe.park(Native Method)
    at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:226)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedNanos(AbstractQueuedSynchronizer.java:1037)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer.tryAcquireSharedNanos(AbstractQueuedSynchronizer.java:1326)
    at com.google.common.util.concurrent.AbstractFuture$Sync.get(AbstractFuture.java:275)
    at com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:96)
    at com.google.appengine.tools.development.TimedFuture.get(TimedFuture.java:55)
    at com.google.common.util.concurrent.ForwardingFuture.get(ForwardingFuture.java:69)
    at com.google.apphosting.runtime.ApiProxyImpl.doSyncCall(ApiProxyImpl.java:212)
    at com.google.apphosting.runtime.ApiProxyImpl.access$000(ApiProxyImpl.java:66)
    at com.google.apphosting.runtime.ApiProxyImpl$1.run(ApiProxyImpl.java:183)
    at com.google.apphosting.runtime.ApiProxyImpl$1.run(ApiProxyImpl.java:180)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.google.apphosting.runtime.ApiProxyImpl.makeSyncCall(ApiProxyImpl.java:180)
    at com.google.apphosting.runtime.ApiProxyImpl.makeSyncCall(ApiProxyImpl.java:66)
    at com.google.apphosting.api.ApiProxy.makeSyncCall(ApiProxy.java:107)
    at com.google.apphosting.api.ApiProxy.makeSyncCall(ApiProxy.java:56)
    at com.google.appengine.api.blobstore.BlobstoreServiceImpl.delete(BlobstoreServiceImpl.java:125)
4

1 に答える 1

2

あなたが直面している例外はDeadlineExceededException. HTTP リクエストを介して、または Google App Engine でホストされている Web アプリケーション内でコードを呼び出したようです。

すべての HTTP リクエストは、作業を完了して戻るまでに 60 秒に制限されています。そうでない場合、App Engine はこの例外をスローします。つまり、Web 要求を処理するためにアプリケーションが呼び出された場合、アプリケーションは 60 秒以内に応答を発行する必要があります。

これは Cron ジョブには当てはまりません。Cron ジョブもDeadlineExceededException.

したがって、直面している動作は正常であり、App Engine によって制御されます。次の理由から、この作業を Cron ジョブに移動することで、これを回避することをお勧めします。

  • 作業を完了するのに 10 分かかります
  • 10 分でも十分でない場合は、 をキャッチしてDeadlineExceededExceptionから、Cron ジョブが前回の場所から離陸するように指示するパラメーターを使用して別のタスクを再作成することをお勧めします。

上記のいずれも基準を満たさない場合は、制限のない AppEngine のバックエンドを調べてみてください。

于 2012-11-27T10:25:33.087 に答える