georchestra / cadastrapp

Cadastre application for geOrchestra
GNU General Public License v3.0
10 stars 19 forks source link

Enrober les message d'erreur en provenance de GeoServer (était "latence accès au service WFS...") #258

Open MaelREBOUX opened 7 years ago

MaelREBOUX commented 7 years ago

Un utilisateur nous remonte un message d'erreur sur l'add-on après avoir fait une recherche par référence parcelle : java.lang.RuntimeException: java.io.IOException java.io.IOExceptionAn I/O error occured while sending to the backend. Connection reset

Mais dessous la parcelle apparaît bien listée. Sauf que si on veut zoomer dessus : on obtient le message d'information "Impossible de retrouver la géometrie, veuillez en sélectionner au moins une. Si c'est déjà le cas, ceci peut être dû à une incomplétude du fichier EDIGEO." qui indique qu'il ne trouve pas d'objet WFS et suppose (mal ici) que la parcelle graphique n'existe pas.

En regardant la requête de l'addon : https://portail-test.sig.rennesmetropole.fr/geoserver/wfs?_dc=1473329807383&request=getfeature&version=1.0.0&service=wfs&typename=ref_cad%3Aapp_cadastrapp_parcelle&outputFormat=application%2Fjson&cql_filter=id_parc%3D%27350047000AS0310%27

On obtient bien une erreur sur le GeoServer :

<ServiceExceptionReport version="1.2.0" xsi:schemaLocation="http://www.opengis.net/ogc http://schemas.opengis.net/wfs/1.0.0/OGC-exception.xsd"><ServiceException>
      java.lang.RuntimeException: java.io.IOException
java.io.IOExceptionAn I/O error occured while sending to the backend.
Connection reset
</ServiceException></ServiceExceptionReport>

j'en déduis que le GeoServer n'arrive pas à founir l'objet / la couche en WFS. Maintenant : quelle peut être la cause de ça ? Latence accès à la base ?

landryb commented 7 years ago

La réponse est (comme toujours) probablement dans ton log geoserver...

MaelREBOUX commented 7 years ago

tu es un dieu @landryb

2016-09-08 12:16:04,146 INFO [geoserver.wfs] - 
Request: getServiceInfo
2016-09-08 12:16:04,162 INFO [geoserver.wfs] - 
Request: getFeature
    service = wfs
    version = 1.0.0
    baseUrl = https://testgeorchestra.mutu.local:8443/geoserver/
    query[0]:
        filter = [ id_parc = 350047000AS0310 ]
        typeName[0] = {https://portail.sig.rennesmetropole.fr/ref_cad}app_cadastrapp_parcelle
    outputFormat = application/json
    resultType = results
2016-09-08 12:16:04,163 INFO [wfs.json] - about to encode JSON
2016-09-08 12:16:04,178 WARN [geotools.jdbc] - Error occurred closing connection
2016-09-08 12:16:04,178 ERROR [geoserver.ows] - 
java.lang.RuntimeException: java.io.IOException
    at org.geotools.data.store.ContentFeatureCollection.size(ContentFeatureCollection.java:259)
    at org.geotools.feature.collection.DecoratingSimpleFeatureCollection.size(DecoratingSimpleFeatureCollection.java:113)
    at org.geotools.data.crs.ReprojectFeatureResults.size(ReprojectFeatureResults.java:124)
    at org.geoserver.wfs.CountExecutor.getCount(CountExecutor.java:45)
    at org.geoserver.wfs.GetFeature$1.loadObject(GetFeature.java:636)
    at $java.math.BigInteger$$EnhancerByCGLIB$$f5e5b2f.CGLIB$LOAD_PRIVATE_0(<generated>)
    at $java.math.BigInteger$$EnhancerByCGLIB$$f5e5b2f.longValue(<generated>)
    at org.geoserver.wfs.json.GeoJSONGetFeatureResponse.write(GeoJSONGetFeatureResponse.java:116)
    at org.geoserver.wfs.WFSGetFeatureOutputFormat.write(WFSGetFeatureOutputFormat.java:196)
    at org.geoserver.ows.Dispatcher.response(Dispatcher.java:996)
    at org.geoserver.ows.Dispatcher.handleRequestInternal(Dispatcher.java:279)
    at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153)
    at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.geoserver.filters.ThreadLocalsCleanupFilter.doFilter(ThreadLocalsCleanupFilter.java:28)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.geoserver.filters.SpringDelegatingFilter$Chain.doFilter(SpringDelegatingFilter.java:75)
    at org.geoserver.wms.animate.AnimatorFilter.doFilter(AnimatorFilter.java:71)
    at org.geoserver.filters.SpringDelegatingFilter$Chain.doFilter(SpringDelegatingFilter.java:71)
    at org.geoserver.filters.SpringDelegatingFilter.doFilter(SpringDelegatingFilter.java:46)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.geoserver.platform.AdvancedDispatchFilter.doFilter(AdvancedDispatchFilter.java:50)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:311)
    at org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:69)
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:116)
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)
    at org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:73)
    at org.geoserver.security.filter.GeoServerCompositeFilter.doFilter(GeoServerCompositeFilter.java:92)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
    at org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:69)
    at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)
    at org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:73)
    at org.geoserver.security.filter.GeoServerCompositeFilter.doFilter(GeoServerCompositeFilter.java:92)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
    at org.geoserver.security.filter.GeoServerAnonymousAuthenticationFilter.doFilter(GeoServerAnonymousAuthenticationFilter.java:54)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
    at org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:69)
    at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:150)
    at org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:73)
    at org.geoserver.security.filter.GeoServerCompositeFilter.doFilter(GeoServerCompositeFilter.java:92)
    at org.geoserver.security.filter.GeoServerBasicAuthenticationFilter.doFilter(GeoServerBasicAuthenticationFilter.java:83)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
    at org.geoserver.security.filter.GeoServerPreAuthenticationFilter.doFilter(GeoServerPreAuthenticationFilter.java:75)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
    at org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:69)
    at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87)
    at org.geoserver.security.filter.GeoServerSecurityContextPersistenceFilter$1.doFilter(GeoServerSecurityContextPersistenceFilter.java:53)
    at org.geoserver.security.filter.GeoServerCompositeFilter$NestedFilterChain.doFilter(GeoServerCompositeFilter.java:73)
    at org.geoserver.security.filter.GeoServerCompositeFilter.doFilter(GeoServerCompositeFilter.java:92)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
    at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:173)
    at org.geoserver.security.GeoServerSecurityFilterChainProxy.doFilter(GeoServerSecurityFilterChainProxy.java:135)
    at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
    at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.geoserver.filters.LoggingFilter.doFilter(LoggingFilter.java:87)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.geoserver.filters.GZIPFilter.doFilter(GZIPFilter.java:42)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.geoserver.filters.SessionDebugFilter.doFilter(SessionDebugFilter.java:48)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.geoserver.filters.FlushSafeFilter.doFilter(FlushSafeFilter.java:44)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:612)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:503)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.io.IOException
    at org.geotools.jdbc.JDBCDataStore.getAggregateValue(JDBCDataStore.java:1469)
    at org.geotools.jdbc.JDBCDataStore.getCount(JDBCDataStore.java:1389)
    at org.geotools.jdbc.JDBCFeatureSource.getCountInternal(JDBCFeatureSource.java:465)
    at org.geotools.data.store.ContentFeatureSource.getCount(ContentFeatureSource.java:485)
    at org.geotools.jdbc.JDBCFeatureStore.getCountInternal(JDBCFeatureStore.java:183)
    at org.geotools.data.store.ContentFeatureSource.getCount(ContentFeatureSource.java:485)
    at org.geotools.data.store.ContentFeatureCollection.size(ContentFeatureCollection.java:236)
    ... 92 more
Caused by: org.postgresql.util.PSQLException: An I/O error occured while sending to the backend.
    at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:283)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:512)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:374)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:254)
    at org.apache.commons.dbcp.DelegatingStatement.executeQuery(DelegatingStatement.java:209)
    at org.apache.commons.dbcp.DelegatingStatement.executeQuery(DelegatingStatement.java:209)
    at org.geotools.jdbc.JDBCDataStore.getAggregateValue(JDBCDataStore.java:1449)
    ... 98 more
Caused by: java.net.SocketException: Connection reset
    at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:118)
    at java.net.SocketOutputStream.write(SocketOutputStream.java:159)
    at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82)
    at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140)
    at org.postgresql.core.PGStream.flush(PGStream.java:523)
    at org.postgresql.core.v3.QueryExecutorImpl.sendSync(QueryExecutorImpl.java:1143)
    at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:256)
    ... 104 more
landryb commented 7 years ago

A voir si c'est le serveur pgsql qui est saturé - voir ses logs, eventuellement le nb de connections maximum qu'il accepte, etc...

MaelREBOUX commented 7 years ago

le pb persite ce matin sur test le pb c que un utilisateur en prod a rencontré ce même pb -> @catmorales ?

MaelREBOUX commented 7 years ago

On va considérer que c'était un pb de perf de la PF de test. Je ferme.

MaelREBOUX commented 4 years ago

Je me permet de rouvrir cette issue car nous rencontrons parfois ce message d'erreur à la toute première utilisation de cadastrapp le matin.

1 utilisateur vient de nous le faire remonter.

Possibilité de catcher ça pour enrober l’erreur et afficher qqch de plus « user friendly » ? Genre : service momentanément indisponible : réessayer dans qqs secondes après avoir rechargé le visualiseur ?

landryb commented 4 years ago

ou plutot regarder dans tes logs pour voir si c'est un timeout ou une erreur geoserver, et en fonction ajouter des indexes pour corriger les timeout ou augmenter les limites de timeout..

pierrejego commented 4 years ago

C'est effectivement mieux de corriger la cause, mais oui on doit pouvoir gérer le retour d'erreur pour mettre un message plus simple sans pour autant perdre le contenu.