[Geoserver-users] Strange error while rendering a WMS map

Hello list.

I'm using Geoserver 1.5.4 on a Linux box (Ubuntu 7.10), JRE 1.6 (Sun), Tomcat 5.5. On the client side, I have an OpenLayers client.

Sometime I see in my map a missing tile (it's white). Digging into the log (level FINE), I see this (one for every missing tile):

Nov 20, 2007 7:06:06 PM org.vfny.geoserver.servlets.AbstractService doService
FINE: Error writing out I/O error writing PNG file!
javax.imageio.IIOException: I/O error writing PNG file!
        at com.sun.imageio.plugins.png.PNGImageWriter.write(PNGImageWriter.java:1135)
        at org.geotools.image.ImageWorker.writePNG(ImageWorker.java:2715)
        at org.vfny.geoserver.wms.responses.map.png.PNGMapProducer.formatImageOutputStream(PNGMapProducer.java:70)
        at org.vfny.geoserver.wms.responses.DefaultRasterMapProducer.writeTo(DefaultRasterMapProducer.java:126)
        at org.vfny.geoserver.wms.responses.GetMapResponse.writeTo(GetMapResponse.java:495)
        at org.vfny.geoserver.servlets.AbstractService.doService(AbstractService.java:592)
        at org.vfny.geoserver.servlets.AbstractService.doGet(AbstractService.java:315)
        at org.geoserver.request.Dispatcher.dispatch(Dispatcher.java:192)
        at org.geoserver.request.Dispatcher.handleRequestInternal(Dispatcher.java:52)
        at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:139)
        at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java
:44)
        at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:684)
        at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:625)
        at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:392)
        at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:347)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
        at org.vfny.geoserver.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:103)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
        at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
        at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
        at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
        at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
        at java.lang.Thread.run(Thread.java:619)
Caused by: ClientAbortException: java.net.SocketException: Broken pipe
        at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:327)
        at org.apache.catalina.connector.OutputBuffer.flush(OutputBuffer.java:293)
        at org.apache.catalina.connector.CoyoteOutputStream.flush(CoyoteOutputStream.java:98)
        at org.vfny.geoserver.util.PartialBufferedOutputStream2.flush(PartialBufferedOutputStream2.java:185)
        at javax.imageio.stream.MemoryCacheImageOutputStream.flushBefore(MemoryCacheImageOutputStream.java:177)
        at com.sun.imageio.plugins.png.IDATOutputStream.finishChunk(PNGImageWriter.java:177)
        at com.sun.imageio.plugins.png.IDATOutputStream.finish(PNGImageWriter.java:234)
        at com.sun.imageio.plugins.png.PNGImageWriter.write_IDAT(PNGImageWriter.java:913)
        at com.sun.imageio.plugins.png.PNGImageWriter.write(PNGImageWriter.java:1125)
        ... 33 more
Caused by: java.net.SocketException: Broken pipe
        at java.net.SocketOutputStream.socketWrite0(Native Method)
        at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
        at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
        at org.apache.coyote.http11.InternalOutputBuffer.realWriteBytes(InternalOutputBuffer.java:747)
        at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:432)
        at org.apache.coyote.http11.InternalOutputBuffer.flush(InternalOutputBuffer.java:305)
        at org.apache.coyote.http11.Http11Processor.action(Http11Processor.java:996)
        at org.apache.coyote.Response.action(Response.java:183)
        at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:322)
        ... 41 more
Nov 20, 2007 7:06:06 PM org.vfny.geoserver.wms.responses.GetMapResponse abort
FINE: asking delegate for aborting the process
Nov 20, 2007 7:06:06 PM org.vfny.geoserver.servlets.PartialBufferStrategy2 abort
INFO: OutputStream was successfully aborted.

It seems the client closes the connection, but it's a nonsense: why OpenLayers should do that? I mean: 99% of tiles are downloaded correctly. And when I get a missing tile, I try to zoom in then out, and the missing tile gets downloaded, so it seems a random event.

Does anyone have any clue?

Thanks in advance for any feedback.

Cheers,

Fabio Da Soghe

Fabio Da Soghe ha scritto:

Hello list.

I'm using Geoserver 1.5.4 on a Linux box (Ubuntu 7.10), JRE 1.6 (Sun), Tomcat 5.5. On the client side, I have an OpenLayers client.

Sometime I see in my map a missing tile (it's white). Digging into the log (level FINE), I see this (one for every missing tile):

Nov 20, 2007 7:06:06 PM org.vfny.geoserver.servlets.AbstractService doService
FINE: Error writing out I/O error writing PNG file!
javax.imageio.IIOException: I/O error writing PNG file!
        at com.sun.imageio.plugins.png.PNGImageWriter.write(PNGImageWriter.java:1135)
        at org.geotools.image.ImageWorker.writePNG(ImageWorker.java:2715)
        at org.vfny.geoserver.wms.responses.map.png.PNGMapProducer.formatImageOutputStream(PNGMapProducer.java:70)
        at org.vfny.geoserver.wms.responses.DefaultRasterMapProducer.writeTo(DefaultRasterMapProducer.java:126)
        at org.vfny.geoserver.wms.responses.GetMapResponse.writeTo(GetMapResponse.java:495)
        at org.vfny.geoserver.servlets.AbstractService.doService(AbstractService.java:592)
        at org.vfny.geoserver.servlets.AbstractService.doGet(AbstractService.java:315)
        at org.geoserver.request.Dispatcher.dispatch(Dispatcher.java:192)
        at org.geoserver.request.Dispatcher.handleRequestInternal(Dispatcher.java:52)
        at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:139)
        at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java
:44)
        at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:684)
        at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:625)
        at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:392)
        at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:347)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
        at org.vfny.geoserver.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:103)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
        at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
        at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
        at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
        at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
        at java.lang.Thread.run(Thread.java:619)
Caused by: ClientAbortException: java.net.SocketException: Broken pipe
        at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:327)
        at org.apache.catalina.connector.OutputBuffer.flush(OutputBuffer.java:293)
        at org.apache.catalina.connector.CoyoteOutputStream.flush(CoyoteOutputStream.java:98)
        at org.vfny.geoserver.util.PartialBufferedOutputStream2.flush(PartialBufferedOutputStream2.java:185)
        at javax.imageio.stream.MemoryCacheImageOutputStream.flushBefore(MemoryCacheImageOutputStream.java:177)
        at com.sun.imageio.plugins.png.IDATOutputStream.finishChunk(PNGImageWriter.java:177)
        at com.sun.imageio.plugins.png.IDATOutputStream.finish(PNGImageWriter.java:234)
        at com.sun.imageio.plugins.png.PNGImageWriter.write_IDAT(PNGImageWriter.java:913)
        at com.sun.imageio.plugins.png.PNGImageWriter.write(PNGImageWriter.java:1125)
        ... 33 more
Caused by: java.net.SocketException: Broken pipe
        at java.net.SocketOutputStream.socketWrite0(Native Method)
        at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
        at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
        at org.apache.coyote.http11.InternalOutputBuffer.realWriteBytes(InternalOutputBuffer.java:747)
        at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:432)
        at org.apache.coyote.http11.InternalOutputBuffer.flush(InternalOutputBuffer.java:305)
        at org.apache.coyote.http11.Http11Processor.action(Http11Processor.java:996)
        at org.apache.coyote.Response.action(Response.java:183)
        at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:322)
        ... 41 more
Nov 20, 2007 7:06:06 PM org.vfny.geoserver.wms.responses.GetMapResponse abort
FINE: asking delegate for aborting the process
Nov 20, 2007 7:06:06 PM org.vfny.geoserver.servlets.PartialBufferStrategy2 abort
INFO: OutputStream was successfully aborted.

It seems the client closes the connection, but it's a nonsense: why OpenLayers should do that? I mean: 99% of tiles are downloaded correctly. And when I get a missing tile, I try to zoom in then out, and the missing tile gets downloaded, so it seems a random event.

Does anyone have any clue?

Thanks in advance for any feedback.

OL just sets an URL in an image tag. What I suspect is happening is that the browser times out on the image download and closes the connection,
when geoserver is done rendering it, the connection is gone and thus
you get the above error.
Also, this happens if you zoom in or out while tiles are being loaded.
Usually this is a sign of overload, but you can address is by asking
openlayers to try and download the tiles more times than the defuault
value, see how we do it in the standard OL preview in GeoServer.

Let me know if this helps
Cheers
Andrea