From 57ff69b5e6e7ccdd3e756fcf1db3159b7d032023 Mon Sep 17 00:00:00 2001 From: Simon Dumas Date: Tue, 6 Jun 2023 10:32:38 +0200 Subject: [PATCH] Do not retry when retrieving groups fail --- delta/app/src/main/resources/app.conf | 2 -- .../bluebrain/nexus/delta/wiring/RealmsModule.scala | 4 ++-- .../nexus/delta/routes/RealmsRoutesSpec.scala | 2 +- .../delta/plugins/storage/StoragePluginModule.scala | 10 ++-------- .../bluebrain/nexus/delta/sdk/http/HttpClient.scala | 8 ++++++++ .../nexus/delta/sdk/http/HttpClientConfig.scala | 3 +++ .../nexus/delta/sdk/realms/RealmsConfig.scala | 6 +----- .../nexus/delta/sdk/realms/RealmImplSpec.scala | 2 +- 8 files changed, 18 insertions(+), 19 deletions(-) diff --git a/delta/app/src/main/resources/app.conf b/delta/app/src/main/resources/app.conf index 1bd5f88fe7..1d3182a03e 100644 --- a/delta/app/src/main/resources/app.conf +++ b/delta/app/src/main/resources/app.conf @@ -151,8 +151,6 @@ app { event-log = ${app.defaults.event-log} # the realms pagination config pagination = ${app.defaults.pagination} - # the client to interact with the Open-ID Connect endpoints - client = ${app.defaults.http-client} } # Organizations configuration diff --git a/delta/app/src/main/scala/ch/epfl/bluebrain/nexus/delta/wiring/RealmsModule.scala b/delta/app/src/main/scala/ch/epfl/bluebrain/nexus/delta/wiring/RealmsModule.scala index 314e4d019a..979528ebba 100644 --- a/delta/app/src/main/scala/ch/epfl/bluebrain/nexus/delta/wiring/RealmsModule.scala +++ b/delta/app/src/main/scala/ch/epfl/bluebrain/nexus/delta/wiring/RealmsModule.scala @@ -53,8 +53,8 @@ object RealmsModule extends ModuleDef { new RealmsRoutes(identities, realms, aclCheck)(cfg.http.baseUri, cfg.realms.pagination, s, cr, ordering) } - make[HttpClient].named("realm").from { (cfg: AppConfig, as: ActorSystem[Nothing], sc: Scheduler) => - HttpClient()(cfg.realms.client, as.classicSystem, sc) + make[HttpClient].named("realm").from { (as: ActorSystem[Nothing], sc: Scheduler) => + HttpClient.noRetry()(as.classicSystem, sc) } many[SseEncoder[_]].add { base: BaseUri => RealmEvent.sseEncoder(base) } diff --git a/delta/app/src/test/scala/ch/epfl/bluebrain/nexus/delta/routes/RealmsRoutesSpec.scala b/delta/app/src/test/scala/ch/epfl/bluebrain/nexus/delta/routes/RealmsRoutesSpec.scala index 1cde646e7d..064ecb71b1 100644 --- a/delta/app/src/test/scala/ch/epfl/bluebrain/nexus/delta/routes/RealmsRoutesSpec.scala +++ b/delta/app/src/test/scala/ch/epfl/bluebrain/nexus/delta/routes/RealmsRoutesSpec.scala @@ -27,7 +27,7 @@ class RealmsRoutesSpec extends BaseRouteSpec { val githubLogo: Uri = "https://localhost/ghlogo" - val config: RealmsConfig = RealmsConfig(eventLogConfig, pagination, httpClientConfig) + val config: RealmsConfig = RealmsConfig(eventLogConfig, pagination) val (githubOpenId, githubWk) = WellKnownGen.create(github.value) val (gitlabOpenId, gitlabWk) = WellKnownGen.create(gitlab.value) diff --git a/delta/plugins/storage/src/main/scala/ch/epfl/bluebrain/nexus/delta/plugins/storage/StoragePluginModule.scala b/delta/plugins/storage/src/main/scala/ch/epfl/bluebrain/nexus/delta/plugins/storage/StoragePluginModule.scala index 28900b2196..d09099c97c 100644 --- a/delta/plugins/storage/src/main/scala/ch/epfl/bluebrain/nexus/delta/plugins/storage/StoragePluginModule.scala +++ b/delta/plugins/storage/src/main/scala/ch/epfl/bluebrain/nexus/delta/plugins/storage/StoragePluginModule.scala @@ -3,7 +3,6 @@ package ch.epfl.bluebrain.nexus.delta.plugins.storage import akka.actor import akka.actor.typed.ActorSystem import cats.effect.Clock -import ch.epfl.bluebrain.nexus.delta.kernel.RetryStrategyConfig import ch.epfl.bluebrain.nexus.delta.kernel.database.Transactors import ch.epfl.bluebrain.nexus.delta.kernel.utils.UUIDF import ch.epfl.bluebrain.nexus.delta.plugins.elasticsearch.client.ElasticSearchClient @@ -35,7 +34,7 @@ import ch.epfl.bluebrain.nexus.delta.sdk.crypto.Crypto import ch.epfl.bluebrain.nexus.delta.sdk.deletion.ProjectDeletionTask import ch.epfl.bluebrain.nexus.delta.sdk.directives.DeltaSchemeDirectives import ch.epfl.bluebrain.nexus.delta.sdk.fusion.FusionConfig -import ch.epfl.bluebrain.nexus.delta.sdk.http.{HttpClient, HttpClientConfig, HttpClientWorthRetry} +import ch.epfl.bluebrain.nexus.delta.sdk.http.HttpClient import ch.epfl.bluebrain.nexus.delta.sdk.identities.Identities import ch.epfl.bluebrain.nexus.delta.sdk.identities.model.ServiceAccount import ch.epfl.bluebrain.nexus.delta.sdk.migration.{MigrationLog, MigrationState} @@ -68,12 +67,7 @@ class StoragePluginModule(priority: Int) extends ModuleDef { make[StorageTypeConfig].from { cfg: StoragePluginConfig => cfg.storages.storageTypeConfig } make[HttpClient].named("storage").from { (as: ActorSystem[Nothing], sc: Scheduler) => - val clientConfig = HttpClientConfig(RetryStrategyConfig.AlwaysGiveUp, HttpClientWorthRetry.never, true) - HttpClient()( - clientConfig, - as.classicSystem, - sc - ) + HttpClient.noRetry()(as.classicSystem, sc) } make[Storages] diff --git a/delta/sdk/src/main/scala/ch/epfl/bluebrain/nexus/delta/sdk/http/HttpClient.scala b/delta/sdk/src/main/scala/ch/epfl/bluebrain/nexus/delta/sdk/http/HttpClient.scala index 7fb2a915bf..9cf970f45c 100644 --- a/delta/sdk/src/main/scala/ch/epfl/bluebrain/nexus/delta/sdk/http/HttpClient.scala +++ b/delta/sdk/src/main/scala/ch/epfl/bluebrain/nexus/delta/sdk/http/HttpClient.scala @@ -87,6 +87,14 @@ object HttpClient { apply(HttpSingleRequest.default) } + /** + * Construct an Http client using an underlying akka http client which will not retry on failures + */ + final def noRetry()(implicit as: ActorSystem, scheduler: Scheduler): HttpClient = { + implicit val config: HttpClientConfig = HttpClientConfig.noRetry + apply() + } + private[http] def apply( client: HttpSingleRequest )(implicit httpConfig: HttpClientConfig, as: ActorSystem, scheduler: Scheduler): HttpClient = diff --git a/delta/sdk/src/main/scala/ch/epfl/bluebrain/nexus/delta/sdk/http/HttpClientConfig.scala b/delta/sdk/src/main/scala/ch/epfl/bluebrain/nexus/delta/sdk/http/HttpClientConfig.scala index db6ce0b575..528690f523 100644 --- a/delta/sdk/src/main/scala/ch/epfl/bluebrain/nexus/delta/sdk/http/HttpClientConfig.scala +++ b/delta/sdk/src/main/scala/ch/epfl/bluebrain/nexus/delta/sdk/http/HttpClientConfig.scala @@ -38,6 +38,9 @@ object HttpClientConfig { private[http] val logger: Logger = Logger[HttpClientConfig] + val noRetry: HttpClientConfig = + HttpClientConfig(RetryStrategyConfig.AlwaysGiveUp, HttpClientWorthRetry.never, compression = true) + @nowarn("cat=unused") implicit private val httpClientWorthRetryConverter: ConfigReader[HttpClientWorthRetry] = ConfigReader.fromString[HttpClientWorthRetry](string => diff --git a/delta/sdk/src/main/scala/ch/epfl/bluebrain/nexus/delta/sdk/realms/RealmsConfig.scala b/delta/sdk/src/main/scala/ch/epfl/bluebrain/nexus/delta/sdk/realms/RealmsConfig.scala index 0837f106ab..0d2afea088 100644 --- a/delta/sdk/src/main/scala/ch/epfl/bluebrain/nexus/delta/sdk/realms/RealmsConfig.scala +++ b/delta/sdk/src/main/scala/ch/epfl/bluebrain/nexus/delta/sdk/realms/RealmsConfig.scala @@ -1,6 +1,5 @@ package ch.epfl.bluebrain.nexus.delta.sdk.realms -import ch.epfl.bluebrain.nexus.delta.sdk.http.HttpClientConfig import ch.epfl.bluebrain.nexus.delta.sdk.model.search.PaginationConfig import ch.epfl.bluebrain.nexus.delta.sourcing.config.EventLogConfig import pureconfig.ConfigReader @@ -13,13 +12,10 @@ import pureconfig.generic.semiauto.deriveReader * The event log configuration * @param pagination * configuration for how pagination should behave in listing operations - * @param client - * the client to interact with the Open-ID Connect endpoints */ final case class RealmsConfig( eventLog: EventLogConfig, - pagination: PaginationConfig, - client: HttpClientConfig + pagination: PaginationConfig ) object RealmsConfig { diff --git a/delta/sdk/src/test/scala/ch/epfl/bluebrain/nexus/delta/sdk/realms/RealmImplSpec.scala b/delta/sdk/src/test/scala/ch/epfl/bluebrain/nexus/delta/sdk/realms/RealmImplSpec.scala index a6ac111efa..223f68cf30 100644 --- a/delta/sdk/src/test/scala/ch/epfl/bluebrain/nexus/delta/sdk/realms/RealmImplSpec.scala +++ b/delta/sdk/src/test/scala/ch/epfl/bluebrain/nexus/delta/sdk/realms/RealmImplSpec.scala @@ -42,7 +42,7 @@ class RealmImplSpec val (githubOpenId, githubWk) = WellKnownGen.create(github.value) val (gitlabOpenId, gitlabWk) = WellKnownGen.create(gitlab.value) - val realmConfig = RealmsConfig(eventLogConfig, pagination, httpClientConfig) + val realmConfig = RealmsConfig(eventLogConfig, pagination) val resolveWellKnown = ioFromMap( Map(githubOpenId -> githubWk, gitlabOpenId -> gitlabWk),