Skip to content

Commit a904ae8

Browse files
committed
Add useGraphModule Boolean
1 parent c2d332b commit a904ae8

File tree

4 files changed

+40
-7
lines changed

4 files changed

+40
-7
lines changed

api/src/main/resources/application.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ csm:
8181
port: "6379"
8282
username: "default_user"
8383
password: "default_password"
84+
useGraphModule: true
8485
tls:
8586
enabled: false
8687
bundle: ""

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ class DatasetServiceIntegrationTest : CsmRedisTestBase() {
111111
@Autowired lateinit var solutionApiService: SolutionApiServiceInterface
112112
@Autowired lateinit var workspaceApiService: WorkspaceApiServiceInterface
113113
@SpykBean @Autowired lateinit var csmPlatformProperties: CsmPlatformProperties
114-
@MockK(relaxUnitFun = true) private lateinit var eventPublisher: CsmEventPublisher
114+
@MockK(relaxUnitFun = true) lateinit var eventPublisher: CsmEventPublisher
115115

116116
lateinit var connectorSaved: Connector
117117
lateinit var dataset: Dataset

dataset/src/integrationTest/resources/application-dataset-test.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ csm:
9090
host: "localhost"
9191
port: "6379"
9292
username: "default"
93+
useGraphModule: true
9394
# Leave it as blank as there's no auth with test container
9495
password:
9596
tls:

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

Lines changed: 37 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,8 @@ import kotlinx.coroutines.launch
8787
import org.apache.commons.compress.archivers.ArchiveStreamFactory
8888
import org.apache.commons.csv.CSVFormat
8989
import org.apache.commons.csv.CSVRecord
90+
import org.apache.commons.lang3.NotImplementedException
91+
import org.springframework.beans.factory.annotation.Value
9092
import org.springframework.context.event.EventListener
9193
import org.springframework.core.io.ByteArrayResource
9294
import org.springframework.core.io.Resource
@@ -127,9 +129,15 @@ class DatasetServiceImpl(
127129
private val unifiedJedis: UnifiedJedis,
128130
private val csmRbac: CsmRbac,
129131
private val csmAdmin: CsmAdmin,
130-
private val resourceScanner: ResourceScanner
132+
private val resourceScanner: ResourceScanner,
133+
@Value("\${csm.platform.twincache.useGraphModule}") private val useGraphModule: Boolean
131134
) : CsmPhoenixService(), DatasetApiServiceInterface {
132135

136+
private val notImplementedExceptionMessage =
137+
"The API is not configured to use Graph functionnalities. " +
138+
"This endpoint is deactivated so. " +
139+
"To change that, set the API configuration entry 'csm.platform.twincache.useGraphModule' to true"
140+
133141
override fun findAllDatasets(organizationId: String, page: Int?, size: Int?): List<Dataset> {
134142
organizationService.getVerifiedOrganization(organizationId)
135143
val defaultPageSize = csmPlatformProperties.twincache.dataset.defaultPageSize
@@ -188,8 +196,10 @@ class DatasetServiceImpl(
188196
?: throw IllegalArgumentException(
189197
"Source cannot be null for source type 'ADT' or 'Storage'")
190198

191-
val twingraphId = idGenerator.generate("twingraph")
192-
if (dataset.sourceType != null) {
199+
var twingraphId: String? = null
200+
201+
if (dataset.sourceType != null && useGraphModule) {
202+
twingraphId = idGenerator.generate("twingraph")
193203
val twincacheConnector = getCreateTwincacheConnector()
194204
dataset.connector =
195205
DatasetConnector(
@@ -229,6 +239,9 @@ class DatasetServiceImpl(
229239
datasetId: String,
230240
subDatasetGraphQuery: SubDatasetGraphQuery
231241
): Dataset {
242+
243+
checkIfGraphFunctionalityIsAvailable()
244+
232245
val dataset =
233246
getDatasetWithStatus(organizationId, datasetId, status = IngestionStatusEnum.SUCCESS)
234247
csmRbac.verify(dataset.getRbac(), PERMISSION_CREATE_CHILDREN)
@@ -284,6 +297,12 @@ class DatasetServiceImpl(
284297
return datasetSaved
285298
}
286299

300+
private fun checkIfGraphFunctionalityIsAvailable() {
301+
if (!useGraphModule) {
302+
throw NotImplementedException(notImplementedExceptionMessage)
303+
}
304+
}
305+
287306
fun bulkQueryResult(queryBuffer: QueryBuffer, resultSet: ResultSet) {
288307

289308
resultSet.forEach { record: Record? ->
@@ -312,6 +331,8 @@ class DatasetServiceImpl(
312331
datasetId: String,
313332
body: Resource
314333
): FileUploadValidation {
334+
335+
checkIfGraphFunctionalityIsAvailable()
315336
val dataset = getDatasetWithStatus(organizationId, datasetId)
316337
csmRbac.verify(dataset.getRbac(), PERMISSION_WRITE)
317338

@@ -400,7 +421,7 @@ class DatasetServiceImpl(
400421
null -> IngestionStatusEnum.NONE.value
401422
DatasetSourceType.None -> {
402423
var twincacheStatus = TwincacheStatusEnum.EMPTY
403-
if (unifiedJedis.exists(dataset.twingraphId!!)) {
424+
if (useGraphModule && unifiedJedis.exists(dataset.twingraphId!!)) {
404425
twincacheStatus = TwincacheStatusEnum.FULL
405426
}
406427
datasetRepository.apply { dataset.twincacheStatus = twincacheStatus }
@@ -413,7 +434,7 @@ class DatasetServiceImpl(
413434
}
414435
if (dataset.ingestionStatus == IngestionStatusEnum.ERROR) {
415436
return IngestionStatusEnum.ERROR.value
416-
} else if (!unifiedJedis.exists(dataset.twingraphId!!)) {
437+
} else if (useGraphModule && !unifiedJedis.exists(dataset.twingraphId!!)) {
417438
IngestionStatusEnum.PENDING.value
418439
} else {
419440
dataset
@@ -483,6 +504,7 @@ class DatasetServiceImpl(
483504
}
484505

485506
override fun refreshDataset(organizationId: String, datasetId: String): DatasetTwinGraphInfo {
507+
checkIfGraphFunctionalityIsAvailable()
486508
val dataset = getVerifiedDataset(organizationId, datasetId, PERMISSION_WRITE)
487509

488510
dataset.takeUnless { it.sourceType == DatasetSourceType.File }
@@ -527,6 +549,7 @@ class DatasetServiceImpl(
527549
}
528550

529551
override fun rollbackRefresh(organizationId: String, datasetId: String): String {
552+
checkIfGraphFunctionalityIsAvailable()
530553
var dataset = getVerifiedDataset(organizationId, datasetId, PERMISSION_WRITE)
531554

532555
val status = getDatasetTwingraphStatus(organizationId, datasetId)
@@ -556,7 +579,7 @@ class DatasetServiceImpl(
556579
throw CsmAccessForbiddenException("You are not allowed to delete this Resource")
557580
}
558581

559-
if (unifiedJedis.exists(dataset.twingraphId!!)) {
582+
if (useGraphModule && unifiedJedis.exists(dataset.twingraphId!!)) {
560583
unifiedJedis.del(dataset.twingraphId!!)
561584
}
562585

@@ -626,6 +649,7 @@ class DatasetServiceImpl(
626649
datasetId: String,
627650
datasetTwinGraphQuery: DatasetTwinGraphQuery
628651
): List<Any> {
652+
checkIfGraphFunctionalityIsAvailable()
629653
val dataset =
630654
getDatasetWithStatus(organizationId, datasetId, status = IngestionStatusEnum.SUCCESS)
631655

@@ -686,6 +710,7 @@ class DatasetServiceImpl(
686710
twinGraphQuery: DatasetTwinGraphQuery,
687711
body: Resource
688712
): TwinGraphBatchResult {
713+
checkIfGraphFunctionalityIsAvailable()
689714
val dataset = getDatasetWithStatus(organizationId, datasetId)
690715
csmRbac.verify(dataset.getRbac(), PERMISSION_WRITE)
691716
resourceScanner.scanMimeTypes(body, listOf("text/csv", "text/plain"))
@@ -709,6 +734,7 @@ class DatasetServiceImpl(
709734
datasetId: String,
710735
datasetTwinGraphQuery: DatasetTwinGraphQuery
711736
): DatasetTwinGraphHash {
737+
checkIfGraphFunctionalityIsAvailable()
712738
val dataset =
713739
getDatasetWithStatus(organizationId, datasetId, status = IngestionStatusEnum.SUCCESS)
714740
val bulkQueryKey = bulkQueryKey(dataset.twingraphId!!, datasetTwinGraphQuery.query, null)
@@ -731,6 +757,7 @@ class DatasetServiceImpl(
731757
}
732758

733759
override fun downloadTwingraph(organizationId: String, hash: String): Resource {
760+
checkIfGraphFunctionalityIsAvailable()
734761
organizationService.getVerifiedOrganization(organizationId)
735762

736763
val bulkQueryId = bulkQueryKey(hash)
@@ -781,6 +808,7 @@ class DatasetServiceImpl(
781808
type: String,
782809
graphProperties: List<GraphProperties>
783810
): String {
811+
checkIfGraphFunctionalityIsAvailable()
784812
val dataset = getDatasetWithStatus(organizationId, datasetId)
785813
csmRbac.verify(dataset.getRbac(), PERMISSION_WRITE)
786814
var result = ""
@@ -815,6 +843,7 @@ class DatasetServiceImpl(
815843
type: String,
816844
ids: List<String>
817845
): String {
846+
checkIfGraphFunctionalityIsAvailable()
818847
val dataset = getDatasetWithStatus(organizationId, datasetId)
819848
var result = ""
820849
when (type) {
@@ -910,6 +939,7 @@ class DatasetServiceImpl(
910939
type: String,
911940
graphProperties: List<GraphProperties>
912941
): String {
942+
checkIfGraphFunctionalityIsAvailable()
913943
val dataset = getDatasetWithStatus(organizationId, datasetId)
914944
csmRbac.verify(dataset.getRbac(), PERMISSION_WRITE)
915945
var result = ""
@@ -944,6 +974,7 @@ class DatasetServiceImpl(
944974
type: String,
945975
ids: List<String>
946976
) {
977+
checkIfGraphFunctionalityIsAvailable()
947978
val dataset = getDatasetWithStatus(organizationId, datasetId)
948979
csmRbac.verify(dataset.getRbac(), PERMISSION_WRITE)
949980
return trx(dataset) { localDataset ->

0 commit comments

Comments
 (0)