Skip to content

Commit 1eadd41

Browse files
authored
Merge pull request #381 from modelix/bugfix/configurable-timeouts
Configure HTTP timeouts in bulk sync.
2 parents f54cdb3 + 9438e8e commit 1eadd41

File tree

2 files changed

+22
-3
lines changed

2 files changed

+22
-3
lines changed

bulk-model-sync-gradle/src/main/kotlin/org/modelix/model/sync/bulk/gradle/tasks/ImportIntoModelServer.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ import org.modelix.model.sync.bulk.ModelImporter
4040
import org.modelix.model.sync.bulk.importFilesAsRootChildren
4141
import org.modelix.model.sync.bulk.isModuleIncluded
4242
import javax.inject.Inject
43+
import kotlin.time.Duration.Companion.minutes
4344

4445
abstract class ImportIntoModelServer @Inject constructor(of: ObjectFactory) : DefaultTask() {
4546

@@ -78,7 +79,12 @@ abstract class ImportIntoModelServer @Inject constructor(of: ObjectFactory) : De
7879
val repoId = RepositoryId(repositoryId.get())
7980

8081
val branchRef = ModelFacade.createBranchReference(repoId, branchName.get())
81-
val client = ModelClientV2.builder().url(url.get()).build()
82+
val client = ModelClientV2.builder()
83+
.url(url.get())
84+
// Processing large chunks of data on import might take some time. Therefore, extend the request timeout to
85+
// let the model-server do the import.
86+
.requestTimeout(5.minutes)
87+
.build()
8288
val files = inputDir.listFiles()?.filter {
8389
it.extension == "json" && isModuleIncluded(it.nameWithoutExtension, includedModules.get(), includedModulePrefixes.get())
8490
}

model-client/src/commonMain/kotlin/org/modelix/model/client2/ModelClientV2.kt

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ import org.modelix.model.persistent.MapBasedStore
5656
import org.modelix.model.server.api.v2.VersionDelta
5757
import org.modelix.modelql.client.ModelQLClient
5858
import org.modelix.modelql.core.IMonoStep
59+
import kotlin.time.Duration
5960
import kotlin.time.Duration.Companion.seconds
6061

6162
class ModelClientV2(
@@ -338,6 +339,8 @@ abstract class ModelClientV2Builder {
338339
protected var baseUrl: String = "https://localhost/model/v2"
339340
protected var authTokenProvider: (() -> String?)? = null
340341
protected var userId: String? = null
342+
protected var connectTimeout: Duration = 1.seconds
343+
protected var requestTimeout: Duration = 30.seconds
341344

342345
fun build(): ModelClientV2 {
343346
return ModelClientV2(
@@ -367,6 +370,16 @@ abstract class ModelClientV2Builder {
367370
return this
368371
}
369372

373+
fun connectTimeout(timeout: Duration): ModelClientV2Builder {
374+
this.connectTimeout = timeout
375+
return this
376+
}
377+
378+
fun requestTimeout(timeout: Duration): ModelClientV2Builder {
379+
this.requestTimeout = timeout
380+
return this
381+
}
382+
370383
protected open fun configureHttpClient(config: HttpClientConfig<*>) {
371384
config.apply {
372385
expectSuccess = true
@@ -375,8 +388,8 @@ abstract class ModelClientV2Builder {
375388
json()
376389
}
377390
install(HttpTimeout) {
378-
connectTimeoutMillis = 1.seconds.inWholeMilliseconds
379-
requestTimeoutMillis = 30.seconds.inWholeMilliseconds
391+
connectTimeoutMillis = connectTimeout.inWholeMilliseconds
392+
requestTimeoutMillis = requestTimeout.inWholeMilliseconds
380393
}
381394
install(HttpRequestRetry) {
382395
retryOnExceptionOrServerErrors(maxRetries = 3)

0 commit comments

Comments
 (0)