mirror of
https://github.com/packwiz/packwiz-installer.git
synced 2025-04-19 13:06:30 +02:00
Tweak timeout strategy (see #52)
This commit is contained in:
parent
fa9fe18215
commit
84bbbe0770
@ -8,9 +8,12 @@ import java.net.SocketTimeoutException
|
|||||||
import java.util.concurrent.TimeUnit
|
import java.util.concurrent.TimeUnit
|
||||||
|
|
||||||
class ClientHolder {
|
class ClientHolder {
|
||||||
|
// Tries 10s timeouts (default), then 15s timeouts, then 60s timeouts
|
||||||
|
private val retryTimes = arrayOf(15, 60)
|
||||||
|
|
||||||
// TODO: a button to increase timeouts temporarily when retrying? manual retry button?
|
// TODO: a button to increase timeouts temporarily when retrying? manual retry button?
|
||||||
val okHttpClient by lazy { OkHttpClient.Builder()
|
val okHttpClient by lazy { OkHttpClient.Builder()
|
||||||
// Retry requests up to 3 times, increasing the timeouts slightly if it failed
|
// Retry requests according to retryTimes list
|
||||||
.addInterceptor {
|
.addInterceptor {
|
||||||
val req = it.request()
|
val req = it.request()
|
||||||
|
|
||||||
@ -24,20 +27,20 @@ class ClientHolder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var tryCount = 0
|
var tryCount = 0
|
||||||
while (res == null && tryCount < 3) {
|
while (res == null && tryCount < retryTimes.size) {
|
||||||
tryCount++
|
Log.info("OkHttp connection to ${req.url} timed out; retrying... (${tryCount + 1}/${retryTimes.size})")
|
||||||
|
|
||||||
Log.info("OkHttp connection to ${req.url} timed out; retrying... ($tryCount/3)")
|
|
||||||
|
|
||||||
val longerTimeoutChain = it
|
val longerTimeoutChain = it
|
||||||
.withConnectTimeout(10 * tryCount, TimeUnit.SECONDS)
|
.withConnectTimeout(retryTimes[tryCount], TimeUnit.SECONDS)
|
||||||
.withReadTimeout(10 * tryCount, TimeUnit.SECONDS)
|
.withReadTimeout(retryTimes[tryCount], TimeUnit.SECONDS)
|
||||||
.withWriteTimeout(10 * tryCount, TimeUnit.SECONDS)
|
.withWriteTimeout(retryTimes[tryCount], TimeUnit.SECONDS)
|
||||||
try {
|
try {
|
||||||
res = longerTimeoutChain.proceed(req)
|
res = longerTimeoutChain.proceed(req)
|
||||||
} catch (e: SocketTimeoutException) {
|
} catch (e: SocketTimeoutException) {
|
||||||
lastException = e
|
lastException = e
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tryCount++
|
||||||
}
|
}
|
||||||
|
|
||||||
res ?: throw lastException!!
|
res ?: throw lastException!!
|
||||||
|
Loading…
x
Reference in New Issue
Block a user