0

J'utilise la configuration jetty9-compat + java8 et reçois l'exception suivante. Probablement à cause de cela je ne suis pas capable de stocker des objets en session, donc à la fin je ne peux pas me connecter à mon service.Erreur GAE Flexible Environment Service dans memcache

[INFO] cze 28, 2016 11:17:56 AM com.google.apphosting.vmruntime.VmMetadataCache getMetadata 
[INFO] 
[INFO] INFO: Meta-data 'attributes/gae_affinity' path retrieval error: metadata 
[INFO] 
[INFO] cze 28, 2016 11:17:56 AM com.google.apphosting.vmruntime.VmApiProxyDelegate runSyncCall 
[INFO] 
[INFO] INFO: HTTP ApiProxy I/O error for memcache.Get: The target server failed to respond 
[INFO] 
[INFO] cze 28, 2016 11:17:56 AM com.google.appengine.api.memcache.LogAndContinueErrorHandler handleServiceError 
[INFO] 
[INFO] INFO: Service error in memcache 
[INFO] 
[INFO] com.google.appengine.api.memcache.MemcacheServiceException: RCP Failure for API call: memcache Get 
[INFO] 
[INFO] at com.google.apphosting.vmruntime.VmApiProxyDelegate.constructApiException(VmApiProxyDelegate.java:232) 
[INFO] 
[INFO] at com.google.apphosting.vmruntime.VmApiProxyDelegate.runSyncCall(VmApiProxyDelegate.java:195) 
[INFO] 
[INFO] at com.google.apphosting.vmruntime.VmApiProxyDelegate.makeApiCall(VmApiProxyDelegate.java:154) 
[INFO] 
[INFO] at com.google.apphosting.vmruntime.VmApiProxyDelegate.access$000(VmApiProxyDelegate.java:60) 
[INFO] 
[INFO] at com.google.apphosting.vmruntime.VmApiProxyDelegate$MakeSyncCall.call(VmApiProxyDelegate.java:436) 
[INFO] 
[INFO] at com.google.apphosting.vmruntime.VmApiProxyDelegate$MakeSyncCall.call(VmApiProxyDelegate.java:412) 
[INFO] 
[INFO] at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
[INFO] 
[INFO] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
[INFO] 
[INFO] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
[INFO] 
[INFO] at java.lang.Thread.run(Thread.java:745) 
[INFO] 
[INFO] 
[INFO] 
[INFO] DEBUG 2016-06-28 11:17:56,493 api_server.py:277] Handled datastore_v3.Get in 0.0000 
[INFO] cze 28, 2016 11:17:59 AM com.mysql.jdbc.log.Slf4JLogger logInfo 

Répondre

1

Ce numéro est reproduit que localement, je fais face aussi. Je suppose qu'il est causé par une configuration incorrecte de memcached locale qui est exécutée par le serveur de dev.

Je vais essayer d'expliquer mon point. Dans mon cas, la première demande est toujours réussie. Parce que dans le cas d'une première requête, Apache HttpClient ouvre une nouvelle connexion et la place dans le pool. Il y a le code source https://github.com/GoogleCloudPlatform/appengine-java-vm-runtime/blob/master/appengine-managed-runtime/src/main/java/com/google/apphosting/vmruntime/VmApiProxyDelegate.java

Toutes les demandes supplémentaires sont également réussies si elles sont exécutées avec un intervalle de 10 secondes maximum. Mais s'il n'y a pas eu de demande dans les 10 secondes, la requête suivante échoue. Cela arrive parce que le service memcached ferme la connexion de son côté, mais HttpClient ne le sait pas.

Dans VmApiProxyDelegate HttpClient est configuré pour fermer les connexions inactives au bout de 60 secondes. Donc, si j'attends plus d'une minute au lieu de 10 secondes, ma prochaine requête n'échoue pas. Parce que dans ce cas, HttpClient ouvre une nouvelle connexion qui n'est pas encore fermée.

Pour éviter ce problème, il serait correct de configurer le délai de connexion d'un côté stub memcached. Mais la documentation indique que vos demandes à memcached peuvent échouer et vous devez gérer ces erreurs. Donc, je vous propose d'ajouter un gestionnaire d'erreur et un mécanisme de réessayer.

Bien sûr, tout ce qui précède correspond à votre cas, si tout est ok dans votre configuration. En tenant compte du fait que vous n'avez pas fourni des exemples de configuration et de code, je suppose qu'il ya tout est ok.