[collab/gitlab] share fragments cache between GQL loaders

GitOrigin-RevId: faa7b01f7251eae04a33b4c007d2bbb687fc5360
This commit is contained in:
Ivan Semenov
2023-07-27 16:31:34 +02:00
committed by intellij-monorepo-bot
parent 0b9d6a41b8
commit f08bd8b175
4 changed files with 21 additions and 10 deletions

View File

@@ -82,13 +82,13 @@ open class CachingGraphQLQueryLoader(
companion object {
data class Block(val body: String, val dependencies: Set<String>)
private fun createFragmentCache(): ConcurrentMap<String, Block> =
fun createFragmentCache(): ConcurrentMap<String, Block> =
Caffeine.newBuilder()
.expireAfterAccess(Duration.of(2, ChronoUnit.MINUTES))
.build<String, Block>()
.asMap()
private fun createQueryCache(): ConcurrentMap<String, String> =
fun createQueryCache(): ConcurrentMap<String, String> =
Caffeine.newBuilder()
.expireAfterAccess(Duration.of(1, ChronoUnit.MINUTES))
.build<String, String>()

View File

@@ -61,10 +61,10 @@ suspend fun GitLabApi.GraphQL.gitLabQuery(serverPath: GitLabServerPath, query: G
runCatching { rest.getServerMetadata(it).body() }
}
val queryLoader = if (serverMeta?.enterprise == false) {
GitLabCommunityGQLQueryLoader
GitLabGQLQueryLoaders.community
}
else {
GitLabGQLQueryLoader
GitLabGQLQueryLoaders.default
}
return query(serverPath.gqlApiUri, { queryLoader.loadQuery(query.filePath) }, variablesObject)
}

View File

@@ -1,6 +0,0 @@
// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package org.jetbrains.plugins.gitlab.api
import com.intellij.collaboration.api.graphql.CachingGraphQLQueryLoader
internal object GitLabGQLQueryLoader : CachingGraphQLQueryLoader()

View File

@@ -0,0 +1,17 @@
// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package org.jetbrains.plugins.gitlab.api
import com.intellij.collaboration.api.graphql.CachingGraphQLQueryLoader
internal object GitLabGQLQueryLoaders {
private val sharedFragmentsCache = CachingGraphQLQueryLoader.createFragmentCache()
val default: CachingGraphQLQueryLoader by lazy {
CachingGraphQLQueryLoader(sharedFragmentsCache)
}
val community: CachingGraphQLQueryLoader by lazy {
CachingGraphQLQueryLoader(sharedFragmentsCache,
fragmentsDirectories = listOf("graphql/fragment/community",
"graphql/fragment"))
}
}