Après avoir utilisé un peu de l'API client java de Couchbase (2.4.1) je suis tombé sur cette exception:Qu'est-ce que l'option Couchbase Environment autoreleaseAfter?
Error in scheduled task java.lang.IllegalStateException:
The Content of this Observable is already released.
Subscribe earlier or tune the CouchbaseEnvironment#autoreleaseAfter() setting.
Je travaillais avec un ViewQuery en mode impératif, il échoue lors de l'obtention des lignes du résultat (ViewResult est correct comme totalRows() et le succès() ont des valeurs belles)
ViewResult result = service.executeViewQuery(...);
List<ViewRow> rows = result.allRows();
efficacement la mise en place autoreleaseAfter résout le problème, mais je ne sais pas s'il est sûr ou juste Esquive le problème.
CouchbaseEnvironment env = DefaultCouchbaseEnvironment
.builder()
.autoreleaseAfter(5000)
.build();
Je suppose que ce mode ne ferme pas la connexion après une requête, il laisse en direct jusqu'à ce que le délai d'attente (5 secondes) est atteint.
Ferme-t-il automatiquement "plus tôt" si l'appel http est terminé (avec Spring MVC)? Il semble que le mode apporte le danger car il peut contenir plus de connexions mais est-ce vraiment important? Enfin, je pense que l'utilisation "correcte" de cette API est de passer par l'API observable de rxjava alors que la plupart de la documentation trouvée ne montre que des exemples impératifs. Le mode autorelease est-il obsolète (et va-t-il devenir obsolète) ou sera-t-il toujours pris en charge dans un proche avenir?
hey benjamin :) peut-il y avoir plus de 2 secondes (délai d'autorelease par défaut) qui s'écoule entre votre code appelant 'executeViewQuery' et la partie où' result.allRows() 'est appelé? –
@ SimonBaslé hey pal! :) En fait, la requête est très rapide et le calcul entre les services ne devrait pas prendre plus de 2 secondes. Déplacer tout mon code dans un seul service Spring résout ce problème (le service effectue la requête et l'analyse) et je n'ai plus besoin d'un délai d'attente plus long. Peut-être appeler toutes les méthodes ViewResult.debug(), ViewResult.totalRows(), ViewResult.error(), ViewResult.success() dans un autre service après client.query (...) provoque ce comportement (fermeture de la connexion au début), je je ne sais pas – zenbeni