Well, I was writing again on the same issue but you were faster
It sounds strange to me the idea of the browser closing the connection: we have a super-fast server that fires tiles at light speed and still we get the bad behaviour.
Anyway, googling a bit I found what is called the "Pink Tile Syndrome", along with an (undocumented, grrr) OL option: IMAGE_RELOAD_ATTEMPTS. I see you set it to 5 in Geoserver's OL sample client; you're smart guys....
Thanks for your ultra-fast reply!!!
Cheers,
Fabio
-----Messaggio originale-----
Da: Andrea Aime [mailto:aaime@anonymised.com]
Inviato: martedì 20 novembre 2007 19.48
A: Fabio Da Soghe
Cc: 'geoserver-users@lists.sourceforge.net'
Oggetto: Re: [Geoserver-users] Strange error while rendering a WMS mapFabio 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(PNGImageWrite
r.java:1135)
> at
org.geotools.image.ImageWorker.writePNG(ImageWorker.java:2715)
> at
org.vfny.geoserver.wms.responses.map.png.PNGMapProducer.format
ImageOutputStream(PNGMapProducer.java:70)
> at
org.vfny.geoserver.wms.responses.DefaultRasterMapProducer.writ
eTo(DefaultRasterMapProducer.java:126)
> at
org.vfny.geoserver.wms.responses.GetMapResponse.writeTo(GetMap
Response.java:495)
> at
org.vfny.geoserver.servlets.AbstractService.doService(Abstract
Service.java:592)
> at
org.vfny.geoserver.servlets.AbstractService.doGet(AbstractServ
ice.java:315)
> at
org.geoserver.request.Dispatcher.dispatch(Dispatcher.java:192)
> at
org.geoserver.request.Dispatcher.handleRequestInternal(Dispatc
her.java:52)
> at
org.springframework.web.servlet.mvc.AbstractController.handleR
equest(AbstractController.java:139)
> at
org.springframework.web.servlet.mvc.SimpleControllerHandlerAda
pter.handle(SimpleControllerHandlerAdapter.java
> :44)
> at
org.springframework.web.servlet.DispatcherServlet.doDispatch(D
ispatcherServlet.java:684)
> at
org.springframework.web.servlet.DispatcherServlet.doService(Di
spatcherServlet.java:625)
> at
org.springframework.web.servlet.FrameworkServlet.processReques
t(FrameworkServlet.java:392)
> at
org.springframework.web.servlet.FrameworkServlet.doGet(Framewo
rkServlet.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.internalDoFilt
er(ApplicationFilterChain.java:269)
> at
org.apache.catalina.core.ApplicationFilterChain.doFilter(Appli
cationFilterChain.java:188)
> at
org.vfny.geoserver.filters.SetCharacterEncodingFilter.doFilter
(SetCharacterEncodingFilter.java:103)
> at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilt
er(ApplicationFilterChain.java:215)
> at
org.apache.catalina.core.ApplicationFilterChain.doFilter(Appli
cationFilterChain.java:188)
> at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardW
rapperValve.java:213)
> at
org.apache.catalina.core.StandardContextValve.invoke(StandardC
ontextValve.java:174)
> at
org.apache.catalina.core.StandardHostValve.invoke(StandardHost
Valve.java:127)
> at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReport
Valve.java:117)
> at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEn
gineValve.java:108)
> at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdap
ter.java:151)
> at
org.apache.coyote.http11.Http11Processor.process(Http11Process
or.java:874)
> at
org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHa
ndler.processConnection(Http11BaseProtocol.java:665)
> at
org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolT
cpEndpoint.java:528)
> at
org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(Le
aderFollowerWorkerThread.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(OutputBuffe
r.java:327)
> at
org.apache.catalina.connector.OutputBuffer.flush(OutputBuffer.
java:293)
> at
org.apache.catalina.connector.CoyoteOutputStream.flush(CoyoteO
utputStream.java:98)
> at
org.vfny.geoserver.util.PartialBufferedOutputStream2.flush(Par
tialBufferedOutputStream2.java:185)
> at
javax.imageio.stream.MemoryCacheImageOutputStream.flushBefore(
MemoryCacheImageOutputStream.java:177)
> at
com.sun.imageio.plugins.png.IDATOutputStream.finishChunk(PNGIm
ageWriter.java:177)
> at
com.sun.imageio.plugins.png.IDATOutputStream.finish(PNGImageWr
iter.java:234)
> at
com.sun.imageio.plugins.png.PNGImageWriter.write_IDAT(PNGImage
Writer.java:913)
> at
com.sun.imageio.plugins.png.PNGImageWriter.write(PNGImageWrite
r.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(I
nternalOutputBuffer.java:747)
> at
org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:432)
> at
org.apache.coyote.http11.InternalOutputBuffer.flush(InternalOu
tputBuffer.java:305)
> at
org.apache.coyote.http11.Http11Processor.action(Http11Processo
r.java:996)
> at org.apache.coyote.Response.action(Response.java:183)
> at
org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffe
r.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