Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
已超过应用引擎Java blob删除的截止日期_Java_Google App Engine_Blobstore - Fatal编程技术网

已超过应用引擎Java blob删除的截止日期

已超过应用引擎Java blob删除的截止日期,java,google-app-engine,blobstore,Java,Google App Engine,Blobstore,我们有一个相当复杂的appenginejava应用程序,它与blob商店紧密配合。出于某种原因,一个用户(这是为其他用户工作的)的上传代码出现超时错误(这会删除一些旧的blob)。它并没有删除很多blob(不超过10个),所以我不确定发生了什么,但他能够多次重复这个问题,直到问题突然自行解决 我担心的是,它将开始出现在其他用户在未来,我宁愿不清理斑点,而不是有一个失败 我可能会在将来更改我们的架构,只使用后台cron作业来查找没有被任何人引用的blob并将其删除,但是如果有人能够解释这个问题,我

我们有一个相当复杂的appenginejava应用程序,它与blob商店紧密配合。出于某种原因,一个用户(这是为其他用户工作的)的上传代码出现超时错误(这会删除一些旧的blob)。它并没有删除很多blob(不超过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)

您面临的异常是死线异常异常。似乎您已经通过HTTP请求调用了代码,或者可能是在GoogleAppEngine上托管的web应用程序内部调用了代码

所有HTTP请求完成工作并返回的时间限制为60秒。否则,应用程序引擎将引发此异常。简言之,当调用应用程序来服务web请求时,它必须在60秒内发出响应

Cron作业的情况并非如此,它们在接收到
死线超出dexception
之前有10分钟的时间限制

因此,您所面临的行为是正常的,由App Engine控制。我建议您通过将此工作转移到Cron作业来解决此问题,因为:

  • 你将有10分钟的时间完成你的工作
  • 在这种情况下,即使10分钟也不够,您可能希望捕获死线Exceedexception,然后使用一个参数重新创建另一个任务,该参数将指示Cron作业从上次的位置开始

如果以上所有内容都不符合您的标准,请尝试在AppEngine中进行探索,因为它没有任何限制。

也许我没有正确地表达这个问题。我完全理解这个异常(请注意最后我的背景cron作业注释),问题是我所做的只是删除几个blob。为什么要花60多秒?我理解异地数据中心的概念,但应用程序引擎环境不应该对我们隐藏这些东西吗?不确定是什么原因导致执行时间超过60秒?唯一可能的情况是,如果代码仍然在等待某些东西,等等。但是正如您所说的,它有时会工作。对不起,这没什么帮助。也许阿彭金团队的人能给我们点启示。