Skip to content

Commit ff06d3a

Browse files
author
Oleksandr Dzhychko
committed
perf(model-client): consistently process version streams while receiving data
The optimization was previously only done to `ModelClientV2.poll`, `ModelClientV2.pullIfExists` and `ModelClientV2.pull`.
1 parent db6bfa1 commit ff06d3a

File tree

1 file changed

+13
-8
lines changed

1 file changed

+13
-8
lines changed

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

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import io.ktor.client.request.HttpRequestBuilder
2525
import io.ktor.client.request.get
2626
import io.ktor.client.request.post
2727
import io.ktor.client.request.prepareGet
28+
import io.ktor.client.request.preparePost
2829
import io.ktor.client.request.put
2930
import io.ktor.client.request.setBody
3031
import io.ktor.client.statement.HttpResponse
@@ -123,14 +124,15 @@ class ModelClientV2(
123124
override fun getUserId(): String? = clientProvidedUserId ?: serverProvidedUserId
124125

125126
override suspend fun initRepository(repository: RepositoryId): IVersion {
126-
val response = httpClient.post {
127+
return httpClient.preparePost {
127128
url {
128129
takeFrom(baseUrl)
129130
appendPathSegmentsEncodingSlash("repositories", repository.id, "init")
130131
}
131132
useVersionStreamFormat()
133+
}.execute { response ->
134+
createVersion(null, response.readVersionDelta())
132135
}
133-
return createVersion(null, response.readVersionDelta())
134136
}
135137

136138
override suspend fun listRepositories(): List<RepositoryId> {
@@ -168,7 +170,7 @@ class ModelClientV2(
168170
@Deprecated("repository ID is required for permission checks")
169171
@DeprecationInfo("3.7.0", "May be removed with the next major release. Also remove the endpoint from the model-server.")
170172
override suspend fun loadVersion(versionHash: String, baseVersion: IVersion?): IVersion {
171-
val response = httpClient.get {
173+
return httpClient.prepareGet {
172174
url {
173175
takeFrom(baseUrl)
174176
appendPathSegments("versions", versionHash)
@@ -177,16 +179,17 @@ class ModelClientV2(
177179
}
178180
}
179181
useVersionStreamFormat()
182+
}.execute { response ->
183+
createVersion(baseVersion as CLVersion?, response.readVersionDelta())
180184
}
181-
return createVersion(baseVersion as CLVersion?, response.readVersionDelta())
182185
}
183186

184187
override suspend fun loadVersion(
185188
repositoryId: RepositoryId,
186189
versionHash: String,
187190
baseVersion: IVersion?,
188191
): IVersion {
189-
val response = httpClient.get {
192+
return httpClient.prepareGet {
190193
url {
191194
takeFrom(baseUrl)
192195
appendPathSegments("repositories", repositoryId.id, "versions", versionHash)
@@ -195,8 +198,9 @@ class ModelClientV2(
195198
}
196199
}
197200
useVersionStreamFormat()
201+
}.execute { response ->
202+
createVersion(baseVersion as CLVersion?, response.readVersionDelta())
198203
}
199-
return createVersion(baseVersion as CLVersion?, response.readVersionDelta())
200204
}
201205

202206
override suspend fun push(branch: BranchReference, version: IVersion, baseVersion: IVersion?): IVersion {
@@ -213,16 +217,17 @@ class ModelClientV2(
213217
} else {
214218
VersionDelta(version.getContentHash(), null, objectsMap = objects)
215219
}
216-
val response = httpClient.post {
220+
return httpClient.preparePost {
217221
url {
218222
takeFrom(baseUrl)
219223
appendPathSegmentsEncodingSlash("repositories", branch.repositoryId.id, "branches", branch.branchName)
220224
}
221225
useVersionStreamFormat()
222226
contentType(ContentType.Application.Json)
223227
setBody(delta)
228+
}.execute { response ->
229+
createVersion(version, response.readVersionDelta())
224230
}
225-
return createVersion(version, response.readVersionDelta())
226231
}
227232

228233
private suspend fun uploadObjects(repository: RepositoryId, objects: Sequence<Pair<String, String>>) {

0 commit comments

Comments
 (0)