首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AppEngine RemoteAPI SocketTimeoutException

AppEngine RemoteAPI SocketTimeoutException
EN

Stack Overflow用户
提问于 2015-12-29 02:41:16
回答 2查看 358关注 0票数 0

我使用RemoteAPI从GAE数据存储中获取实体,每次300个。

我正在做的事情大致如下:

代码语言:javascript
复制
while(!(emails = getEmails()).isEmpty()) {

  Filter filter = new FilterPredicate("email", FilterOperator.IN, emails)
  Query query = new Query("MyEntity").setFilter(filter);
  QueryResultIterable<Entity> result = ds.prepare(query).asQueryResultIterable();

  for (Entity entity : result) {
    System.out.println(entity.getProperty("name"));
  }
}

我在处理50000封电子邮件。当我第一次运行这段代码时,它大概运行了3/4,然后抛出了下面的异常。现在,它在单循环迭代运行后抛出它。

代码语言:javascript
复制
com.google.appengine.tools.remoteapi.RemoteApiException: remote API call: I/O error
at com.google.appengine.tools.remoteapi.RemoteRpc.makeException(RemoteRpc.java:160)
at com.google.appengine.tools.remoteapi.RemoteRpc.callImpl(RemoteRpc.java:104)
at com.google.appengine.tools.remoteapi.RemoteRpc.call(RemoteRpc.java:50)
at com.google.appengine.tools.remoteapi.RemoteDatastore.runQuery(RemoteDatastore.java:156)
at com.google.appengine.tools.remoteapi.RemoteDatastore.handleRunQuery(RemoteDatastore.java:115)
at com.google.appengine.tools.remoteapi.RemoteDatastore.handleDatastoreCall(RemoteDatastore.java:93)
at com.google.appengine.tools.remoteapi.RemoteApiDelegate.makeDefaultSyncCall(RemoteApiDelegate.java:57)
at com.google.appengine.tools.remoteapi.StandaloneRemoteApiDelegate.makeSyncCall(StandaloneRemoteApiDelegate.java:47)
at com.google.appengine.tools.remoteapi.StandaloneRemoteApiDelegate$1.call(StandaloneRemoteApiDelegate.java:58)
at com.google.appengine.tools.remoteapi.StandaloneRemoteApiDelegate$1.call(StandaloneRemoteApiDelegate.java:54)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.net.SocketTimeoutException: Read timed out
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:152)
at java.net.SocketInputStream.read(SocketInputStream.java:122)
at sun.security.ssl.InputRecord.readFully(InputRecord.java:442)
at sun.security.ssl.InputRecord.read(InputRecord.java:480)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:934)
at sun.security.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:891)
at sun.security.ssl.AppInputStream.read(AppInputStream.java:102)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:235)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:275)
at java.io.BufferedInputStream.read(BufferedInputStream.java:334)
at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:690)
at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:633)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1324)
at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:468)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:338)
at com.google.appengine.repackaged.com.google.api.client.http.javanet.NetHttpResponse.<init>(NetHttpResponse.java:37)
at com.google.appengine.repackaged.com.google.api.client.http.javanet.NetHttpRequest.execute(NetHttpRequest.java:94)
at com.google.appengine.repackaged.com.google.api.client.http.HttpRequest.execute(HttpRequest.java:972)
at com.google.appengine.tools.remoteapi.OAuthClient.post(OAuthClient.java:54)
at com.google.appengine.tools.remoteapi.RemoteRpc.callImpl(RemoteRpc.java:102)
... 12 more

我不知道问题出在哪里,但是在抛出异常之前,代码似乎正在计算for()条件。

这会不会是一个配额问题?配额详细信息屏幕没有显示任何问题,并且我在文档中找不到任何相关信息。

EN

回答 2

Stack Overflow用户

发布于 2017-02-12 06:02:34

对于这个问题的未来读者,如果您看到RemoteApiException: remote API call: I/O error的发生是持续的,而不是间歇性的,这可能与网络连接中断有关,也可能与App Engine端的远程问题有关。

如果排除了第一种可能性,最好的行动方案是在Google App Engine issue tracker上报告该问题。

票数 0
EN

Stack Overflow用户

发布于 2017-05-25 17:21:08

要解决此问题,请首先检查您的Internet连接。然后清理所有工件,并通过(使用IntelliJ)重新构建它们:

Build Artifacts...

  • Focus Clean

  • Focus Build

上,通过

  1. 转到Build => Build Artifacts...
  2. Focus on => All Artifacts =>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34498915

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档