Skip to content

Commit e689f19

Browse files
Leopold-Cramerjreynard-code
authored andcommitted
add override capabilites to twingraph upload
1 parent ef48b7e commit e689f19

File tree

2 files changed

+74
-1
lines changed

2 files changed

+74
-1
lines changed

dataset/src/integrationTest/kotlin/com/cosmotech/dataset/service/DatasetServiceIntegrationTest.kt

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -582,6 +582,54 @@ class DatasetServiceIntegrationTest : CsmRedisTestBase() {
582582
}
583583
}
584584

585+
@Test
586+
fun `reupload a twingraph in dataset with source type File`() {
587+
organizationSaved = organizationApiService.registerOrganization(organization)
588+
datasetSaved = datasetApiService.createDataset(organizationSaved.id!!, dataset)
589+
590+
val fileName = this::class.java.getResource("/integrationTest.zip")?.file
591+
val file = File(fileName!!)
592+
val resource = ByteArrayResource(file.readBytes())
593+
datasetApiService.uploadTwingraph(organizationSaved.id!!, datasetSaved.id!!, resource)
594+
var datasetStatus =
595+
datasetApiService.getDatasetTwingraphStatus(organizationSaved.id!!, datasetSaved.id!!)
596+
runBlocking {
597+
while (datasetStatus == Dataset.Status.PENDING.value) {
598+
delay(50L)
599+
datasetStatus =
600+
datasetApiService.getDatasetTwingraphStatus(organizationSaved.id!!, datasetSaved.id!!)
601+
}
602+
}
603+
datasetApiService.createTwingraphEntities(
604+
organizationSaved.id!!,
605+
datasetSaved.id!!,
606+
"node",
607+
listOf(GraphProperties(type = "Node", name = "newNode", params = "value:0")))
608+
datasetStatus =
609+
datasetApiService.getDatasetTwingraphStatus(organizationSaved.id!!, datasetSaved.id!!)
610+
var queryResult =
611+
datasetApiService.twingraphQuery(
612+
organizationSaved.id!!, datasetSaved.id!!, DatasetTwinGraphQuery("MATCH (n) RETURN n"))
613+
val initalNodeAmount = queryResult.split("}}}").size
614+
615+
datasetApiService.uploadTwingraph(organizationSaved.id!!, datasetSaved.id!!, resource)
616+
datasetStatus =
617+
datasetApiService.getDatasetTwingraphStatus(organizationSaved.id!!, datasetSaved.id!!)
618+
runBlocking {
619+
while (datasetStatus == Dataset.Status.PENDING.value) {
620+
delay(50L)
621+
datasetStatus =
622+
datasetApiService.getDatasetTwingraphStatus(organizationSaved.id!!, datasetSaved.id!!)
623+
}
624+
}
625+
queryResult =
626+
datasetApiService.twingraphQuery(
627+
organizationSaved.id!!, datasetSaved.id!!, DatasetTwinGraphQuery("MATCH (n) RETURN n"))
628+
val newNodeAmount = queryResult.split("}}}").size
629+
630+
assertNotEquals(initalNodeAmount, newNodeAmount)
631+
}
632+
585633
@TestFactory
586634
fun `test refreshDataset`() =
587635
mapOf(

dataset/src/main/kotlin/com/cosmotech/dataset/service/DatasetServiceImpl.kt

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -276,6 +276,7 @@ class DatasetServiceImpl(
276276
}
277277
}
278278

279+
@Suppress("LongMethod")
279280
override fun uploadTwingraph(organizationId: String, datasetId: String, body: Resource) {
280281
val dataset = getDatasetWithStatus(organizationId, datasetId)
281282
csmRbac.verify(dataset.getRbac(), PERMISSION_WRITE)
@@ -292,8 +293,18 @@ class DatasetServiceImpl(
292293
?: throw CsmResourceNotFoundException("Dataset in use, cannot update. Retry later")
293294

294295
datasetRepository.save(dataset.apply { status = Dataset.Status.PENDING })
295-
296+
var overriding = false
296297
GlobalScope.launch(SecurityCoroutineContext()) {
298+
csmJedisPool.resource.use { jedis ->
299+
if (jedis.exists(dataset.twingraphId!!)) {
300+
jedis.eval(
301+
"redis.call('RENAME', KEYS[1], KEYS[2]);",
302+
2,
303+
dataset.twingraphId,
304+
"backupGraph-$datasetId")
305+
overriding = true
306+
}
307+
}
297308
try {
298309
val queryBuffer = QueryBuffer(csmJedisPool.resource, dataset.twingraphId!!)
299310
unzip(body.inputStream, listOf(NODES_ZIP_FOLDER, EDGES_ZIP_FOLDER), "csv")
@@ -315,8 +326,22 @@ class DatasetServiceImpl(
315326
}
316327
}
317328
queryBuffer.send()
329+
if (overriding) {
330+
csmJedisPool.resource.use { jedis ->
331+
jedis.eval("redis.call('DEL', KEYS[1]);", 1, "backupGraph-$datasetId")
332+
}
333+
}
318334
datasetRepository.save(dataset.apply { status = Dataset.Status.READY })
319335
} catch (e: Exception) {
336+
if (overriding) {
337+
csmJedisPool.resource.use { jedis ->
338+
jedis.eval(
339+
"redis.call('RENAME', KEYS[2], KEYS[1]);",
340+
2,
341+
dataset.twingraphId,
342+
"backupGraph-$datasetId")
343+
}
344+
}
320345
datasetRepository.save(dataset.apply { status = Dataset.Status.ERROR })
321346
}
322347
}

0 commit comments

Comments
 (0)