You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hc.apache.org by "Oleg Kalnichevski (Resolved) (JIRA)" <ji...@apache.org> on 2012/02/07 13:20:59 UTC

[jira] [Resolved] (HTTPASYNC-13) java.io.IOException: FileChannel.size() [13534] < position [130834]. Please grow the file before writing.

     [ https://issues.apache.org/jira/browse/HTTPASYNC-13?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Oleg Kalnichevski resolved HTTPASYNC-13.
----------------------------------------

    Resolution: Cannot Reproduce

Yuri,

I reviewed LengthDelimitedDecoder and ZeroCopyConsumer code and could not find any logical condition that might lead to an attempt to transfer data at a position past end of file.

Please re-open this issue if you find a reliable way to reproduce the problem.

Oleg
                
> java.io.IOException: FileChannel.size() [13534] < position [130834].  Please grow the file before writing.
> ----------------------------------------------------------------------------------------------------------
>
>                 Key: HTTPASYNC-13
>                 URL: https://issues.apache.org/jira/browse/HTTPASYNC-13
>             Project: HttpComponents HttpAsyncClient
>          Issue Type: Bug
>    Affects Versions: 4.0-alpha3
>         Environment: OSX Leopard 64 bits, Java 1.6.
>            Reporter: Yuri
>
> I am using httpasyncclient to download many files assynchronously. Each download get's a unique temp file. For some of the download in the series this is what I see:
> 00:36:00.343 |-ERROR [I/O dispatcher 3] [   c.b.q.h.HttpDownloader] - Could not download http://www.blah.com/files/file20110101.ex_
> java.io.IOException: FileChannel.size() [13534] < position [130834].  Please grow the file before writing.
> 	at org.apache.http.impl.nio.codecs.LengthDelimitedDecoder.transfer(LengthDelimitedDecoder.java:145) ~[httpcore-nio-4.2-alpha2.jar:4.2-alpha2]
> 	at org.apache.http.nio.client.methods.ZeroCopyConsumer.onContentReceived(ZeroCopyConsumer.java:75) ~[httpasyncclient-4.0-alpha3.jar:4.0-alpha3]
> 	at org.apache.http.nio.protocol.AbstractAsyncResponseConsumer.consumeContent(AbstractAsyncResponseConsumer.java:67) ~[httpcore-nio-4.2-alpha2.jar:4.2-alpha2]
> 	at org.apache.http.impl.nio.client.DefaultAsyncRequestDirector.consumeContent(DefaultAsyncRequestDirector.java:329) ~[httpasyncclient-4.0-alpha3.jar:4.0-alpha3]
> 	at org.apache.http.nio.protocol.HttpAsyncClientProtocolHandler.inputReady(HttpAsyncClientProtocolHandler.java:226) ~[httpcore-nio-4.2-alpha2.jar:4.2-alpha2]
> 	at org.apache.http.impl.nio.client.LoggingClientProtocolHandler.inputReady(LoggingClientProtocolHandler.java:98) [httpasyncclient-4.0-alpha3.jar:4.0-alpha3]
> 	at org.apache.http.impl.nio.DefaultNHttpClientConnection.consumeInput(DefaultNHttpClientConnection.java:175) [httpcore-nio-4.2-alpha2.jar:4.2-alpha2]
> 	at org.apache.http.impl.nio.DefaultClientIODispatch.onInputReady(DefaultClientIODispatch.java:118) [httpcore-nio-4.2-alpha2.jar:4.2-alpha2]
> 	at org.apache.http.impl.nio.DefaultClientIODispatch.onInputReady(DefaultClientIODispatch.java:49) [httpcore-nio-4.2-alpha2.jar:4.2-alpha2]
> 	at org.apache.http.impl.nio.AbstractIODispatch.inputReady(AbstractIODispatch.java:113) [httpcore-nio-4.2-alpha2.jar:4.2-alpha2]
> 	at org.apache.http.impl.nio.reactor.BaseIOReactor.readable(BaseIOReactor.java:160) [httpcore-nio-4.2-alpha2.jar:4.2-alpha2]
> 	at org.apache.http.impl.nio.reactor.AbstractIOReactor.processEvent(AbstractIOReactor.java:342) [httpcore-nio-4.2-alpha2.jar:4.2-alpha2]
> 	at org.apache.http.impl.nio.reactor.AbstractIOReactor.processEvents(AbstractIOReactor.java:320) [httpcore-nio-4.2-alpha2.jar:4.2-alpha2]
> 	at org.apache.http.impl.nio.reactor.AbstractIOReactor.execute(AbstractIOReactor.java:280) [httpcore-nio-4.2-alpha2.jar:4.2-alpha2]
> 	at org.apache.http.impl.nio.reactor.BaseIOReactor.execute(BaseIOReactor.java:106) [httpcore-nio-4.2-alpha2.jar:4.2-alpha2]
> 	at org.apache.http.impl.nio.reactor.AbstractMultiworkerIOReactor$Worker.run(AbstractMultiworkerIOReactor.java:599) [httpcore-nio-4.2-alpha2.jar:4.2-alpha2]
> 	at java.lang.Thread.run(Thread.java:680) [na:1.6.0_29]
> This is what I am doing:
> 		HttpAsyncRequestProducer download = HttpAsyncMethods.createGet(uri);
> 		getHttpClient().execute(download, new ZeroCopyConsumer<Void>(file) {
> 				// overridden failed() and process()
> 		}
> And the response is coming with an explicit Content-Length header, which seems to make the framework select the LengthDelimitedDecoder to decode the response. Now even if the server is reporting a wrong length in Content-Length, shouldnt the httpasyncclient simply produce a file of that size (even if not the complete file)? 
> Could this be caused by the server reporting the wrong length? In any case, it seems that the code should never throw an exception here. It should 

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@hc.apache.org
For additional commands, e-mail: dev-help@hc.apache.org