bottomless-archive-project / library-of-alexandria

Library of Alexandria (LoA in short) is a project that aims to collect and archive documents from the internet.
MIT License
112 stars 1 forks source link

Unexpected end of stream errors #442

Closed laxika closed 2 years ago

laxika commented 2 years ago

Sometimes we get an error like this:

java.io.IOException: unexpected end of stream on http://1.linhaibo.com/...
    at okhttp3.internal.http1.Http1ExchangeCodec.readResponseHeaders(Http1ExchangeCodec.kt:202) ~[okhttp-4.10.0.jar:na]
    at okhttp3.internal.connection.Exchange.readResponseHeaders(Exchange.kt:106) ~[okhttp-4.10.0.jar:na]
    at okhttp3.internal.http.CallServerInterceptor.intercept(CallServerInterceptor.kt:79) ~[okhttp-4.10.0.jar:na]
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109) ~[okhttp-4.10.0.jar:na]
    at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.kt:34) ~[okhttp-4.10.0.jar:na]
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109) ~[okhttp-4.10.0.jar:na]
    at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.kt:95) ~[okhttp-4.10.0.jar:na]
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109) ~[okhttp-4.10.0.jar:na]
    at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.kt:83) ~[okhttp-4.10.0.jar:na]
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109) ~[okhttp-4.10.0.jar:na]
    at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.kt:76) ~[okhttp-4.10.0.jar:na]
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109) ~[okhttp-4.10.0.jar:na]
    at okhttp3.internal.connection.RealCall.getResponseWithInterceptorChain$okhttp(RealCall.kt:201) ~[okhttp-4.10.0.jar:na]
    at okhttp3.internal.connection.RealCall.execute(RealCall.kt:154) ~[okhttp-4.10.0.jar:na]
    at com.github.bottomlessarchive.loa.url.service.downloader.FileDownloadManager.downloadFile(FileDownloadManager.java:44) ~[main/:na]
    at com.github.bottomlessarchive.loa.downloader.service.file.FileCollector.acquireFile(FileCollector.java:33) ~[main/:na]
    at com.github.bottomlessarchive.loa.downloader.service.document.DocumentLocationProcessor.doProcessDocumentLocation(DocumentLocationProcessor.java:83) ~[main/:na]
    at com.github.bottomlessarchive.loa.downloader.service.document.DocumentLocationProcessor.lambda$processDocumentLocation$0(DocumentLocationProcessor.java:56) ~[main/:na]
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[na:na]
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[na:na]
    at java.base/java.lang.Thread.run(Thread.java:833) ~[na:na]
Caused by: java.io.EOFException: \n not found: limit=0 content=…
    at okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.kt:332) ~[okio-jvm-3.0.0.jar:na]
    at okhttp3.internal.http1.HeadersReader.readLine(HeadersReader.kt:29) ~[okhttp-4.10.0.jar:na]
    at okhttp3.internal.http1.Http1ExchangeCodec.readResponseHeaders(Http1ExchangeCodec.kt:178) ~[okhttp-4.10.0.jar:na]
    ... 20 common frames omitted

This might be solved by the following change:

OkHttpClient client = new OkHttpClient.Builder()
    .retryOnConnectionFailure(true)
    .build();

More info: https://techhelpnotes.com/android-java-io-ioexception-unexpected-end-of-stream-on-connection-4/

laxika commented 2 years ago

This is not an error on our side but something to do with either the connection or the server. The retryOnConnectionFailure property is already set to true by default on the OkHttpClient.