【问题标题】:AppEngine RemoteAPI SocketTimeoutExceptionAppEngine RemoteAPI SocketTimeoutException
【发布时间】:2017-05-25 17:21:08
【问题描述】:

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

我正在做一些事情:

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"));
  }
}

我正在处理大约 5 万封电子邮件。我第一次运行这段代码时,它可能运行了 3/4,然后它抛出了以下异常。现在它在运行单个循环迭代后抛出它。

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() 条件。

这可能是配额问题吗?配额详细信息屏幕没有显示任何问题,我在文档中找不到任何相关信息。

【问题讨论】:

  • 我今天尝试运行完全相同的代码,它很简单。我已经执行了多次(试图弄清楚它是否是与配额相关的问题),但我无法重现该问题。我仍然不知道问题是什么。
  • 我很少得到这些,但它们很麻烦。你有没有解决这个问题?如果可能的话,我宁愿抓住这些并重试。
  • 我什么也没做,第二天就成功了。所有配额都远低于限额。不知道那是什么。 :(

标签: google-app-engine google-cloud-datastore


【解决方案1】:

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

如果第一种可能性被排除,最好的做法是在Google App Engine issue tracker 上报告问题。

【讨论】:

    【解决方案2】:

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

    1. 转到Build => Build Artifacts...
    2. 关注All Artifacts => Clean
    3. 关注All Artifacts => Build

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-26
      • 2013-01-16
      • 2018-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多