packwiz / packwiz-installer

An installer for packwiz modpacks, with automatic auto-updating and optional mods! Works well with MultiMC and on servers.
https://packwiz.infra.link/
MIT License
46 stars 21 forks source link

Request body reading timeouts don't seem to be retried properly #68

Open comp500 opened 10 months ago

comp500 commented 10 months ago

There's a handler in https://github.com/packwiz/packwiz-installer/blob/b2421cfea768328aa4668c0f1ccebe85e216d81d/src/main/kotlin/link/infra/packwiz/installer/target/ClientHolder.kt#L39 which should catch SocketTimeoutExceptions and retry the request? But I think this seems to only get called when the initial request gets run, not after HTTP2 headers have been sent and the request body is being streamed - see the following stacktrace:

java.net.SocketTimeoutException: timeout
    at okhttp3.internal.http2.Http2Stream$StreamTimeout.newTimeoutException(SourceFile:675)
    at okhttp3.internal.http2.Http2Stream$StreamTimeout.exitAndThrowIfTimedOut(SourceFile:684)
    at okhttp3.internal.http2.Http2Stream$FramingSource.read(SourceFile:379)
    at okhttp3.internal.connection.Exchange$ResponseBodySource.read(SourceFile:276)
    at okio.RealBufferedSource.read(SourceFile:189)
    at okio.ForwardingSource.read(SourceFile:27)
    at okio.HashingSource.read(SourceFile:70)
    at okio.ForwardingSource.read(SourceFile:27)
    at okio.RealBufferedSource.readAll(SourceFile:284)
    at link.infra.packwiz.installer.DownloadTask.download(SourceFile:226)
    at link.infra.packwiz.installer.UpdateManager.processIndex$lambda-14$lambda-13(SourceFile:372)
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
    at java.base/java.lang.Thread.run(Thread.java:833)