Skip to content

Commit 4b10d47

Browse files
committed
fix(model-server): removed unnecessary endpoints for RepositoryConfig retrieval
It is only required to initialize the repository. The information about the tree implementation is encoded in the version data.
1 parent 17b3923 commit 4b10d47

File tree

7 files changed

+106
-240
lines changed

7 files changed

+106
-240
lines changed

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ interface IModelClientV2 {
3939
suspend fun initRepositoryWithLegacyStorage(repository: RepositoryId): IVersion
4040

4141
suspend fun initRepository(config: RepositoryConfig): IVersion
42-
suspend fun getRepositoryConfig(repositoryAlias: String): RepositoryConfig?
4342

4443
suspend fun listRepositories(): List<RepositoryId>
4544
suspend fun deleteRepository(repository: RepositoryId): Boolean

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

Lines changed: 14 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,6 @@ class ModelClientV2(
9696
private var serverProvidedUserId: String? = null
9797

9898
private val objectGraphs = WeakValueMap<RepositoryId, ModelClientGraph>()
99-
private val repositoryConfigurations = HashMap<String, RepositoryConfig>()
10099

101100
suspend fun init() {
102101
updateClientId()
@@ -184,29 +183,22 @@ class ModelClientV2(
184183
override fun getUserId(): String? = clientProvidedUserId ?: serverProvidedUserId
185184

186185
override suspend fun initRepository(repository: RepositoryId, useRoleIds: Boolean): IVersion {
187-
return initRepository(
188-
RepositoryConfig(
189-
legacyNameBasedRoles = !useRoleIds,
190-
legacyGlobalStorage = false,
191-
nodeIdType = RepositoryConfig.NodeIdType.STRING,
192-
primaryTreeType = RepositoryConfig.TreeType.PATRICIA_TRIE,
193-
modelId = TreeId.random().id,
194-
repositoryId = RepositoryId.random().id,
195-
repositoryName = repository.id,
196-
alternativeNames = emptySet(),
197-
),
198-
)
186+
return initRepository(repository, useRoleIds = useRoleIds, legacyGlobalStorage = false)
199187
}
200188

201189
override suspend fun initRepositoryWithLegacyStorage(repository: RepositoryId): IVersion {
190+
return initRepository(repository, useRoleIds = true, legacyGlobalStorage = true)
191+
}
192+
193+
suspend fun initRepository(repository: RepositoryId, useRoleIds: Boolean = true, legacyGlobalStorage: Boolean = false): IVersion {
202194
return initRepository(
203195
RepositoryConfig(
204-
legacyNameBasedRoles = false,
205-
legacyGlobalStorage = true,
196+
legacyNameBasedRoles = !useRoleIds,
197+
legacyGlobalStorage = legacyGlobalStorage,
206198
nodeIdType = RepositoryConfig.NodeIdType.STRING,
207199
primaryTreeType = RepositoryConfig.TreeType.PATRICIA_TRIE,
208200
modelId = TreeId.random().id,
209-
repositoryId = RepositoryId.random().id,
201+
repositoryId = repository.id,
210202
repositoryName = repository.id,
211203
alternativeNames = emptySet(),
212204
),
@@ -221,40 +213,13 @@ class ModelClientV2(
221213
appendPathSegmentsEncodingSlash("repositories", repositoryId.id, "init")
222214
}
223215
useVersionStreamFormat()
216+
contentType(ContentType.Application.Json)
217+
setBody(config)
224218
}.execute { response ->
225-
createVersion(repositoryId, null, response.readVersionDelta()).also {
226-
runSynchronized(repositoryConfigurations) {
227-
for (alias in config.getAliases()) {
228-
repositoryConfigurations[alias] = config
229-
}
230-
}
231-
}
232-
}
233-
}
234-
235-
override suspend fun getRepositoryConfig(alias: String): RepositoryConfig? {
236-
runSynchronized(repositoryConfigurations) {
237-
repositoryConfigurations[alias]?.let { return it }
238-
}
239-
return requestRepositoryConfig(alias)?.also { config ->
240-
runSynchronized(repositoryConfigurations) {
241-
repositoryConfigurations[alias] = config
242-
}
219+
createVersion(repositoryId, null, response.readVersionDelta())
243220
}
244221
}
245222

246-
private suspend fun requestRepositoryConfig(repositoryAlias: String): RepositoryConfig? {
247-
val response = httpClient.get {
248-
expectSuccess = false
249-
url {
250-
takeFrom(baseUrl)
251-
appendPathSegmentsEncodingSlash("repositories", repositoryAlias, "config")
252-
}
253-
}
254-
if (response.status == HttpStatusCode.NotFound) return null
255-
return response.body<RepositoryConfig>()
256-
}
257-
258223
override suspend fun listRepositories(): List<RepositoryId> {
259224
return httpClient.get {
260225
url {
@@ -585,16 +550,14 @@ class ModelClientV2(
585550
httpClient.close()
586551
}
587552

588-
private suspend fun createVersion(repositoryAlias: RepositoryId, baseVersion: CLVersion?, delta: VersionDeltaStream): CLVersion {
589-
val config = getRepositoryConfig(repositoryAlias.id)
590-
val repositoryId = config?.let { RepositoryId(it.repositoryId) } ?: repositoryAlias
591-
val graph = getObjectGraph(repositoryId)
553+
private suspend fun createVersion(repository: RepositoryId, baseVersion: CLVersion?, delta: VersionDeltaStream): CLVersion {
554+
val graph = getObjectGraph(repository)
592555
return if (baseVersion != null && delta.versionHash == baseVersion.getContentHash()) {
593556
CLVersion(graph.withUnloadedHistory(baseVersion.obj))
594557
} else {
595558
val receivedObjects = delta.getObjectsAsFlow()
596559
.map { ObjectHash(it.first) to it.second }.toMap()
597-
val graph = getObjectGraph(repositoryId)
560+
val graph = getObjectGraph(repository)
598561
CLVersion(graph.loadVersion(ObjectHash(delta.versionHash), receivedObjects))
599562
}
600563
}

model-server-api/src/commonMain/kotlin/org/modelix/model/server/api/RepositoryConfig.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@ package org.modelix.model.server.api
22

33
import kotlinx.serialization.Serializable
44

5+
/**
6+
* Specification for the initial version when a new repository is created.
7+
*/
58
@Serializable
69
data class RepositoryConfig(
710
val legacyNameBasedRoles: Boolean = false,
@@ -46,11 +49,13 @@ data class RepositoryConfig(
4649
/**
4750
* Some human-readable identifier. Can be changed later.
4851
*/
52+
@Deprecated("Not implemented yet")
4953
val repositoryName: String,
5054

5155
/**
5256
* Names under which the repository can also be found. Usually used to store the previous name after renaming.
5357
*/
58+
@Deprecated("Not implemented yet")
5459
val alternativeNames: Set<String> = emptySet(),
5560
) {
5661

model-server-openapi/specifications/model-server-v2.yaml

Lines changed: 30 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -60,13 +60,13 @@ paths:
6060
$ref: '#/components/responses/200'
6161
default:
6262
$ref: '#/components/responses/GeneralError'
63-
/repositories/{repositoryName}/objects:
63+
/repositories/{repository}/objects:
6464
put:
6565
tags:
6666
- v2
6767
operationId: putRepositoryObjects
6868
parameters:
69-
- name: repositoryName
69+
- name: repository
7070
in: "path"
7171
required: true
7272
schema:
@@ -80,13 +80,13 @@ paths:
8080
$ref: '#/components/responses/200json'
8181
default:
8282
$ref: '#/components/responses/GeneralError'
83-
/repositories/{repositoryName}/objects/getAll:
83+
/repositories/{repository}/objects/getAll:
8484
post:
8585
tags:
8686
- v2
8787
operationId: postRepositoryObjectsGetAll
8888
parameters:
89-
- name: repositoryName
89+
- name: repository
9090
in: "path"
9191
required: true
9292
schema:
@@ -96,29 +96,13 @@ paths:
9696
$ref: '#/components/responses/200'
9797
default:
9898
$ref: '#/components/responses/GeneralError'
99-
/repositories/{repositoryName}/config:
100-
get:
101-
tags:
102-
- v2
103-
operationId: getRepositoryConfig
104-
parameters:
105-
- name: repositoryName
106-
in: "path"
107-
required: true
108-
schema:
109-
type: string
110-
responses:
111-
"200":
112-
$ref: '#/components/responses/200'
113-
default:
114-
$ref: '#/components/responses/GeneralError'
115-
/repositories/{repositoryName}/branches:
99+
/repositories/{repository}/branches:
116100
get:
117101
tags:
118102
- v2
119103
operationId: getRepositoryBranches
120104
parameters:
121-
- name: repositoryName
105+
- name: repository
122106
in: "path"
123107
required: true
124108
schema:
@@ -128,13 +112,13 @@ paths:
128112
$ref: '#/components/responses/200'
129113
default:
130114
$ref: '#/components/responses/GeneralError'
131-
/repositories/{repositoryName}/branches/{branch}:
115+
/repositories/{repository}/branches/{branch}:
132116
delete:
133117
tags:
134118
- v2
135119
operationId: deleteRepositoryBranch
136120
parameters:
137-
- name: repositoryName
121+
- name: repository
138122
in: "path"
139123
required: true
140124
schema:
@@ -166,7 +150,7 @@ paths:
166150
required: false
167151
schema:
168152
type: string
169-
- name: repositoryName
153+
- name: repository
170154
in: "path"
171155
required: true
172156
schema:
@@ -213,7 +197,7 @@ paths:
213197
- v2
214198
operationId: postRepositoryBranch
215199
parameters:
216-
- name: repositoryName
200+
- name: repository
217201
in: "path"
218202
required: true
219203
schema:
@@ -238,13 +222,13 @@ paths:
238222
$ref: '#/components/responses/versionDelta'
239223
default:
240224
$ref: '#/components/responses/GeneralError'
241-
/repositories/{repositoryName}/branches/{branch}/hash:
225+
/repositories/{repository}/branches/{branch}/hash:
242226
get:
243227
tags:
244228
- v2
245229
operationId: getRepositoryBranchHash
246230
parameters:
247-
- name: repositoryName
231+
- name: repository
248232
in: "path"
249233
required: true
250234
schema:
@@ -261,7 +245,7 @@ paths:
261245
$ref: '#/components/responses/200'
262246
default:
263247
$ref: '#/components/responses/GeneralError'
264-
/repositories/{repositoryName}/branches/{branch}/poll:
248+
/repositories/{repository}/branches/{branch}/poll:
265249
get:
266250
tags:
267251
- v2
@@ -272,7 +256,7 @@ paths:
272256
required: false
273257
schema:
274258
type: string
275-
- name: repositoryName
259+
- name: repository
276260
in: "path"
277261
required: true
278262
schema:
@@ -291,7 +275,7 @@ paths:
291275
$ref: '#/components/responses/versionDelta'
292276
default:
293277
$ref: '#/components/responses/GeneralError'
294-
/repositories/{repositoryName}/branches/{branch}/pollHash:
278+
/repositories/{repository}/branches/{branch}/pollHash:
295279
get:
296280
tags:
297281
- v2
@@ -307,7 +291,7 @@ paths:
307291
required: false
308292
schema:
309293
type: boolean
310-
- name: repositoryName
294+
- name: repository
311295
in: "path"
312296
required: true
313297
schema:
@@ -326,13 +310,13 @@ paths:
326310
$ref: '#/components/responses/200'
327311
default:
328312
$ref: '#/components/responses/GeneralError'
329-
/repositories/{repositoryName}/branches/{branch}/query:
313+
/repositories/{repository}/branches/{branch}/query:
330314
post:
331315
tags:
332316
- v2
333317
operationId: postRepositoryBranchQuery
334318
parameters:
335-
- name: repositoryName
319+
- name: repository
336320
in: "path"
337321
required: true
338322
schema:
@@ -349,7 +333,7 @@ paths:
349333
$ref: '#/components/responses/ModelQlQueryExecutionFailed'
350334
default:
351335
$ref: '#/components/responses/GeneralError'
352-
/repositories/{repositoryName}/init:
336+
/repositories/{repository}/init:
353337
post:
354338
tags:
355339
- v2
@@ -367,7 +351,7 @@ paths:
367351
schema:
368352
type: boolean
369353
default: false
370-
- name: repositoryName
354+
- name: repository
371355
in: "path"
372356
required: true
373357
schema:
@@ -381,13 +365,13 @@ paths:
381365
$ref: '#/components/responses/versionDelta'
382366
default:
383367
$ref: '#/components/responses/GeneralError'
384-
/repositories/{repositoryName}/delete:
368+
/repositories/{repository}/delete:
385369
post:
386370
tags:
387371
- v2
388372
operationId: deleteRepository
389373
parameters:
390-
- name: repositoryName
374+
- name: repository
391375
in: "path"
392376
required: true
393377
schema:
@@ -403,7 +387,7 @@ paths:
403387
$ref: '#/components/responses/404'
404388
default:
405389
$ref: '#/components/responses/GeneralError'
406-
/repositories/{repositoryName}/versions/{versionHash}:
390+
/repositories/{repository}/versions/{versionHash}:
407391
get:
408392
tags:
409393
- v2
@@ -419,7 +403,7 @@ paths:
419403
required: true
420404
schema:
421405
type: string
422-
- name: repositoryName
406+
- name: repository
423407
in: "path"
424408
required: true
425409
schema:
@@ -435,7 +419,7 @@ paths:
435419
type: object
436420
default:
437421
$ref: '#/components/responses/GeneralError'
438-
/repositories/{repositoryName}/versions/{versionHash}/query:
422+
/repositories/{repository}/versions/{versionHash}/query:
439423
post:
440424
tags:
441425
- v2
@@ -446,7 +430,7 @@ paths:
446430
required: true
447431
schema:
448432
type: string
449-
- name: repositoryName
433+
- name: repository
450434
in: "path"
451435
required: true
452436
schema:
@@ -567,13 +551,13 @@ components:
567551
type: object
568552
properties:
569553
versionHash:
570-
type: string
554+
type: string
571555
baseVersion:
572-
type: string
556+
type: string
573557
objects:
574-
$ref: '#/components/schemas/MapItem'
558+
$ref: '#/components/schemas/MapItem'
575559
objectsMap:
576-
$ref: '#/components/schemas/MapItem'
560+
$ref: '#/components/schemas/MapItem'
577561
required:
578562
- versionHash
579563
- objects

0 commit comments

Comments
 (0)