Java 为什么数据存储在获取URL时会产生超时?

Java 为什么数据存储在获取URL时会产生超时?,java,google-app-engine,google-cloud-datastore,app-engine-flexible,Java,Google App Engine,Google Cloud Datastore,App Engine Flexible,今天有一段时间,我在使用Google云数据存储API的灵活环境“compat”中运行的代码遇到了java.net.SocketTimeoutException:在另一个GAE项目中向数据存储插入项时获取URL超时 此外,数据流当时未能插入项;几乎可以肯定同样的问题 这也会发生在简单的键查询上,因此这不是大量数据的问题 在此之前和之后,许多其他数据都被正确插入;包括在此相同数据上重新运行 谷歌搜索该错误表明它可能是由谷歌云的宕机造成的,但谷歌云状态仪表板显示为绿色 这是什么原因?我们将来怎样才能避

今天有一段时间,我在使用Google云数据存储API的灵活环境“compat”中运行的代码遇到了java.net.SocketTimeoutException:在另一个GAE项目中向数据存储插入项时获取URL超时

此外,数据流当时未能插入项;几乎可以肯定同样的问题

这也会发生在简单的键查询上,因此这不是大量数据的问题

在此之前和之后,许多其他数据都被正确插入;包括在此相同数据上重新运行

谷歌搜索该错误表明它可能是由谷歌云的宕机造成的,但谷歌云状态仪表板显示为绿色

这是什么原因?我们将来怎样才能避免呢

com.freightos.backup.datastore.gcloudapi.GCloudApiDSBackup$CopyEntities run: ERROR in CopyEntities(commerceDocs/RFQ) java.lang.RuntimeException: com.google.cloud.datastore.DatastoreException: I/O error at 
com.freightos.backup.datastore.gcloudapi.GCloudApiDSBackup$CopyEntities.retryIfAllowed(GCloudApiDSBackup.java:963) at 
com.freightos.backup.datastore.gcloudapi.GCloudApiDSBackup$CopyEntities.putEntities(GCloudApiDSBackup.java:857) at 
com.freightos.backup.datastore.gcloudapi.GCloudApiDSBackup$CopyEntities.retryIfAllowed(GCloudApiDSBackup.java:959) at 
com.freightos.backup.datastore.gcloudapi.GCloudApiDSBackup$CopyEntities.putEntities(GCloudApiDSBackup.java:857) at 
com.freightos.backup.datastore.gcloudapi.GCloudApiDSBackup$CopyEntities.putEntitiesByParts(GCloudApiDSBackup.java:991) at 
com.freightos.backup.datastore.gcloudapi.GCloudApiDSBackup$CopyEntities.run(GCloudApiDSBackup.java:801) at 
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at 
java.util.concurrent.FutureTask.run(FutureTask.java:266) at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at 
java.lang.Thread.run(Thread.java:745) Caused by: com.google.cloud.datastore.DatastoreException: I/O error at 
com.google.cloud.datastore.spi.DefaultDatastoreRpc.translate(DefaultDatastoreRpc.java:105) at 
com.google.cloud.datastore.spi.DefaultDatastoreRpc.commit(DefaultDatastoreRpc.java:133) at 
com.google.cloud.datastore.DatastoreImpl$4.call(DatastoreImpl.java:390) at 
com.google.cloud.datastore.DatastoreImpl$4.call(DatastoreImpl.java:387) at 
com.google.cloud.RetryHelper.doRetry(RetryHelper.java:179) at 
com.google.cloud.RetryHelper.runWithRetries(RetryHelper.java:244) at 
com.google.cloud.datastore.DatastoreImpl.commit(DatastoreImpl.java:386) at 
com.google.cloud.datastore.DatastoreImpl.commitMutation(DatastoreImpl.java:380) at 
com.google.cloud.datastore.DatastoreImpl.put(DatastoreImpl.java:340) at 
com.freightos.backup.datastore.gcloudapi.GCloudApiDSBackup$CopyEntities.putEntities(GCloudApiDSBackup.java:836) ... 9 more Caused by: com.google.datastore.v1.client.DatastoreException: I/O error, code=UNAVAILABLE at 
com.google.datastore.v1.client.RemoteRpc.makeException(RemoteRpc.java:126) at 
com.google.datastore.v1.client.RemoteRpc.call(RemoteRpc.java:95) at 
com.google.datastore.v1.client.Datastore.commit(Datastore.java:84) at 
com.google.cloud.datastore.spi.DefaultDatastoreRpc.commit(DefaultDatastoreRpc.java:131) ... 17 more Caused by: java.net.SocketTimeoutException: Timeout while fetching URL: https://datastore.googleapis.com/v1/projects/freightos-prod-backup2:commit at 
com.google.appengine.api.urlfetch.URLFetchServiceImpl.convertApplicationException(URLFetchServiceImpl.java:173) at 
com.google.appengine.api.urlfetch.URLFetchServiceImpl.fetch(URLFetchServiceImpl.java:45) at 
com.google.api.client.extensions.appengine.http.UrlFetchRequest.execute(UrlFetchRequest.java:74) at 
com.google.api.client.http.HttpRequest.execute(HttpRequest.java:981) at 
com.google.datastore.v1.client.RemoteRpc.call(RemoteRpc.java:87) ... 19 more

它看起来像是在不应该使用的时候使用了
UrlFetchTransport

我已经申请修复
googlecloudjava

同时,在构建
DatastoreOptions
对象时,您应该能够强制它使用
NetHttpTransport

import com.google.api.client.http.HttpTransport;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.auth.http.HttpTransportFactory;

DatastoreOptions.newBuilder()
    .setHttpTransportFactory(new HttpTransportFactory() {
      @Override
      public HttpTransport create() {
        return new NetHttpTransport();
      }
    })
    ...

它看起来像是在不应该使用的时候使用了
UrlFetchTransport

我已经申请修复
googlecloudjava

同时,在构建
DatastoreOptions
对象时,您应该能够强制它使用
NetHttpTransport

import com.google.api.client.http.HttpTransport;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.auth.http.HttpTransportFactory;

DatastoreOptions.newBuilder()
    .setHttpTransportFactory(new HttpTransportFactory() {
      @Override
      public HttpTransport create() {
        return new NetHttpTransport();
      }
    })
    ...

我正在使用com.google.cloud gcloud java数据存储0.2.8,但显然需要这两个Maven依赖项。com.google.cloud谷歌云0.8.0。。。而且。。。com.google.auth google-auth-library-oauth2-htp0.6.0是否正确?使用这些库,代码可以编译。我更改了不推荐使用的方法。(参见格式化代码nd stacktrace)我得到java.lang.NoSuchMethodError:com.google.datastore.v1.Entity.getPropertiesMap()Ljava/util/Map;此代码为:QueryResults results=datastore.run(query);虽然(results.hasNext()){…是否有可能类路径上也有较旧版本的
datastore-v1-protos
.Datastore正在使用中。在依赖项之间来回移动以避免冲突会导致此错误,从而阻止使用com.google.cloud.dataflow.sdk.transform.DoFn。“无法解析com.google.protobuf.GeneratedMessageV3$Builder类型。它是从必需的.class文件间接引用的。”其中一个库的旧版本似乎仍在类路径上。您可能需要尝试
dependencyManagement
部分来强制使用
com.google.protobuf:protobuf java:jar:3.0.0
。我正在使用com.google.cloud gcloud java数据存储0.2.8,但显然需要这两个Maven依赖项相反,d.com.google.cloud google cloud 0.8.0…和…com.google.auth google-auth-library-oauth2-http 0.6.0是否正确?使用这些库,代码可以编译。我更改了不推荐使用的方法。(有关格式化代码nd stacktrace,请参阅。)我得到java.lang.NoSuchMethodError:com.google.datastore.v1.Entity.getPropertiesMap()Ljava/util/Map;在下面的代码中:QueryResults results=datastore.run(query);while(results.hasNext()){…类路径上是否也有较旧版本的
datastore-v1-protos
方法是在
1.2.0
中添加的(因此在
1.0.0
1.0.1
中不存在)。数据存储正在使用中。为避免冲突而对依赖项进行混洗会导致此错误,从而阻止使用com.google.cloud.dataflow.sdk.transform.DoFn。“无法解析com.google.protobuf.GeneratedMessageV3$Builder类型。它是从必需的.class文件间接引用的“其中一个库的旧版本似乎仍在类路径上。您可能需要尝试
dependencyManagement
部分来强制使用
com.google.protobuf:protobuf java:jar:3.0.0