0

Für eine kurze Zeit heute, mein Code in Flexible Environment "compat" mit Google Cloud Datastore API ausgeführt java.net.SocketTimeoutException: Timeout beim Abrufen der URL beim Einfügen eines Elements in Datastore in einem anderen GAE-Projekt.Warum erstellt Datastore beim Abrufen der URL Timeout?

Außerdem konnte Dataflow zu diesem Zeitpunkt keine Elemente einfügen. fast sicher das gleiche Problem.

Dies tritt auch bei einfachen Schlüsselabfragen auf, so dass es kein Problem mit schweren Daten ist.

Davor und danach wurden viele andere Daten korrekt eingefügt; einschließlich einer Wiederholung dieser Daten.

Googling der Fehler schlägt vor, dass es durch Ausfallzeiten in der Google Cloud verursacht werden kann, aber das Google Cloud Status Dashboard grün angezeigt wird.

Was hat das verursacht? Wie können wir es in Zukunft vermeiden?

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 

Antwort

2

Es sieht aus wie UrlFetchTransport verwendet wird, wenn es nicht sein sollte.

Ich habe this issue abgelegt, um die google-cloud-java Bibliothek zu reparieren.

In der Zwischenzeit sollten Sie in der Lage sein, sie zu zwingen, NetHttpTransport zu verwenden, wenn Sie das DatastoreOptions Objekt konstruieren:

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(); 
     } 
    }) 
    ... 
+0

Ich bin mit \t \t \t com.google.cloud \t \t \t gcloud-java-datastore \t \t \t 0.2.8 Aber anscheinend werden diese 2 Maven-Abhängigkeiten stattdessen benötigt. \t \t \t \t com.google.cloud \t \t \t Google-cloud \t \t \t 0.8.0 \t \t ... und ... \t \t \t \t \t com.google.auth \t \t \t google-auth-Bibliothek-oauth2-http \t \t \t 0.6.0 \t \t Ist das richtig? –

+0

Mit diesen Bibliotheken wird der Code kompiliert. Ich habe die veralteten Methoden geändert. (Siehe http://pastebin.com/eZNmYmWw für formatierten Code und StackTrace.) Ich bekomme java.lang.NoSuchMethodError: com.google.datastore.v1.Entity.getPropertiesMap() Ljava/util/Map; bei diesem Code: QueryResults Ergebnisse = Datenspeicher.Run (Abfrage); while (results.hasNext()) {... –

+1

Ist es möglich, dass eine ältere Version des 'datastore-v1-protos' auch auf dem Klassenpfad existiert? Die 'getPropertiesMap()' Methode wurde in '1.2.0' hinzugefügt (wäre also nicht in' 1.0.0' oder '1.0.1' enthalten). –

Verwandte Themen